根据能查到的资料,飞机在飞行过程中,其数据链有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 #/flight.git $ cd flight $ make $ sudo make install
使用效果如下,
可以看到附近有一个ICAO编号为780A0B,航班号为CPA745的飞机,高度是10387 m,速度是918 km/h,朝向232度……
在planefinder.net上验证如下
在Google上查询航班号之后,我们可以获得如下信息。
在flightradar24.com上面,我们甚至还能验证ICAO编号的确是780A0B(就是MODE S那一栏,这里的MODE S就是指ADS-B工作在S模式)
最后,我们可以收集到飞机经过附近时的动态。下图中数据表共13列,分别是
- 捕获到信号时的UNIX时间戳(精确到毫秒)
- ICAO编号
- 应答机模式
- 航班号
- 高度(m 或 feet)
- 速度(km/h 或 knots)
- 朝向
- 应答机号码
- 纬度
- 经度
- 垂直上升/下降率
- 信号强度
- 公制(1) 或 英制(0)
另外也可以看出,当航班离我们比较远时,由于信号较弱,部分列的数据会有缺失。
楼主请问这个代码怎么获得信号强度呢~ 感恩