# 零。原理部分

关于处理氢谱线绘制银河旋转曲线的原理部分可见于【射电望远镜】绘制银河系旋转曲线

当然,也可以直接略过,用代码来处理数据

代码 github 地址:https://github.com/BI6MHT/MilkyWay

代码 gitee 地址:https://gitee.com/BI6MHT/milky-way

# 一。文件命名

为了方便数据的处理,文件命名如图图 1 所示,即 ' 赤经 赤纬 ',注意空格;在此举一个命名的例子:

17h04m 为赤经,当然精确到 s 也是可以的,比如 17h04m03s

-41d 为赤纬,也可精确到小数点后,比如 - 41.23d

文件命名

图 1:文件命名

# 二。数据格式

通过 SDRSharp 的 IF average 进行积分平均后的频谱 txt 文件格式如图 2 所示

第一行与积分平均的次数有关,不用考虑

第一列是观测频率,单位是 MHz

第二列是信号强度,单位应该是电压,即 V

数据格式

图 2:数据格式

# 三。观测时间和地点的确定

Main.py 文件中代码是根据文件的修改时间来返回 UTC 时间的,如图 3.1 所示

观测时间

图 3.1:Main.py 文件中观测时间的确定

文本文件(频谱文件)有创建时间,修改时间,访问时间三种时间属性,如图图 3.2;文件重命名不会改变任意一种时间属性;硬盘上进行拷贝的话应该会改变创建和访问时间,但是修改时间不会变动。

观测时间

图 3.2:文件时间属性

在 GitHub 或者 Gitee 上下载代码后,会发现一个 Data.zip 的压缩文件,示例的频谱数据都在这个压缩包中,大家下载后可以解压为目录下同名文件夹,如图 3.3。然而仍然存在一个问题,如果用 windows 自带的解压,解压后文件的创建时间才是观测时间,如果用我电脑上 Bandzip 这个解压工具进行解压,解压后文件的修改时间才是观测时间。于是在此便默认大家都用 Win10 自带的解压,创建时间才是观测时间 。

把Data解压到同名文件夹

图 3.3:把 Data 解压到同名文件夹

当然,具体是哪个时间属性才是观测时间,可以观察一下文件的属性,如果有一个时间属性不同文件时不同的,那应该便是观测时间了。如果你想以文件的修改时间为观测时间,可以将图 3.1 的 LocalTime = os.stat (obs_Dir+obs_Source+'.txt').st_ctime 中的 ct_mtime 改为 st_mtime。

观测地点可在 Main.py 文件中进行修改,如图 3.4 所示。obs_Site = '110.81285 32.59175 40' 中的 110.81285 代表经度,32.59175 代表纬度,40 代表海拔为 40m。

观测地点

图 3.4:观测地点

# 四。示例数据来源

在湖北省十堰市观测的氢谱线数据,利用赤道仪进行天体定位,天线为栅格抛物面,该天线在曾在 B 站 “从零开始的业余射电天文” 系列中介绍过,见于图 4.1

点击此转到视频链接

B站视频

图 4.1:B 站视频

其中放大滤波器没有采用视频中推荐的,而采用了咸鱼某款,如图图 4.21 所示的蓝色板子,1420MHz 具有 40-50dB 的增益,噪声系数也很低。

咸鱼卖家

图 4.2:咸鱼卖家

# 五。代码适用范围

代旋转曲线代码适合处理在银纬 0° 附近,银经 0° 到 90° 和 270° 到 360° 的观测到的氢谱线。

旋臂成像代码可以处理在银纬 0° 附近,所有银经范围内的氢谱线。

在银纬 0° 附近,不同银经对应的赤经赤纬如图 5

第一列为银经,第二列为赤经,第三列为赤纬。

推荐扫描点坐标

图 5:推荐扫描点坐标

# 六.python 的使用

在运行代码前,请确保你的 python 库中含有 “astropy,numpy ,matplotlib,pandas,scipy” 这五个包。

或者直接安装 anaconda 这个软件,里面集成了很多科学计算的包,但没有 astropy 这个包,不过在 anaconda 可以手动安装这个包

如果在 anaconda 自带的编译器 spyder 中直接运行 Main.py 文件,当它发现缺少 astropy 这个包时,会自动下载。不过默认的包下载地址应该在国外,所以下载速度有些慢

python 安装包或者安装 anaconda 的教程可见于 B 站,或者直接使用搜索引擎

全部的代码文件如图 6.1 所示

全部代码

图 6.1:全部代码

所有的频谱 txt 文件均放于 Data,运行 Main.py 文件

可以得到 氢谱线相对于日心的径向速度 vs 谱线的等效温度 (即强度) 的频谱图,如图 6.2 所示;上方的图是未经平滑的频谱,下方是平滑后的频谱;最上方的文字代表了观测目标的赤经赤纬以及 UTC 观测时间。所有生成的频谱图均存放在 Pictures 文件中,以观测目标所在银经进行命名。

频谱示例

图 6.2:频谱示例

同时也可以得到一个名为 MilkyWay.csv 的 excel 文件,里面储存着关于频谱的赤经赤纬,银经银纬,峰值处的径向速度,最大径向速度,不过暂时不用这些。

# 七。银河系旋转曲线的绘制,有暗物质存在?

在确保已经成功运行过 Main.py 文件的前提下,直接运行 rocurve.py
,便可以得到银河系旋转曲线,如图 7.1 所示。
其中横坐标是氢分子团距离银心的距离,纵坐标是绕银心转动的速度。

银河系旋转曲线

图 7.1:银河系旋转曲线

理论上的旋转曲线应当如图 7.2 或者 7.3 所示,即在超过一定距离后,天体运行遵循开普勒第三定律,转动速度不断下降。

理论曲线

图 7.2:理论曲线

理论曲线

图 7.2:理论曲线

而从实际测量的曲线来看,转动速度在核心区陡峭上升,因为这里时星系质量集中的区域,转动规律类似于刚体转动速度在边缘区并没有随距离的增加而下降,反而保持着平坦不变的趋势

对这种现象的解释如下:

银河系有很大一部分质量不在星系的中心区域,而在边缘区以外很远的银晕中。那里几乎没有什么恒星,可观测到的发光物也很少。大多数的质量属于不发光的暗物质,即那些不发出任何辐射因而探测不到的物质。

然而根据在背景介绍中的绘制银河系旋转曲线的几何关系,我们选取,即最大径向速度的标准不是很准确,得出的图 7.1 并不能得出暗物质的存在,因为在更远处转动速度仍然可以是衰减的

# 八。银河系旋臂的绘制,银河系存在旋臂结构?

在绘制银河系旋臂前,需要对 MilkyWay.csv 中的数据略加修改。如果不加以修改,在确保已经成功运行过 Main.py 文件的前提下,直接运行 Map.py,可得到图 8.1,其中 Q1,Q2,Q3,Q4 分别代表银河系的第 1,2,3,4 象限,就是把银河系平面以太阳为中心,分成四个象限;C 代表银河系的中心,Sun 代表太阳;单位 kpc 中的 pc 即秒差距,是距离单位,k 即 1000 之意

银河系旋臂图1

图 8.1:直接运行 Map.py 得到的银河系旋臂图

尽管有些乱,但仍可以看出几条旋臂,对比图 8.2,可以看出三条臂分别是英仙臂(黑色)、外臂(黑色)以及太阳所在的猎户臂(蓝色)。

银河系

图 8.2:银河系悬臂

# 九。修正 MilkyWay.csv 文件

我们所需的只是频谱图上峰值对应径向速度,以及最大径向速度

下面我们看一下 MilkyWay.csv 里面的数据格式,如图 9.1

csv文件

图 9.1:csv 文件

第一列是观测目标(即一个观测文件)的编号,第二列是观测目标的赤经赤纬,第三列是观测目标的银经,第四列是观测目标的银维。

剩余的列便是峰值的对应径向速度和最大径向速度了。

其中每一行的最后一列就是最大径向速度,是用来求上面的银河系旋转曲线的,不用修改。

求峰值由于代码是用的求极值的算法,所以会求出一系列的极值峰,但是只有一两个才是真正的氢谱线峰,我们必须观察 Pictures 文件中生成的频谱图,去掉那些不是氢谱线的峰对应的径向速度。

图 9.1 中灰色的那一行对应图 6.2 中的频谱图,频谱图上标记红点的都注明了坐标,坐标第一个值是径向速度,第二个值是等效温度,我们只关注径向速度。

其中最右边的红点标注的是最大径向速度,即 MilkyWay.csv 中每一行的最后一列所对应的值,不必修改。观察频谱图后我们发现 - 133.712 处不是峰值,故直接删去,得到如图 9.2 所示。

修正csv文件

图 9.2:修正 csv 文件

对于多数频谱应该只能看出一个峰,少数有两个峰。我们对观测的每个源对应的每一行都做如上处理,可得到修正后的 MilkyWay.csv 文件,大概如图图 9.3 所示

修正csv文件1

图 9.3:修正后的 csv 文件

这时候候便可运行 Map.py 文件进行成像,得到图图 9.4

银河系旋臂图2

图 9.4:银河系旋臂图

黑色代表算法的唯一解,描绘出了英仙臂和外臂;蓝色和红色代表算法的两个解,个人认为蓝色是对的,即太阳所在的猎户臂。关于解的唯一性和不唯一性在氢谱线绘制银河的原理中有介绍。

注意:一个观测方向上有几个峰就能画出几个旋臂上的点,我们观测到的基本上都是双峰或者单峰,故在一个观测方向上只能画出一或两条旋臂上的点。