基于gr-adsb解调和解码ADS-B
|ADS-B介绍
自动相关监视-广播(ADS-B)是一种监视技术,飞行器通过卫星导航确定自身位置,并周期性地广播这些信息,使其能够被跟踪。此类信息可被空中交通管制的地面站接收,作为二次雷达的替代方案;也可以被其他飞行器接收,以提升态势感知,实现自主间隔保持。
ADS-B 被称为“自动”,是因为它不需要飞行员或外部输入;被称为“相关”,是因为它依赖于飞行器自身导航系统提供的数据。
|gr-adsb
这是一个 GNU Radio 的扩展模块(Out-of-Tree, OOT),用于解调和解码自动相关监视广播(ADS-B)消息。若要克隆与 GNU Radio 3.10 兼容的 gr-adsb
版本,请运行以下命令:
$ git clone -b maint-3.10 https://github.com/mhostetter/gr-adsb
|功能
支持多种SDR设备(通过 GNU Radio 和 OsmoSDR 兼容):
- USRP、RTL-SDR、HackRF、BladeRF 等

支持多种采样率(2Msps、4Msps、6Msps等)
注意:采样率必须是 2 × 符号率(2Msym/s)的整数倍。
支持的消息格式解码:
- DF 0:短程空对空监视(ACAS)
- DF 4:应答机高度回应
- DF 5:应答机识别回应
- DF 11:全呼回应
- DF 16:长程空对空监视
- DF 17:ADS-B 扩展广播
- DF 18:非Mode S应答机的ADS-B扩展广播(CF=0,1,6)
- DF 19:军用ADS-B扩展广播(AF=0)
- DF 20 / DF 21:Comm-B通道回应(高度/识别)
简洁:每架飞机简要数据输出
详细:完整的ADS-B帧解析信息
|用法
- GNU Radio
输入以下指令打开 GNU Radio Companion,然后在目录:gr-adsb/examples/adsb_rx.grc 找到.grc文件并打开。
gnuradio-companion

