为了进行ADS-B报文防欺骗技术研究,首先需要深入了解报文的编译码方法:译码的实现可以深度挖掘报文中的特征参数,进行防欺骗研究;编码的实现可以为后续仿真实验产生符合要求的报文打下基础。
空中位置消息ME字段的编译算法与仿真
ADS-B报文格式
各字段含义
bits | No. bits | 缩写 | 含义 |
---|---|---|---|
1-5 | 5 | DF | 下行链路格式 |
5-8 | 3 | CA | 应答器能力 |
9-32 | 24 | ICAO | ICAO 飞机地址 |
33-88 | 56 | ME | 消息等 |
89-112 | 24 | PI | 奇偶校验/询问器标识 |
其中空中位置类 的ME字段中各字段含义
bits | 含义 | bits | 含义 |
---|---|---|---|
1-5 | Type | 21 | 时间指示 |
6-7 | 监视状态 | 22 | CPR编码格式 |
8 | 是否单天线 | 23-39 | 纬度 |
9-20 | 高度 | 40-56 | 经度 |
报文生成的算法
对于空中位置信息的ME字段,需要编码的信息主要包括了经纬度信息、位置导航不确定类型(NUCp)信息以及高度信息。
- 经纬度信息编码
其中,对于采用了CPR格式编码的位置信息,具体算法流程如下:
1)确定纬度Zone 的尺寸 D l a t i Dlat_i Dlati
D l a t i = 36 0 。 4 N Z − i Dlat_i = \frac{360^。}{4 NZ - i} Dlati=4NZ−i360。
2)将需要发送的纬度值转换为CPR格式的纬度值 Y Z i YZ_i YZi
Y Z i = f l o o r [ 2 N b M O D ( l a t , D l a t i ) D l a t i + 1 2 ] YZ_i =floor[2^{Nb}\frac{MOD(lat,Dlat_i)}{Dlat_i} + \frac{1}{2}] YZi=floor[2NbDlatiMOD(lat,Dlati)+21]
3)使用CPR格式纬度值 Y Z i YZ_i YZi和纬度Zone尺寸 D l a t i Dlat_i Dlati计算得到纬度还原值 R l a t i Rlat_i Rlati
R l a t i = D l a t i × ( Y Z i 2 N b + f l o o r ( l a t D l a t i ) ) Rlat_i =Dlat_i \times (\frac{YZ_i}{2^{Nb}}+floor(\frac{lat}{Dlat_i})) Rlati=Dlati×(2NbYZi+floor(Dlatilat))
4)通过纬度还原值 R l a t i Rlat_i Rlati计算经度Zone 的数量 N L NL NL
N L ( R l a t i ) = f l o o r ( 2 π [ a r c c o s ( 1 − 1 − c o s ( 2 π 2 N Z ) c o s 2 ( π 18 0 。 ∣ R l a t i ∣ ) ) ] − 1 ) NL(Rlat_i) = floor(2 \pi [arccos(1-\frac{1-cos(\frac{2 \pi}{2 NZ})}{cos^2(\frac{\pi}{180^。}|Rlat_i|)})]^{-1}) NL(Rlati)=floor(2π[arccos(1−cos2(180。π∣Rlati∣)1−cos(2NZ2π))]−1)
5)计算东西向经度Zone的尺寸 D l o n i Dlon_i Dloni
D l o n i = { 36 0 。 N L ( R l a t i ) − i , N L ( R l a t i ) − i > 0 36 0 。 , N L ( R l a t i ) − i = 0 Dlon_i = \begin{equation} \left\{ \begin{array}{lr} \frac{360^。}{NL(Rlat_i)-i}, NL(Rlat_i)-i > 0& \\ 360^。,NL(Rlat_i)-i = 0 \end{array} \right. \end{equation} Dloni={NL(Rlati)−i360。,NL(Rlati)−i>0360。,NL(Rlati)−i=0
6)将经纬度转化为CPR经度值 X Z i XZ_i XZi
X Z i = f l o o r [ 2 N b M O D ( l o n , D l o n i ) D l o n i + 1 2 ] XZ_i =floor[2^{Nb}\frac{MOD(lon,Dlon_i)}{Dlon_i} + \frac{1}{2}] XZi=floor[2NbDloniMOD(lon,Dloni)+21]
7)将计算得到的CPR经度值 X Z i XZ_i XZi和CPR纬度值 Y Z i YZ_i YZi转为为2进制。填入至ME字段中对应的位置。
在空中位置信息的编码过程中, N b Nb Nb与 N Z NZ NZ均为固定值,其中 N b = 17 Nb = 17 Nb=17, N Z = 15 NZ=15 NZ=15。 - NUCp信息编码
Type | NUCp | 对应参数 | Type | NUCp | 对应参数 |
---|---|---|---|---|---|
0 | 0 | - | 11 | 7 | HPL < 0.1nm或HFOM<0.05nm |
9 | 9 | HPL < 7.5m或HFOM<3m | 12 | 6 | HPL < 0.05nm或HFOM<0.1nm |
10 | 8 | HPL < 25m或HFOM<10m | 13 | 5 | HPL < 0.5nm或HFOM<0.25nm |
- 高度信息编码
高度信息处于ME字段的9-20比特位,其中,高度单位指示比特Q位于ME字段的第16位,当 Q = 0 Q=0 Q=0,编码单位为100英尺,将高度信息除以100,再转化为2进制,填入对应位置;当 Q = 1 Q=1 Q=1时,编码单位为25英尺,方法类似。
报文生成的仿真
为了进行后续虚假报文排除的仿真实验,仿真报文中所包含的位置信息以及高度信息等需要贴近真实报文,确保虚假报文不能被轻易识别,以达到最大的混淆程度。所以,在报文仿真时,可以利用一条接收到的真实报文,在不改变诸如监视状态、天线状况,甚至飞行高度等信息的前提下,将经纬度、NUCp信息重新写入。由于空中位置信息需要时间才能做到定位,为了处理方便简洁,在仿真实验中,将时间信息直接添加在报文前端。
基于上述描述,利用MATLAB编写程序,并制作报文产生界面。
在编辑框内输入产生报文需要的参数,如下图所示
点击<产生报文>,在MATLAB工作目录下,生成adsbMsgs.txt报文文件。且在界面上显示报文信息,和对应的NUCp值
报文解析的算法
与编码情况类似,对于空中位置信息的ME字段,需要解码的信息包括经纬度信息,NUCp信息以及高度信息。
- 经纬度信息解码
由于经纬度采用的CPR格式编码,所以,需要接收到一组空中位置信息报文,才能进行解码。具体解码算法如下:
1)提取报文中的经纬度信息,并转化为10进制,分别得到经纬度信息 X Z i XZ_i XZi与 Y Z i YZ_i YZi,其中 i i i等于0或1分别代表了偶编码和奇编码。
2)分别计算 i i i取值为0和1时的南北向纬度区域大小 D l a t i Dlat_i Dlati。
D l a t i = 36 0 。 4 N Z − i Dlat_i = \frac{360^。}{4 NZ - i} Dlati=4NZ−i360。
3)计算纬度索引符号 J J J。
J = f l o o r ( 59 Y Z 0 − 60 Y Z 1 2 N b + 1 2 ) J = floor(\frac{59 YZ_0 - 60YZ_1}{2^{Nb}}+\frac{1}{2}) J=floor(2Nb59YZ0−60YZ1+21)
4)计算纬度解码值 R l a t i Rlat_i Rlati
R l a t i = D l a t i ( Y Z i 2 N b + M O D ( J , 60 − i ) ) Rlat_i = Dlat_i(\frac{YZ_i}{2^{Nb}}+MOD(J,60-i)) Rlati=Dlati(2NbYZi+MOD(J,60−i))
5)判断 R l a t 0 Rlat_0 Rlat0与 R l a t 1 Rlat_1 Rlat1是否相等,如果两值不等,那么意味着ADS-B信息广播过程中发生了区域横跨,需要等待一段时间,直到接收到两值相等的报文;如果相等,则可以按照接收到的第二条报文格式的奇偶情况来决定下一步的计算,即偶格式 i = 0 i = 0 i=0,奇格式 i = 1 i=1 i=1。
6)计算东西向经度区域大小 D l o n i Dlon_i Dloni。
N i = m a x ( 1 , N L ( R l a t i ) − i ) N L ( l a t ) = f l o o r ( 2 π [ a r c c o s ( 1 − 1 − c o s ( 2 π 2 N Z ) c o s 2 ( π 18 0 。 ∣ l a t ∣ ) ) ] − 1 ) D l o n i = 36 0 。 N i N_i = max(1,NL(Rlat_i)-i)\\ NL(lat) = floor(2 \pi [arccos(1-\frac{1-cos(\frac{2 \pi}{2 NZ})}{cos^2(\frac{\pi}{180^。}|lat|)})]^{-1})\\ Dlon_i = \frac{360^。}{N_i} Ni=max(1,NL(Rlati)−i)NL(lat)=floor(2π[arccos(1−cos2(180。π∣lat∣)1−cos(2NZ2π))]−1)Dloni=Ni360。
7)计算纬度索引符号m
m = f l o o r ( X Z 0 ( N L ( R l a t i ) − 1 ) − X Z 1 N L ( R l a t i ) 2 N b + 1 2 ) m = floor(\frac{XZ_0(NL(Rlat_i)-1)-XZ_1NL(Rlat_i)}{2^{Nb}}+\frac{1}{2}) m=floor(2NbXZ0(NL(Rlati)−1)−XZ1NL(Rlati)+21)
8)计算纬度解码值
R l o n i = D l o n i ( X Z i 2 N b + M O D ( m , N i ) ) Rlon_i = Dlon_i(\frac{XZ_i}{2^{Nb}}+MOD(m,N_i)) Rloni=Dloni(2NbXZi+MOD(m,Ni))
由此, R l a t i Rlat_i Rlati与 R l o n i Rlon_i Rloni即为经纬度。 - NUCp信息提取
直接提取Type值,转化为10进制,对比上表即可求得NUCp。 - 高度信息的解码
解算高度信息及其单位指示比特Q,将余下信息转为10进制数n,当Q为1时,
a l t = f l o o r ( 25 n − 1000 ) / 3.28084 alt = floor(25n-1000)/3.28084 alt=floor(25n−1000)/3.28084
当Q为0时,
a l t = f l o o r ( 100 n − 1000 ) / 3.28084 alt = floor(100n-1000)/3.28084 alt=floor(100n−1000)/3.28084
报文解析的仿真
点击<打开>,选择需解码的ADS-B报文文件,点击<解码>。
CAT021格式的ADS-B报文编译码算法及仿真
由于CAT021格式的ADS-B报文属于经过处理的报文,编译码算法比空中位置消息较为简单。仅对其中的日时间数据项、位置数据项、高度数据项以及品质因素数据项的位置导航不确定类型数据项进行编译码。
CAT021格式报文产生
在编辑框内输入参数,点击<产生报文>按钮。
产生批量的报文数据 cat021Msgs.txt,且在界面显示出信息。
CAT021格式报文解码
点击<打开>选择需要解码的CAT021报文文件,点击<解码>。
在matlab命令行窗口显示解码信息,
且在界面显示解码信息
文章来源:https://www.toymoban.com/news/detail-484597.html
MATLAB源码
具体代码实现参考 ads-b报文编译码仿真实现文章来源地址https://www.toymoban.com/news/detail-484597.html
到了这里,关于ADS-B消息的算法及仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!