ADS-B消息的算法及仿真

为了进行ADS-B报文防欺骗技术研究,首先需要深入了解报文的编译码方法:译码的实现可以深度挖掘报文中的特征参数,进行防欺骗研究;编码的实现可以为后续仿真实验产生符合要求的报文打下基础。

空中位置消息ME字段的编译算法与仿真

ADS-B报文格式

ADS-B报文格式
各字段含义

bitsNo. bits缩写含义
1-55DF下行链路格式
5-83CA应答器能力
9-3224ICAOICAO 飞机地址
33-8856ME消息等
89-11224PI奇偶校验/询问器标识

其中空中位置类 的ME字段中各字段含义

bits含义bits含义
1-5Type21时间指示
6-7监视状态22CPR编码格式
8是否单天线23-39纬度
9-20高度40-56经度

报文生成的算法

对于空中位置信息的ME字段,需要编码的信息主要包括了经纬度信息、位置导航不确定类型(NUCp)信息以及高度信息。

  1. 经纬度信息编码
    其中,对于采用了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=4NZi360
    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(1cos2(180πRlati)1cos(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
  2. NUCp信息编码
TypeNUCp对应参数TypeNUCp对应参数
00-117HPL < 0.1nm或HFOM<0.05nm
99HPL < 7.5m或HFOM<3m126HPL < 0.05nm或HFOM<0.1nm
108HPL < 25m或HFOM<10m135HPL < 0.5nm或HFOM<0.25nm
  1. 高度信息编码
    高度信息处于ME字段的9-20比特位,其中,高度单位指示比特Q位于ME字段的第16位,当 Q = 0 Q=0 Q=0,编码单位为100英尺,将高度信息除以100,再转化为2进制,填入对应位置;当 Q = 1 Q=1 Q=1时,编码单位为25英尺,方法类似。

报文生成的仿真

为了进行后续虚假报文排除的仿真实验,仿真报文中所包含的位置信息以及高度信息等需要贴近真实报文,确保虚假报文不能被轻易识别,以达到最大的混淆程度。所以,在报文仿真时,可以利用一条接收到的真实报文,在不改变诸如监视状态、天线状况,甚至飞行高度等信息的前提下,将经纬度、NUCp信息重新写入。由于空中位置信息需要时间才能做到定位,为了处理方便简洁,在仿真实验中,将时间信息直接添加在报文前端。
基于上述描述,利用MATLAB编写程序,并制作报文产生界面。
ADS-B报文产生界面
在编辑框内输入产生报文需要的参数,如下图所示
填入参数

点击<产生报文>,在MATLAB工作目录下,生成adsbMsgs.txt报文文件。且在界面上显示报文信息,和对应的NUCp值
界面结果

报文解析的算法

与编码情况类似,对于空中位置信息的ME字段,需要解码的信息包括经纬度信息,NUCp信息以及高度信息。

  1. 经纬度信息解码
    由于经纬度采用的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=4NZi360
    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(2Nb59YZ060YZ1+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,60i))
    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(1cos2(180πlat)1cos(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即为经纬度。
  2. NUCp信息提取
    直接提取Type值,转化为10进制,对比上表即可求得NUCp。
  3. 高度信息的解码
    解算高度信息及其单位指示比特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(25n1000)/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(100n1000)/3.28084

报文解析的仿真

点击<打开>,选择需解码的ADS-B报文文件,点击<解码>。
ADS-B报文解码界面

CAT021格式的ADS-B报文编译码算法及仿真

由于CAT021格式的ADS-B报文属于经过处理的报文,编译码算法比空中位置消息较为简单。仅对其中的日时间数据项、位置数据项、高度数据项以及品质因素数据项的位置导航不确定类型数据项进行编译码。

CAT021格式报文产生

在编辑框内输入参数,点击<产生报文>按钮。
产生批量的报文数据 cat021Msgs.txt,且在界面显示出信息。
cat021报文产生界面

CAT021格式报文解码

点击<打开>选择需要解码的CAT021报文文件,点击<解码>。
在matlab命令行窗口显示解码信息,

命令行解码信息
且在界面显示解码信息
解码界面

MATLAB源码

具体代码实现参考 ads-b报文编译码仿真实现

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74043383

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值