简洁输出:
Time ICAO Callsign Alt Climb Speed Hdng Latitude Longitude Msgs ft ft/m kt deg deg deg 00:55:55 a03816 12425 2112 316 -7 39.0346566 -76.8112793 10 00:55:55 aa7df3 SWA398 1950 -128 167 11 39.1743622 -76.8109131 28 00:55:55 abb19c SWA513 16050 2112 386 -148 39.1567166 -77.2299194 28 80:55:55 a4fbb4 AWI4868 17125 1152 361 -23 38.9627838 -76.7352627 66 00:55:55 a8ab3c 36975 -3008 472 48 4 30:55:55 a34729 DAL1299 13100 3968 338 169 39.2229767 -77.1123206 70 10:55:55 a9b088 AAL9616 9000 -768 276 -133 39.0424347 -76.8132417 28 30:55:55 a24031 9925 -64 288 -63 39.2082964 -76.6861572 25 00:55:55 a01f73 12975 2240 339 -47 39.0163879 -76.8472754 38
详细输出:
[INFO] ---------------------------------------------------------------------- [INFO] Datetime: 2019-07-31 00:43:30.944816 UTC [INFO] SNR: 19.90 dB [INFO] Downlink Format (DF): 0 Short Air-Air Surveillance (ACAS) [INFO] CRC: Passed Recognized AA from AP [INFO] Address Announced (AA): ac53a4 [INFO] Callsign: EDV5271 [INFO] Vertical Status (VS): 0 In Air [INFO] Reply Information (RI): 3 Reserved for ACAS [INFO] Altitude: 7025 ft [INFO] Crosslink Capability (CC): Does Support Crosslink Capability [INFO] ---------------------------------------------------------------------- [INFO] Datetime: 2019-07-31 00:43:32.114965 UTC [INFO] SNR: 21.85 dB [INFO] Downlink Format (DF): 4 Surveillance Altitude Reply [INFO] CRC: Passed Recognized AA from AP [INFO] Address Announced (AA): ac53a4 [INFO] Callsign: EDV5271 [INFO] Flight Status (FS): 0 No Alert, No SPI, In Air [INFO] Downlink Request (DR): 0 No Downlink Request [INFO] IIS: 0 [INFO] IDS: 0 No Information [INFO] Altitude: 7075 ft [INFO] ---------------------------------------------------------------------- [INFO] Datetime: 2019-07-31 00:43:36.695273 UTC [INFO] SNR: 22.41 dB [INFO] Downlink Format (DF): 11 All-Call Reply [INFO] CRC: Passed [INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air [INFO] Address Announced (AA): ac53a4 [INFO] Callsign: EDV5271 [INFO] ---------------------------------------------------------------------- [INFO] Datetime: 2019-07-31 00:43:37.784807 UTC [INFO] SNR: 21.87 dB [INFO] Downlink Format (DF): 17 Extended Squitter [INFO] CRC: Passed [INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air [INFO] Address Announced (AA): ac53a4 [INFO] Callsign: EDV5271 [INFO] Type Code (TC): 19 Airborne Velocity [INFO] Subtype (ST): 1 Ground Velocity [INFO] Intent Change (IC): 1 No Change in Intent [INFO] Speed: 267 kt [INFO] Heading: 173 deg (W) [INFO] Climb: 2816 ft/min [INFO] Climb Source: 0 Geometric Source (GNSS or INS) [INFO] ---------------------------------------------------------------------- [INFO] Datetime: 2019-07-31 00:43:40.305197 UTC [INFO] SNR: 24.35 dB [INFO] Downlink Format (DF): 17 Extended Squitter [INFO] CRC: Passed [INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air [INFO] Address Announced (AA): ac53a4 [INFO] Callsign: EDV5271 [INFO] Type Code (TC): 11 Airborne Position [INFO] Surveillance Status (SS): 0 No Condition Information [INFO] Time: 0 Not Synced to 0.2s UTC Epoch [INFO] Latitude: 39.20978610798464 N [INFO] Longitude: -76.8250732421875 E [INFO] Altitude: 7450 ft
- Webserver(Web服务器)
为了在 Google 地图中实时查看解码后的飞机和飞行轨迹,gr-adsb
提供了一个内置的 Web 服务器。该 Web 服务器可以在运行 GRC 流程图之前或之后启动,但要查看 Google 地图网页,Web 服务器必须处于运行状态。
当使用 Web 显示功能时,示例流程图中的 ZeroMQ 模块 是必须的。在运行 Web 服务器之前,请确保已安装其所需的依赖项。
- 打开终端
$ cd gr-adsb/
$ cd web/
$ ./webserver.py
or$ python3 webserver.py
- 打开网页浏览器
- 访问:
localhost:5000

- SQLite 回放功能(可选)
用户可以选择将解调后的bursts数据记录到 SQLite 数据库中,以便存储或之后回放。此功能依赖于作者的另一个项目 gr-sqlite。请按照相关说明安装 gr-sqlite
。
若要回放这些已解调的bursts数据,可运行 adsb_playback.grc
流程图。
若要进行记录,请在 adsb_rx.grc
流程图中启用 SQLite Sink 模块。

|安装
GNU Radio 是 gr-adsb
的依赖项。我们建议使用 PyBOMBS 进行安装。
PyBOMBS 是 GNU Radio 官方推荐的包管理工具,能够自动处理依赖关系并简化安装过程。通过 PyBOMBS,你可以快速搭建一个包含 GNU Radio 和相关模块(如 gr-adsb)的开发环境。
|源文件编译
手动从源码构建 gr-adsb
可按照以下步骤进行。在构建 gr-adsb
之前,需确保系统中安装了以下 Python 依赖项:
$ pip3 install --user colorama
编译:
$ cd gr-adsb/
$ mkdir build
$ cd build/
$ cmake ../ # or cmake -DCMAKE_INSTALL_PREFIX=<path_to_install> ../
$ make
$ sudo make install
$ sudo ldconfig
Web服务依赖项:
如果使用内置的 Google Maps Web服务器 来实时查看飞机轨迹,则需要先安装以下 Python 包:
$ pip3 install --user zmq
$ pip3 install --user flask
$ pip3 install --user flask-socketio
$ pip3 install --user gevent
$ pip3 install --user gevent-websocket
Refernence: