相关文章推荐
健身的水煮鱼  ·  springboot logback ...·  1 年前    · 
一身肌肉的大葱  ·  Saving files to ...·  2 年前    · 
没有腹肌的长颈鹿  ·  javascript - Vue ...·  2 年前    · 

gnuradio |民航ADS-B信号仿真分析

概述

ADS-B,全称是广播式自动相关监视(Automatic Dependent Surveillance -Broadcast),即无需人工操作或者询问应答,自动地从相关机载设备获取飞行器(如民航飞机)的位置、高度、速度、航向、识别号等信息参数,向其他飞机或地面站进行广播,以供管制员对飞机状态进行监控。它衍生于ADS(自动相关监视),初期目的是在无法进行雷达监视的情况下,希望利用卫星对飞行器实施监视。

ADS-B 系统以广播形式向外实时发送飞机的动态飞行状态,如航迹、速度、经纬度等,并且将飞机的唯一识别信息(ICAO 编码)发送出去,来表明该飞机的身份。

报文分析

根据信息的传递方向,ADS-B系统又分为OUT(发送)和IN(接收)两个子系统。ADS-B IN系统主要接收来自ADS-B OUT系统广播出的报文信息,并将接收到的数据进行解码,将其显示在上位机上,为机组提供运行支持和情境意识,如冲突告警信息、避碰策略、气象信息。

ADS-B OUT系统可以简单地理解为ADS-B发射机,一般为飞行器通过机载ADS-B OUT设备向地面及周边飞行器广播自身的经纬度坐标、飞行速度、高度、目标地址、ICAO编号等基本信息,也可以是地面基站向空中飞行器广播区域内的气象报文、情报报文等信息;ADS-B OUT设备发射频率为 1090MHz 的广播信号,信息格式是标准的ADS-B报文信号,经过视距传播发送给地面基站或者其它飞机。

ADS-B的OUT和IN功能都是基于数据链通信技术,目前应用最广泛的是国际民航组织推荐的1090MHz S模式扩展电文数据链(1090ES【Extended Squitter】,最大下行数据长度达到112位,最大数据率达到1兆比特/秒)。典型的报文格式(由飞机发射的空中位置报文)如下所示:

各比特组对应含义为:

比特数 字段含义 数据含义
5bit 下行数据链格式 10001,表示用于S模式应答机发射的ADS-B消息
3bit 应答机能力 101,至少有通信A与通信B能力,且飞机位置在空中
24bit ICAO 飞机身份标识
5bit 其后数据类型 01011,表示空中位置消息
3bit 其后数据类型
12bit 高度
1bit 时间是否与UTC同步 0表示 没有同步
1bit 后面CPR位置信息是奇数秒还是偶数秒
17bit 经度信息
24bit CRC校验信息
24bit CRC校验信息

调制方式

较为简单,将0、1脉冲直接调制在载波上。在 1\mu s 的时间内,脉冲出现在后半部分的表示0,出现在前半部分的表示1,也可以用01表示0,10表示1。完整的ADS-B消息长度是120 \mu s ,包括前导脉冲和数据脉冲两部分,采用PPM脉冲位置调制。前导脉冲长度8 \mu s ,作用是为后面的数据块解码提供信号到达时间和脉冲参考电平等参数。数据脉冲长度112 \mu s

仿真分析

接收ADS-B标准(真实)信号的开源项目有很多,采用的项目来源为

在gnuradio环境下编译安装即可。相应流图为:

ADS-B接收机各模块构成

仿真信号,可先成报文数据,再用USRP发射出去。生成报文主要包括CPR编码、CRC编码、脉冲调制以及插入前导序列成帧(民航信号仿真比较敏感,暂不说明具体细节)。然后,用相应接收机显示结果:

接收信号示例

能解码消息,说明信号仿真成功。(PS:对于业余无线电爱好者而言,注意,进行仿真试验不要影响民航秩序。)

=================================

2021.04.08更新

发现了一个python库,关于解调ADS-B报文的,可以检验编码消息帧格式是否正确,感兴趣的可以看看。最好用python3的环境,我在python2.7下使用报错。

PyModeS is a Python library designed to decode Mode-S (including ADS-B) message. It can be imported to your python project or used as a standalone tool to view and save live traffic data.

编辑于 2021-04-08 20:16

文章被以下专栏收录