用 50 块钱的电视棒去接收空管频道,甚至飞机的应答机

Dump 1090 with aircraft infos and Safari browser showing Google Maps with aircraft icons

玩什么标题上已经说得够清楚了。

硬件方面,支持全频段接收的 DVB-T 电视棒即可,基本在淘宝上搜个「RTL SDR」就能找到一堆了。现在流行的有 RTL2832U + R820T 和 RTL2832U + E4000。查了查国外的资料,发现 R820T 的灵敏度貌似高一点,所以我选择了前者。

软件,Windows 上的软件好像比较丰富,然而这并…… OS X 上的选择不多,而且大部分都基于 「GNUradio」这个 SDR (Software-defined Radio) 模块,而这个模块又需要很多的依赖包,总之 —— 无尽的头痛。所以网上的方案基本都建议使用 MacPorts 去搞定。软件我们这里选择 GQRX,应该是最著名且最好用(稳定)的一个。

安装过程大同小异。没有 Xcode 先去 App Store 安装,完成后记得去启动一下,同意协议,要不然 MacPorts 会报错。然后安装 MacPorts,下载地址:https://www.macports.org/

Installation wizard of MacPorts

安装过程中需要下载一些包,所以在这一步的时候通常会卡住很久。确保网络畅通,耐心等待即可。

完成后打开 Terminal,敲入

sudo port install gqrx

MacPorts 会自动寻找所有需要的依赖包,下载,编译,安装,大扫除等等…… 这是一个痛苦而漫长的过程(我用了整整半天,如果你有 Terminal 可用的代理,请使用)。完成后如无意外的话,你会看到:

—> Scanning binaries for linking errors
—> No broken files found.

Icons of Xcode, GQRX and some dependences

然后在 Launchpad 看到亮晶晶的 GQRX 图标

打开后,先点一下左上角的开关,开始捕获。这时候你应该能看到下面的瀑布开始在流动了。

The input controls panel in GQRX

然后我们来说一下设置。首先去右边的 Input Controls 里把 「Hardware AGC」打开(重要),这个是硬件自动增益控制的开关,能让我们不那么高大上的设备收信能力提高一点。

然后,回到 FTT Settings,我一般把 Size 调到 8192 甚至更高,比较容易发现那些很窄的 AM 痕迹。Averaging 和 Pandapter 自己按感觉调一下就好。一个可以平滑频谱,另一个调整其高度。Zoom 的话,一会儿再说。侦察通信的时候,善用 Zoom 可以提高效率。

接着我们来看看上面的 Receiver Options。Filter Width 暂时不动,一会儿真正调的时候再手动选择。Shape 基本不用去改。Mode 这里我们可以选择信号类型,一般就是 WFM(我们普通听的电台),Narrow FM(窄带 FM,一般出租车司机们用的 Call 台,以及一些公司、保安用的对讲机),AM(短波,民用无线电,航空管制等)。AGC 选 Medium 或者 Fast 即可。Squelch 一会儿真正听的时候再调。

GQRX software being tunned to normal FM radio

现在,在左上角的频率框内键入 88.500000(广州的朋友),Mode 选择 WFM,应该就能听到 Hit FM 了 ;-)

然后,(同样,广州的朋友)可以试试听一下本地的航空管制频道。不过在这之前,先来讲一下一个重要的部件 —— 天线(非常重要)。使用原配的那条小天线接收 Air Band 真的是力不从心,即便我已经把它用晾衣架叉到了室外。随后我翻出了家里那套安桥音响附送的圈形 AM 天线,用了某种黑暗技术把它跟电视棒天线强行结♂合后,效果好多了。但收到的频率还是很少,能听的只有广州白云近进 2400-6000m (126.20mhz),而且基本上只能听清塔台,而听不到机组的回话(后者的信号一般很弱,而且发送位置不定)。如果你真想舒服地听(或者决定入坑)。我强烈建议你去淘宝上买一个专门接收 Air Band (120-140mhz)的天线,也不贵。

GQRX software being tuned to Guangzhou local air band, listening to the approach control center of Baiyun airport

首先输入 126.200000 (以白云近进为例),在右边把 Mode 调到 AM。 Zoom 调到最左,方便我们一次性看到比较宽的范围,最后顺手按一下下面的 C 让瀑布居中。可以看到,凡是有信号在传输的时候,对应位置上的频谱会出现一个波峰,而下面的瀑布上则会留下一段相应的红色痕迹。这时候 Zoom 调小的优势就立马呈现出来了,我们可以一次性地观察 125.376 ~ 127.433 这整个区域。为什么?因为,电视棒大多会有点失准,比如我这跟,本来是 126.20 的在我这却变成了 126.35 左右,观察到痕迹后再精确定位效率会比较高,直接输入频率未必就能命中。其次,ATC 的对话并不是想象中的那么繁忙,很多时候频道是净空的,这时候就要耐心等了,一次性观察大范围区域有助于提高发现率。

A zoom-in view of waterfall and waveform graph in GQRX

当信号出现后,首先把调频的那根杆子大致移到信号出现的区域上面,然后把 Zoom 调大进一步微调即可。

平时没信号的时候听着噪音很烦?在频道净空(没人说话)的时候去 Receiver Options 里面把 Squelch 调高直至听不到噪音为止,搞定。还可以拖拽调频棒子的两边去调整接收的频率宽度。调至与瀑布中的痕迹宽度相等即可。上方工具栏中第五个按钮可以创建书签,右下方的 Audio 面板可以录音。其余的各位自己慢慢探索吧。

这里是一小段白云进近的录音:

Loading

 

 

然后,我们来捣鼓应答机这块。

首先,要想知道为什么我们能通过接收应答机信号来确定附近飞机的位置(以及航班号、速度、高度、航向等等),就要先搞清楚什么是 次级雷达 以及 应答机 。我默认你们已经点了链接看完维基百科且都看懂了。简单来讲,就是现在的雷达已经不是像声呐那种「啊…… 啊…… 计算一下,噢!」的回声定位了,而是直接采用「你在哪儿?我在这儿!噢!」的数字系统了。飞机会持续不断地向外以脉冲的形式,广播自己的位置信息。至于飞机如何知道自己的当前位置,这又是 GPS 和 惯性制导 的事了。

开始。上一步安装 GQRX 的时候我们已经装了 GNUradio 以及它的依赖包了,所以这里无需再次去捣鼓 RTL-SDR 这个组件。但我们要用到它里面的一个叫 rtl_tcp 的东西。确保 RTL-SDR 已经被正确安装的方法是:在 Terminal 里面敲入 rtl_tcp 回车看看结果。

首先,如果你在运行 GQRX,请把它关掉。不仅仅是停止,要整个关掉,把端口空出来。然后在 https://github.com/antirez/dump1090 下载 dump1090 的源码,解压放在桌面好了,可以重命名一下方便在 Terminal 内操作。我把它重命名为了「dump1090」

Terminal window complying the Dump 1090 decoding software

然后在 Terminal 中找到这个目录,编译:

cd ~/Desktop/dump1090

make

如无意外会看到一个 Warning,忽略即可(大哥哥说,编译的时候, Warning 全部都可以不用管 XDDD)。然后:

~/Desktop/dump1090/dump1090

如无意外的话,你已经被各种信息刷屏了,如下图:

Dump 1090 showing tons of decoded message from aircrafts' transponders

键入

~/Desktop/dump1090/dump1090 –help

可以看到这玩意的功能挺多的:

The usage manual of Dump 1090

下面是我用的设置:

–enable-agc 自动增益,提高获取几率
–aggressive 激进模式,也是提高获取几率的东西,具体原理见文档吧
–interactive-ttl 120 把超时调到 120 秒,可以让没了信号的飞机在地图上留久一点
–interactive 让信息显示的方式更优雅,而不是鬼畜地刷屏
–net 启用浏览器界面,可以把飞机显示到 Google Maps 上
–net-http-port 9090 定义网页服务器端口为 9090

Dump 1090 with aircraft infos and Safari browser showing Google Maps with aircraft icons

回车,确认防火墙提示后,就能看到 Terminal 里刷出一些信息了。打开浏览器输入 http://127.0.0.1:9090 则可以在 Google Maps 上直观地看到飞机的位置。点击飞机的图标可以查看详情,其中:Flight 是航班号,Track 是航向,Messages 是接收到的信号条数。最后的 Seen 是指「距离最后一次获取到这架飞机信号的时间」。我们刚才设置了 120s ,也就是如果一架飞机在 120 秒内再也没有信号出现,那么就把它从屏幕上移除。

Alright, 好像没啥了,have fun and play safe. 接收航空频道是没问题的,而发送(占用)是违法的,Don’t do anything stupid.