看,有灰机!——接收应答机ADS-B信号追踪飞机

根据能查到的资料,飞机在飞行过程中,其数据链有ADS-B(广播式自动相关监视,Automatic dependent surveillance – broadcast)ACARS(飞机通信寻址与报告系统,Aircraft Communication Addressing and ReportingSystem)。目前的话,ADS-B是用得比较多的一种。

有了数据链之后,由于数据链只是一种编码方式,我们需要的还有通信方式。通信方式有SSR(二次监视雷达,Secondary Surveillance Radar),VHF(甚高频,Very High Frequency),SATCOM(卫星通信,Satellite Communications)等。ADS-B是工作在SSR平台下的;而ACARS是通过VHF和空管进行双向通信的。如果离开了VHF的覆盖范围,ACARS就会自动切换到SATCOM方式。

工作在SSR平台下的ADS-B的大致流程如下。地面SSR发出询问电脉冲,飞机上的Transponder(二次雷达应答机)收到这个询问脉冲后,向地面SSR发回一组数据,其中包括飞机的飞行高度、速度和飞机SSR代码等信息。飞机上ADS-B发送的频率是1090MHz,只要我们用的芯片能接收这个到频率的信号,我们就可以追踪飞机了。

这次使用的是Realtek的RTL2838U以及Rafael Micro R820T2 tuner(实际上就是某电视棒,根据rtl-sdr网站的介绍,R820T2的接收范围是24 ~ 1766MHz,正好覆盖了ADS-B的频率,而且R820T2也比老版的R820T更灵敏)。

软件方面,需要librtlsdr,而librtlsdr有依赖于libusb,那么就从libusb开始装。libusb是跨平台的一个开源库,安装它应该没有什么问题,librtlsdr也是如此。

OS X下(Linux下也大同小异),从sourceforge上libusb官方源下载最新的libusb源代码,解压,编译。(当然,OS X也可以直接brew install libusb;Linux可以直接apt-get install libusb-dev)

$ cd libusb*
$ ./configure
$ make
$ sudo make install

然后是librtlsdr,安装教程参考UCB的一节EECS课,EE123: Digital Signal Processing (https://inst.eecs.berkeley.edu/~ee123/fa12/rtl_sdr.html),上面有OS X,Windows及Linux系统下librtlsdr的详细安装过程。

有了libusb和librtlsdr之后,就可以开始接收数据了~这里我在MalcolmRobb/dump1090的基础上,加了输出到sqlite数据库的功能,方便其他程序读取分析,而不用再依赖rtlsdr或者是这个程序本身。

$ git clone https://github.com/BlueCocoa/flight.git
$ cd flight
$ make
$ sudo make install

使用效果如下,

flight --sqlite flight -enable-agc --metric --interactive
flight --sqlite flight -enable-agc --metric --interactive

可以看到附近有一个ICAO编号为780A0B,航班号为CPA745的飞机,高度是10387 m,速度是918 km/h,朝向232度……

在planefinder.net上验证如下

planefinder.net上的数据
planefinder.net上的数据

在Google上查询航班号之后,我们可以获得如下信息。

在Google上查询flight number
在Google上查询flight number

在flightradar24.com上面,我们甚至还能验证ICAO编号的确是780A0B(就是MODE S那一栏,这里的MODE S就是指ADS-B工作在S模式)

ICAO编号
ICAO编号

最后,我们可以收集到飞机经过附近时的动态。下图中数据表共13列,分别是

  • 捕获到信号时的UNIX时间戳(精确到毫秒)
  • ICAO编号
  • 应答机模式
  • 航班号
  • 高度(m 或 feet)
  • 速度(km/h 或 knots)
  • 朝向
  • 应答机号码
  • 纬度
  • 经度
  • 垂直上升/下降率
  • 信号强度
  • 公制(1) 或 英制(0)
ADS-B信息
ADS-B信息

另外也可以看出,当航班离我们比较远时,由于信号较弱,部分列的数据会有缺失。

声明: 本文为0xBBC原创, 转载注明出处喵~

发表评论

电子邮件地址不会被公开。 必填项已用*标注