一、Fundament
- 1.1 概念
ADS-B is short for Automatic Dependent Surveillance–Broadcast.
It is a satellite based survillance system.
Aircraft position, velocity, together with identification are transmitted through Mode-S Extended Squitter (1090 MHz).
ADS-B是Automatic Dependent Surveillance–Broadcast
缩写,中文的意思是“广播式自动相关监视”,也是一种基于卫星的系统,可以自动地从相关机载设备获取参数向其他飞机或地面站广播飞机的位置、高度、速度、航向、识别号等信息,以供管制员对飞机状态进行监控。
- 1.2 原理介绍
ADS-B的主要信息是飞机的4维位置信息(经度、纬度、高度和时间)和其它可能附加信息(冲突告警信息,飞行员输入信息,航迹角,航线拐点等信息)以及飞机的识别信息和类别信息。
ADS-B分为两类:发送(OUT)和接收(IN)。
OUT负责:将信号从飞机发送方经过视距传播发送给地面接收站或者其他飞机。
IN负责:航空器接收其他航空器发送的ADS-B OUT 信息或地面服务设备发送的信息。
ADS-B系统工作主要机载设备有ATC 应答机、MMR接收机、ADIRU计算机、TCAS计算机。
应用如下:
ATC 应答机:ADS-B系统的核心,负责收集和处理有关参数,由ATC天线通过数据链向地面站和其他飞机广播。
MMR接收机:用来根据导航卫星计算精确地飞机位置和速度信息,传送给ATC应答机。
ADIRU计算机:向应答机提供飞机的气压高度等大气数据信息。
TCAS计算机:针对使用ADS-B IN 功能的飞机上,TCAS计算机用于接收1090MHZ扩展电文的数据链,将地面站或者其他OUT的信号显示在驾驶舱内。
- 1.3 数据组成
一个ADS-B数据由5部分组成,总共112比特长(二进制)。(如下图)
每一部分解释如下:
- 1.3.1 【DF】第1-5位解释如下:
每一个ADS-B数据都可以以二进制下的10001
开始(也是就DF
是17)也可以以二进制下的10010
开始(也是就DF
是18)。因为无论是OUT还是IN都是基于数据链系统通信的。
It is worth noting that the ADS-B Extended Squitter sent from a Mode S transponder use Downlink Format 17 ( DF=17 ).
Non-Transponder-Based ADS-B Transmitting Subsystems and TIS-B Transmitting equipment use Downlink Format 18 ( DF=18 )
By using DF=18 instead of DF=17 , an ADS-B/TIS-B Receiving Subsystem will know that the message comes from equipment that cannot be interrogated.
区别:
DF=17时,基于S模式的应答器
DF=18时,基于非应答器的ADS-B传输系统和TIS-B的传输设备。当使用18时,接受系统可以直接知道信息来自于哪个不用进一步确定的设备。
1.3.2 【CA】第6-8位数据,是用于额外的标识符,其能够标识不同种类的ADS-B类型。
1.3.3 【ICAO address】
在每个ASD-B信息中,由发送者决定ICAO address。
每个飞机的S模型应答器都分配有独一无二的ICAO address,因此也能通过其来区分每一架飞机。
可以利用World Aircraft Database
这个查找工具来查询
- 1.3.3 【TC】(【DATA】的首5比特)为了识别数据中包括的是什么信息,我们需要了解
TC
(编码类型)和数据段的信息对应关系,如下图:
- 1.4 校验和
ADS-B采用循环冗余验证来确保收到信息的正确性,也是就112比特中最后的24比特。
下图是具体过程:
具体CRC用python实现,可以参考pyModeS library function: pyModeS.crc()
二、Aircraft Identification
一个认证信息的56比特的数据段可以分为如下图所示:
同时解码是需要用到的对应表如下图:
注意:EC
和TC
同时用来确定飞机的各种信息(重量,高度,大小等等)。当EC
为全零时,此时整个认证信息无效!
举例如下:
具体如何解码可以参照 pyModeS 中的pyModeS.adsb.callsign()
三、Compact Position Reporting
ADS-B中的位置信息,加密时采用CPR格式。它的主旨是尽可能用少的比特来解密更多的坐标。通过全球追踪定位模糊函数、时间和位置信息来确定。
eg:
想象一下,把地球分为16个小方格,每个方格又分为两层,每一层我们用2比特加密。
高层的颜色是00 (yellow), 01 (blue),10 (red), 11 (green). 低层也类似加密。
这样每一方格就可以从0000
到11111
得到四个数字。
现在我们用绿色格子里的1100 -> 1101
描述如图的移动,但是每个位置我们只有三个比特需要加密。
看的出来,高两位没有发生变化,所以我们可以得出以下结论
1.最后两位表示局部位置。
2.两个消息的第一个数字的组合定义了更高的网格。
此时信息可以发送成1 00 -> 1 01
如果从00 -> 01
来看,我们有四种可能如下图,但是由于高两位是1 1
,就能确实是在绿的格子里了。
其实真正的CPR算法更加复杂,但是准则和上面的例子确实非常相似的。
用一条你收到的信息,你可能在世界上计算出很多结果,但是当你收到两条信息时,将两者联合就可以得出最终的结果。
在CPR加密中,世界被分为很多小块(就像上面的例子里的小方格)。
解密过程中,首先我们需要介绍几个参数、函数
NZ:地球中赤道到极点的纬度条数。这里CPR加密时,NZ=15
floor(x):向下取整
mod(x,y)
此时Y不为零
NL(lat): number of longitude zones
返回值得范围是[1,59],计算如下
靠近极点或者赤道的纬线,会返回如下有效值
四、Airborne Positions
奇偶格式的位置信息轮流播放,解密这些信息有两种方法。
1.不知道位置,知道两种奇偶信息。也就是全球精准位置(globally unambiguous position)
2.知道之前的位置,知道一种一种奇偶信息。局部位置(locally unambiguous position)
4.1 (decoding with two messages)
第54比特决定是奇信息还是偶信息。
收到如下两条信息
转成二进制
由于两条信息拥有相同的
ICAO24
地址信息,所以这两条信息可以用来解密位置信息,假设第一条是新收到的。做如下处理
计算纬度指数j,这里j是8
计算纬度
计算经度:
具体计算实现参考如下
https://github.com/junzis/pyModeS/blob/faf4313/pyModeS/adsb.py#L166
计算高度:
第48比特能够确定高度是25 还是 100 加密的。
计算如下:
最后计算结果可能有+-25英尺的误差。
所以最终,飞机的定位是4.2 ((decoding with one message)
五、Airborne Velocity
对于速度有两种不同的信息,取决于信息中的3比特(数据段中的第6-8位)长的信息。
1,2类型中,汇报的是地面速度。([ST=001])
3,4类型中,汇报的是空中速度。([ST=011])
2,4类型适用于超音速的飞机,所以在我们的空中还没有开始商业的超音速飞机之前,我们用不到这两个类型。
在现实世界中,只有少量的3类型的信息。在我们的设定中,我们只接受0.3%的1类型数据。
DF: 17 or 18 , TC: 19
是飞机速度信息的特征参数,至于是 哪种类型的信息,在信息的第38-40比特。
- 5.1 Subtype 1 (Ground Speed)
当地面速度信息(亚音速,地面速度)可用时持续广播。其信息包括速度信息和方向信息。速度和方向都被分分解为南北,东南方向的分量。
eg:
水平速度:
在计算水平速度和方向我们需要以下四个变量
V_ew : East-West Velocity
S_ew : East-West Velocity Sign
V_ns : North-South Velocity
S_ns : North-South VelocitySign
速率:
第69比特的S-vr
决定飞机上行还是下降。
真正的速率是如下计算:
VrSrc 决定是一个测量大气压下的压力高度还是几何高度
- 5.2 Subtype 3 (Airspeed)
当地面速度无法使用时,选择广播3类型信息,此时航空速度是已知的。
注意此时[ST]变成了011!
S_hdg 体现方向数据
Hdg 代表一圈360° 的比例
AS-t 决定是哪一种航天速度(TAS or IAS)
AS 速率就是将[AS]的二进制转换为十进制。本例中
六、 Conclusion
以上是对ADS-B的基本原理、源码如何组成、具体参数是如何计算、以及数据中每部分代表的含义等等。
算是对ADS-B最底层的理解。
如有错误,欢迎指出,请联系我改正。
谢谢~