原文地址:Receive METEOR weather satellite images with RTLSDR and GQRX on Linux (chaospixel.com)
原文作者DANIEL VOGELBACHER,发表于2019-12-15。
目录
要求
你应该能够编译来自Github的源代码,并且在你的操作系统上安装工具。我使用Debian系统,除了一些特殊的包外,其他用到的都可在Debian Buster中找到。
卫星
用到了三颗在轨卫星:
- METEOR-M 1 (退役)
- METEOR-M 2
- METEOR-M 2-2
频率
Satellite | Frequency | Bandwidth | Data | Symbol rate | Modulation |
---|---|---|---|---|---|
METEOR-M N2 | 137.1 MHz | 140 kHz | LRPT | 72000 | QPSK |
METEOR-M N2-2 | 137.9 MHz | 140 kHz | LRPT | 72000 | OQPSK |
关于Meteor卫星的更多在线资源(active APIDs等)可在http://happysat.nl/Meteor/html/Meteor_Status.html中找到。
硬件
- 笔记本
- RTLSDR v3 适配器 Buy RTL-SDR Dongles (RTL2832U)
- 四轮旋天线 QFH antenna qfh antenne 137 mhz
- RTLSDR 宽带 LNA RTL-SDR Blog Wideband LNA (Bias Tee Powered)
软件
- rtl_fm
- gqrx
- gpredict
- sox
- meteor_demod https://github.com/dbdexter-dev/meteor_demod
- meteor_decoder https://github.com/artlav/meteor_decoder
- alternative: meteor_decode GitHub - dbdexter-dev/meteor_decode: Meteor-M2 LRPT decoder
- meteor_rectify GitHub - dbdexter-dev/meteor_rectify: Meteor-M2 image rectifier
天线设置
我从制造商处买了一个四螺旋天线,但是仍然需要很多DIY的步骤。使用RTLSDR适配的V型偶极子天线,你可能会获得好的结果,前提条件是它被正确的组合,每个极被缩短到53.4cm,更多的信息可参阅 Simple NOAA/Meteor Weather Satellite Antenna: A 137 MHz V-Dipole.
使用gpredict工具进行卫星过顶预测
gpredict可以帮助你看到一颗卫星经过你所在位置上空时候的时间和高度。编辑工具的设置,从而匹配你的经纬度。添加METEOR-M 2和METEOR-M2 2卫星到模块中,并在sky at a glance窗口中查看。(工具使用方法可以参阅https://www.bilibili.com/video/BV1nr4y157Cr/)
使用Gqrx获取原始IQ文件
METEOR LRPT 信号的带宽是140kHz。我通常按照下面的参数配置RTLSDR设备。
我正在使用的RTLSDR放大器,需要Bias-T电源驱动,此时需要设置bias=1。当你没有RTLSDR放大器的时候,不要使用这个设置。
确认Receiver setting选项卡中的channel offset选项的值被设置为0。否则,将不会在信号的中心进行IQ采样,你将不能解码信号。
Gqrx有一个内置的IQ采样器,这将把基带IQ流写入一个文件。(Gqrx类似有SDRsharp,但 运行在Linux和Mac上)
采集文件以一个样点2个float类型(32bit)值编码。我们后续需要将文件转换为2个short ints(16bit)编码。
当接收到METEOR信号时,瀑布图应该如下所示:
转换原始IQ文件到wav文件
Gqrx输出的原始IQ文件是一对32位浮点数(I路和Q路各一个)。使用sox工具,你可以将raw文件转换为使用16bit int类型编码的wav文件。meteor_demod仅能够读取16bit int类型或者8bit uint类型数据。如果不进行转换,meteor_demod将不能读取文件。命令行如下:
sox -t raw -e floating-point -b 32 -c 2 -r 144000 \
gqrx_20191103_133844_137900000_144000_fc.raw \
-t wav -e signed-integer -b 16 -c 2 -r 144000 \
gqrx_20191103_133844_137900000_144000_fc.wav
sox工具在windows下也可用,详见Windows下sox的安装和使用方法_sox windows_Aomi_lee的博客-CSDN博客
可选:使用rtl_fm替代gqrx
如果对你不想要使用gqrx,或者想要将上述过程自动化且不使用GUI界面,你可以使用rtl_fm来采样数据,从而避免前端操作。
timeout 10m rtl_fm -M raw -s 140000 -f 137.9M \
-E dc -g 12 -p 1 > raw_dump.raw
10分钟后,采样过程终止。将raw文件转换为wav文件:
sox -t raw -esigned-integer -b16 -r 140000 \
-c 2 "raw_dump.raw" \
-t wav raw_dump.wav
使用示例可以是一个Rasberry Pi连接一个RTLSDR适配器。
解调采集信号
对于解调,我使用来自Davide Belloli的非常好的工具,你可以从GitHub上面获取并且编译它。
~/sdradio/src/meteor_demod/src/meteor_demod -O 8 -f 128 -m oqpsk gqrx_20191103_133844_137900000_144000_fc.wav
上述命令对采集的文件进行解调,产生一个以*.s为后缀的符号文件。这个符号文件能够被meteor_decode解码,这个工具也是来自于Davide Belloli。
M N2和M N-2的差别
目前两个运行中的卫星使用不同的调制方式(见第一节中的表)。根据卫星的不同,你必须选择QPSK模式或者OQPSK模式。
meteor_demod工具箱有一个命令行选项-m,可以改变解调方式。
解码符号文件
检查从Github上下载下来的meteor_decoder,并且编译。编译的时候需要freepascal编译器,Debian包括一个包。依据卫星,你需要使用differential encoding(-diff)对于M N2-2。对于M N2-2符号率80.0(目前72.0),你需要deinterleave(-int)。
~/sdradio/src/meteor_decoder_pascal/medet LRPT_2019_11_03-16_49.s meteor_capture -diff -r 65 -g 65 -b 64
命令行运行结束后输出一些统计信息:
Reading LRPT_2019_11_03-16_49...
Dediffing...
pos=60632442 ( 99.97%) ( 6, 8466,50) sig= -211 rs=(-1,-1,-1,-1) 4B6CCE1A
Total: 58.602921
Processing: 4.060712
Correlation: 6.565356
Viterbi: 44.119102
ECC: 3.052056
Remainder: 0.805692
Packets: 3111 / 3573
Elapsed time: 00:06:16.728
最终图片
结果PNG文件,能够使用meteor_rectify纠正。
Opened 1568x2464 image
Spawning process 1
Spawning process 2
Spawning process 3
Spawning process 4
Spawning process 5
Spawning process 6
Spawning process 7
Spawning process 8
Writing rectified image to meteor_capture-rectified.png
采样文件
你可以在https://chaospixel.com/pub/rtlsdr/gqrx_meteor/samples下载本文中使用到的文件。仅供私人使用。(为防止链接不可用,我在这里上传了一份,仅供学习使用)