基于GNU Radio的ADS-B信号收发系统设计
2020-12-08郝敬堂苏志刚
郝敬堂,苏志刚,韩 冰,刘 通
(中国民航大学 中欧航空工程师学院,天津 300300)
0 引 言
广播式自动相关监视(Automatic Dependent Surveillance-Broadcast, ADS-B)是一种基于GNSS和空空、地空数据链通信的航空器及车辆运行监视技术。ADS-B发射机周期性向外广播航空器ICAO地址、三维位置、速度以及意向等信息。ADS-B接收机接收并解码ADS-B报文后,将解码结果传输给空管系统实现对航空器监视。 2019年,中国民航按计划全面启动ADS-B管制运行[1]。然而,ADS-B存在严重电子欺骗干扰[2]以及微弱信号较难检测[3]等问题,为开展相关研究,研发一套低成本、易于功能扩展的ADS-B收发系统具有重大意义。
目前市面上的无线通信、信号处理设备多采用硬件电路完成,集成度较高,成本较大,不具有开放性。针对此问题,国内外众多学者基于软件无线电平台搭建了通用的无线通信及信号处理平台[4-5],开展了GNSS干扰信号分析[6]、室内定位[7]以及无线电频谱数据分析[8-9]等研究。在ADS-B信号处理方面,文献[10]基于AD9363 和 Xilinx Zynq-7000 SOC 搭建软件无线电平台,实现了ADS-B接收机;文献[11-12]利用通用软件无线电外设(Universal Software Radio Peripheral, USRP)实现了ADS-B信号的接收及处理;文献[13]搭建了一个ADS-B收发仿真系统,并重点分析了ADS-B信号的编码及解码方式。上述研究多针对ADS-B信号接收及解码开展研究,且使用的无线电设备较为昂贵。
基于此,本文设计了基于软件无线电的ADS-B信号收发系统,该系统依托GNU Radio,用Python编程实现了ADS-B信号收发过程中信号生成、信号收发以及信号处理等核心模块的编写,进而搭建ADS-B发射机和接收机流图,利用较为廉价的软件无线电外设HackRF实现信号的发射与接收。该系统具有模块化和开放性特点,通过修改模块代码,可以方便实现系统功能的完善与扩展。
1 系统结构及原理
ADS-B系统采用S模式数据链,以1 090 MHz扩展电文的形式进行周期性广播。本文设计的ADS-B信号收发系统包含ADS-B发射机和ADS-B接收机两个子系统,且都由开源的软件无线电开发工具GNU Radio及通用软件无线电硬件平台HackRF组成。系统总体框架如图1所示,ADS-B收发系统中信号生成及处理都在GNU Radio中以软件形式完成,ADS-B信号的发射及接收由GNU Radio控制HackRF实现。所设计系统不仅可以接收自己生成的信号,还可以接收周边航空器发出的真实ADS-B信号。
图1 系统结构框架
1.1 HackRF工作原理
为有效降低系统成本,系统硬件部分使用开源的软件无线电外设HackRF实现,其硬件结构图如图2所示。HackRF的工作频率范围为30 MHz~6 GHz,最大采样频率为22 MHz,采用宽带中频正交采样,主要完成信号收发、混频以及采样等前端处理,采用半双工通信方式[14]。发射和接收过程中的基带数字信号通过USB2.0与电脑或手机进行通信。
图2 HackRF硬件结构图
以发射信号过程为例,系统软件部分生成IQ两路数字基带信号,经USB传输给HackRF微控制器LPC4320,并由CPLD将数据传输给MAX5864完成数模转换,输出的基带模拟信号由MAX2837调制到射频2.3 GHz-2.7 GHz频段,然后利用RFFC5072混频到指定频率,经功率放大后发射出去。
利用开源程序可以初始化HackRF,设置射频增益、低噪声放大器(Low Noise Amplifier, LNA)增益、可变增益放大器(Variable Gain Amplifier, VGA)增益,中心频率以及采样率等参数,完成与HackRF的通信。GNU Radio将与HackRF通信的功能封装为 Osmocom Source/Sink两个模块,除了设置中心频率以及采样率等基本参数外,通过设置射频增益(RF Gain)、中频增益(IF Gain)和基带增益(BB Gain)完成相关增益的设置,相关增益范围及步长如表1所示。
表1 增益范围/步长
如表1所示,射频增益为0或14 dB,用来控制是否开启14 dBm放大器。接收数据时,主要调整HackRF中频(LNA)增益和基带(VGA)增益;发射数据时,主要调整HackRF中频 (VGA)增益。
1.2 GNU Radio工作原理
系统软件部分采用GNU Radio开发,GNU Radio为一款开源的软件无线电平台,内置有信号采集、信号产生、信道、滤波器、调制解调以及显示仪器等模块,并支持用户编制具有特定功能的自定义模块。
根据是否更改模块采样速率,自定义模块分为同步、内插以及抽取3种类型,可以使用GNU Radio内部模块gr_modtool创建模块模板,并利用C++或Python实现模块功能代码的编写。另外,也可以直接在内部模块Python Block中输入Python代码实现特定功能。
如图3所示,GNU Radio以GRC (GNU Radio Companion)流图形式,将单个的模块连接起来,组成信号处理系统,且系统至少包含一个信源和一个信宿。每个模块都是一个数据处理线程,GNU Radio利用其调度机制控制硬件驱动及各模块线程调度,并利用数据零拷贝缓存机制、消息传递机制以及流标签机制实现数据流的传输与有用数据的标记[15]。
图3 GNU Radio流图示例图
如图3中所示,为了实现数据零拷贝缓存,模块0输出端口会绑定一个缓存区,并通过写指针wptr输出数据,下游模块1通过读指针rptr读取数据,保证模块间数据高效传输。除了传输数据流外,模块可以以GNU Radio 专有多态数据类型(polymorphic type,PMT)构建协议数据单元,并将其作为异步消息在相邻模块间传递传递,如图3中虚线所示。另外,对于关键信息,可以通过添加流标签形式进行标记,如图3中,模块0在数据流偏移量为3的位置添加了键名为test的标签。
根据图1所示系统结构框架,ADS-B收发系统中HackRF主要完成数字上下变频、正交采样等前端工作,ADS-B信号生成及处理等核心功能在GNU Radio以自定义模块形式实现,且为数据处理方便,本系统自定义的模块皆为同步类型模块。根据ADS-B系统信号处理流程,分别搭建ADS-B接收机流图和ADS-B发射机流图。为实现与HackRF的通信,ADS-B接收机流图中以Osmocom Source模块为信源,ADS-B发射机流图以Osmocom Sink模块为信宿。
2 系统设计与实现
在进行系统设计之前,需要对ADS-B消息格式进行分析,如图4所示为ADS-B消息格式,采用下行格式(Downlink Format, DF) 17格式,前8 μs为前导脉冲,后112 μs为数据块,采用脉冲位置调制(pulse position modulation, PPM)[16]。
基于GNU Radio模块化和开放性的优势,将ADS-B信号处理及信号生成过程中核心功能封装为自定义GNU Radio模块。对ADS-B信号收发系统中信号生成及处理流程进行细化,绘制系统完整工作流程如图5所示。
图4 ADS-B消息格式
如图5所示,ADS-B发射机在GNU Radio中时序读取历史航迹数据,并按消息类型进行报文编码,然后经PPM调制、添加前导脉冲后生成基带信号。ADS-B接收机在GNU Radio中对HackRF输出的基带正交信号依次进行前导脉冲检测、PPM解调以及报文解码等处理。
图5 收发系统工作流程
下面就ADS-B发射机及ADS-B接收机实现的具体流程及解决的关键难点进行分别描述。
2.1 ADS-B发射机
如图5所示,ADS-B发射机核心功能可以归类为ADS-B报文编码和基带信号生成两个模块,分别自定义GNU Radio 模块为ADS-B Encoder模块和Baseband Signal Generator模块。根据ADS-B发射机工作流程搭建GRC流图如图6所示。
图6 ADS-B发射机GRC流图
发射机系统具体工作流程如下:
1) 利用Message Edit Box 模块输入历史真实航迹文件路径,并将其以消息形式传输给ADS-B Encoder模块。
ADS-B常用消息类型主要包含呼号、空中位置以及空速三类,历史真实航迹文件以明文形式按行存储三类消息,存储内容如表2所示。从表2可以看出,每一类消息都包含消息类型、时间戳以及航空器24比特地址码。呼号类消息包含航空器航班号;空中位置类消息包含经度、纬度以及高度信息;空速类消息包含航空器地速、航向以及爬升率。
表2 历史真实航迹文件内容
图7 ADS-B接收机GRC流图
根据Do-260B文件《1 090 MHz ADS-B最低运行性能标准》规定,呼号消息每4.8~5.2 s更新一次;空中位置及空速消息每0.4~0.6 s更新一次。本系统使用的历史航迹数据是利用专业ADS-B接收机接收得到,各类消息更新速率满足要求。
2) ADS-B Encoder模块逐条读取历史航迹文件,按照S模式DF17报文格式完成报文编码及循环冗余校验(Cyclic Redundancy Check, CRC)码生成,并将生成的112比特报文通过消息传输给Baseband Signal Generator模块。
在进行空中位置报文编码时,经度纬度信息一般用24比特表示,而由于ADS-B信息字长限制,需要采用压缩位置报告(compact position reporting, CPR)进行位置编码。CPR算法将地球表面按照纬度等分为30个高位区,按经度划分为若干低位区。由于从赤道向两极,横截圆面积越来越小,低位区数量与所处纬度有关。航空器在飞行过程中,相邻两条报文高位区编码一般不发生变化。在利用CPR算法编码时,将航空器处于相同高位区的相邻两条位置报文分别定义为奇编码报文和偶编码报文,高位区信息平分到两条报文进行编码。通过此压缩编码方式,经度纬度信息可以通过17比特完成编码。
除了实现位置报文的奇偶编码外,保证各类消息具有正确更新速率也是本系统着重解决的问题之一。假设历史真实航迹文件第n行消息时间戳为tn,n=1,2…。ADS-B Encoder模块设定计时器,得到系统累积运行时间tr。对于第n行消息,若tn-t1≤tr,则将该行对应报文传递出去。
3) Baseband Signal Generator模块在接收到ADS-B报文后,按照图4所示ADS-B消息格式,完成前导脉冲生成及PPM调制,并根据采样率及MAX5864芯片数模转换参数,生成脉冲幅度为127的I/Q两路数字基带信号,并将I/Q两路基带信号以交错形式转换为串行数据流输出。
对于多航班情况,Baseband Signal Generator模块在1秒内会接收到多条ADS-B报文,在生成ADS-B信号时,为了避免两两之间互相干扰,给生成的每条ADS-B信号前添加500 μs的保护间隔,即根据采样率添加对应数量的0。另外,当Baseband Signal Generator模块无ADS-B报文数据输入时,则模块输出数据流全为0。
4) 将Baseband Signal Generator模块输出的数据流通过IChar To Complex模块转换为复信号后,通过Osmocom Sink模块传入HackRF进行上变频,完成信号的发射。
2.2 ADS-B接收机
根据如图5所示工作流程,ADS-B接收机核心功能可以分别自定义为Preamble Detector模块、ADS-B Demodulator模块以及ADS-B Decoder模块。搭建ADS-B接收机GRC流图如图7所示。
接收机系统具体工作流程如下:
1) 通过Osmocom Source模块驱动HackRF,完成I/Q两路数字基带信号的采集,并将两路8比特有符号整数做归一化处理。
如图7所示,Osmocom Source模块主要设置HackRF设备序列号、采样率、中心频率以及表1所示3种增益。所设置增益值应满足表1所示范围及步长,且应根据周边环境,设定合适的大小。例如,若基带增益设置太小,则接收不到ADS-B信号,太大会导致基带噪声过大。
2) 将Osmocom Source模块输出的复信号取模平方后,输入Preamble Detector模块进行前导脉冲检测。前导脉冲检测性能直接影响ADS-B接收机的性能。
在进行前导脉冲检测时,本系统首先通过估计噪声基底来设定阈值,然后根据阈值对采样数据进行判决处理,对判决后的数据进行一阶差分处理,得到上升沿和下降沿位置,在剔除异常值后,可以得到有效脉冲位置序列。遍历序列内有效脉冲,以其上升沿为起始,将其后8 μs数据与标准前导脉冲数据进行匹配,若匹配成功,则判定此有效脉冲处为一个ADS-B信号。为减少运算,对于匹配成功的有效脉冲,其后120 μs内脉冲不参与匹配运算。
GNU Radio每个模块都包含一个数据处理线程,且同步类型模块每个处理周期输出的数据长度为固定值,设其值为N。在进行前导脉冲检测过程中,如图8所示,上一处理周期读取的数据可能包含前导脉冲的局部,为保证此类前导脉冲不被漏检,在当前处理周期,Preamble Detector模块将读指针rptr向回移动M个位置,M为一个标准前导脉冲对应的数据长度。
图8 前导脉冲模块数据读取方式
Preamble Detector模块在检测出信号的数据流位置处添加键名为burst的标签,且应为标签设置正确的位置偏差值。例如,对于图8检测出的第2个前导脉冲,其处于当前周期读取数据的第L位,若Preamble Detector模块已累计运行k个处理周期,则这个前导脉冲在数据流中位置偏差为:
offset=kN+L-M
(1)
3) ADS-B Demodulator模块遍历数据流中标签信息,找到ADS-B消息数据块起止位置,完成PPM解调,得到112比特报文数据,并对每一位数据进行置信度分析,并将报文数据及置信度值通过消息传递给ADS-B Decoder模块。对于某1 μs数据,若前0.5 μs和后0.5 μs信号平均功率分别为P1和P0,则置信度定义为:
(2)
4) ADS-B Decoder模块接收到112比特数据及置信度消息后,首先进行CRC校验,对于CRC校验不通过的报文,将置信度最低的位取反,然后进行二次校验。最后对所有校验通过的报文按照DF17报文格式进行解码,并将解码结果以明文形式通过网络分发出去。
3 实验结果及分析
3.1 信号生成及发射实验
为增加ADS-B信号生成的真实性,以2019年10月28日天津机场周边部分航班数据生成历史航迹文件。ADS-B Encoder模块读取航迹文件,时序生成编码报文,并将其以消息形式传递给下个模块。利用GNU Radio中Message Debug模块打印ADS-B Encoder模块传递的某条消息如下:
(((TargetAddress.7869729)),(141 120 21 33 88 49 149 55 159 73 154 38 48 29))
其中,TargetAddress部分对应航空器地址的十进制形式,如7869729对应地址0x781521,后面括号内141(0x8D)等14个字节对应112比特报文数据,经专业DF17报文解析软件解码,验证了编码的正确性。
在完成前导脉冲生成及PPM调制后,得到基带信号波形如图9所示,为了显示效果,图9仅展示前导脉冲及20 μs左右数据。为验证PPM调制正确性,对数据块前8 μs数据进行手动解调,结果如图9所示,为二进制10001101,即0x8D,与报文实际一致。
图9 ADS-B发射机界面
为了进一步分析ADS-B发射机所发射信号波形,将中心频率设置为150 MHz,生成的信号直接输入示波器,局部观测结果如图10所示。
图10 ADS-B发射机生成信号
从图10可以看出,生成的ADS-B信号格式规范,符合Do-260B标准。本系统ADS-B信号最大发射功率为10 dBm。为了避免对周边环境进行干扰,当中心频率设置为1 090 MHz时,本系统利用同轴电缆加衰减器的形式将ADS-B信号输出到ADS-B接收机。
3.2 信号检测与处理实验
ADS-B接收机利用图7所示GRC流图,依次完成前导脉冲检测、PPM解调及解码等工作。由于Preamble Detector模块为每一个检测到的信号添加了键值为burst的标签,QT GUI Time Sink模块以此标签作为触发条件,着重显示检测到的ADS-B信号波形,具体如图11中Detected Signal所示。
图11 ADS-B接收机界面
ADS-B信号完成PPM解调后,会得到112比特报文数据,且每一位都对应一个置信度值。如图12所示为某条报文部分位的置信度分析结果。
图12 置信度分析
从图12可以看出,若置信度数值为正,则该数据位为1,反之为0,且置信度数值的绝对值越大,置信度越高。
ADS-B发射机发射功率大小可以通过调整中频增益实现,经过测试,ADS-B接收机接收灵敏度为-68 dBm。利用ADS-B发射机发射ADS-B消息共27 131条,当信噪比为16 dB时,经过多次实验,CRC校验成功的报文数目均值为24 181,正确检测率约为89%。
ADS-B Decoder模块将解码结果通过网络分发至指定服务器。服务器将接收到的ADS-B航迹信息实时整理成JSON格式数据,供百度地图访问并显示,如图13为基于百度地图实时显示的部分航班:
图13 ADS-B信息动态显示
经过对比分析,图13中所示航班信息与历史航迹文件中信息一致,进一步验证了收发系统的可行性。
4 结束语
为设计廉价、功能易扩展的ADS-B收发系统,本文将ADS-B信号收发处理过程中信号生成、前导脉冲检测以及报文编解码等核心功能在GNU Radio平台中以自定义模块方式实现,并根据ADS-B信号处理流程搭建信号流图,使用HackRF实现了ADS-B信号的发射与接收。所设计系统不仅方便存储、显示各阶段信号数据,还可以将解码得到的航班信息传送至百度地图中进行动态显示。系统中核心模块具有开放性,利于开展创新性项目研究,例如,通过更新本系统中前导脉冲检测模块算法,可以进一步开展ADS-B微弱信号检测等方面研究。另外,由于本系统具有ADS-B信号发射功能,在开展ADS-B信号防欺骗、信号到达方向估计等研究时,可以以本系统作为特定的ADS-B信号源,具有重要的科研价值。