SDR看起来很高深的样子, 其实用一个电视棒 通过USB连接widora-neo就可以做成个简单的SDR接收机了.
1. 硬件
电视棒选择使用RTL2832U+R820T芯片的 .
R820T是调谐器,接收频率范围24MHz - 1766 MHz, RTL2832U是螃蟹家的一款用于数字电视广播接收的解调芯片,后来有大神发现它可以直接输出原始的I/Q采样数据.
下面是其中一款:
2. SDR 软件.
在openwrt平台上使用rtl_sdr软件可以方便地接收和处理数字信号.
依次安装下列软件:
2.1 opkg install libusb-1.0 ( ???RTL2832是支持USB2.0的)
2.2 opkg install librtlsdr
2.3 opkg install rtl-sdr
(可以在此下载: 2_1482130632396_libusb-1.0_1.0.19-1_ramips_24kec.ipk 1_1482130632396_librtlsdr_2014-02-10_ramips_24kec.ipk 0_1482130632395_rtl-sdr_2014-02-10_ramips_24kec.ipk
3. 收听调频广播
3.1 做一个fm.sh文件,内容如下:
#!/bin/sh
rtl_fm -A fast -M wbfm -E deemp -s 256k -r 96k -f ${*}M | aplay -r 48k -f dat -t raw -c 2
3.2 完成后赋权限:
chmod 755 fm.sh
3.3 运行 ./fm.sh 103.7 可以播放当地103.7MHz的调频电台
接收灵敏度略低于商品调频收音机.
4. 指定频率范围内搜索电台:
例子:
rtl_fm -A fast -M wbfm -E deemp -s 256k -r 96k -l 120 -f 100M:103M:25k | aplay -r 48k -f dat -t raw -c 2
100MHz 至 103MHz 范围内搜索调频电台, 步进25k, 播放搜索到的第一个台.
(-l 120 噪音抑制电平,弱台取小值.)
5. 收听航空波段
航空波段属于调幅波,仅给个例子,可以自己去研究.
rtl_fm -A lut -M am -s 10k -f 126.2917M | aplay -r 10k -f S16_LE -t raw
6. 接收飞行器广播信息
运行命令: rtl_adsb -V
可视化软件参见 http://www.rtl1090.com/
可以从中提取航班和检验码等信息:
使用方法: rtl_adsb | decode
放在后台运行: screen sh -c "rtl_adsb | decode >> record.data " (将提取的信息存到record.data文件中)
如果decode的当前目录未加入到PATH环境变量中,用 rtl_adsb | ./decode
7. 其他
7.1 可以tcp传送接收到的原始采样数据.
7.2 参考http://kmkeen.com/rtl-demod-guide/index.html可以了解更多rtl_sdr的使用说明.
直接用rtl_adsb 命令可以输出飞行器发布的ADS-B 28位字符信息。
为此编了一个程序,可以从中提取航班和检验码等信息0_1482980769822_decode 。
使用方法: rtl_adsb | decode
放在后台运行: screen sh -c "rtl_adsb | decode >> record.data " (将提取的信息存到record.data文件中)
结果会是这样的:
24位的CRC还可以用来纠错,还不知道如何来操作。
改进了一下,现在可以检错并提取座标了。0_1483512692979_decode2
这几天玩得意犹未尽,增加了hash和定时保存的功能,0_1484267539250_decode
源代码放在这里:https://github.com/widora/ctest 见ads_b.c