自动相关监视广播波形 能被检测和解码的无线信号无处不在。利用当今的软件定义无线电(SDR)硬件,像ADI公司的集成RF捷变收发器AD9361/AD9364等,很容易接入这些信号。商业航空器的自动相关监视广播(ADS-B)传输提供了一个现成的无线信号,利用它可演示基于AD9361和Xilinx Zynq-7000 All Programmable SoC的快速原型开发流程。 商业航空器利用ADS-B发射机向空中交通管制员报告其位置、速度、高度和航空器ID。国际民用航空组织(ICAO) S模式超长电文规范定义了飞行数据格式。ADS-B正在向全世界推广,以便构建现代化空中交通管制和避碰系统。 它已被欧洲采用,美国正在逐渐引入。 S模式超长电文标准详细规定了RF传输格式和编码数据字段。 应答器传输具有如下特性: ·发射频率: 1090 MHz ·调制: 脉冲位置调制(PPM) ·数据速率: 1 Mbps ·消息长度: 56 μs或112 μs ·24位CRC校验和 调谐频率和带宽完全在AD9361 RF收发器的能力范围之内,收到的I/Q样本可利用多种软件或嵌入式平台选项进行检测和解码。 本文将讨论如何利用一个基于AD9361的接收机平台来捕捉这些S模式信号,然后利用MATLAB和Simulink开发一个能够解码消息的算法。 该算法的最终目标是将该解决方案部署到Zynq SoC平台上,例如Avnet PicoZed SDR系统化模块(SOM)。 接收机设计挑战 S模式消息有短(56 μs)和长(112 μs)两种。 短消息包含消息类型、航空器识别号和循环冗余校验(CRC)和。 长消息则还包含高度、位置、速度和飞行状态信息。 无论何种情况,S模式传输均从一个8 μs前同步码开始。 接收机通过此前同步码确定一条有效消息正在传输,此前同步码还能帮助接收机确定消息位从何时开始。 详情参见图1。
S模式波形相当简单,但要成功接收并解码消息,仍有若干挑战需要解决。 1.接收环境通常是长时间空闲中穿插着非常短的消息;如果发射信号的航空器距离接收机很远,收到的信号可能非常弱。 传统波形也会以1090 MHz的频率发射。 接收机需要利用前同步码在拥堵的频段中识别高和低两个幅度的S模式传输。 2.在1 μs位间隔内,各位的可能模式有两种。 前? μs为ON且后? μs为OFF,表示逻辑1。 前0.5 μs为OFF且后0.5μs为ON,表示逻辑0。 位判定的依据是基于时间的模式,因此,接收机需要利用前同步码准确找出消息位开始的I/Q样本。 3.S模式消息由88个信息位和24个校验和位组成。 接收机需要能够在正确的时间清除寄存器、作出位判定、计算校验和并读取校验和寄存器。 为使接收机正确工作,必须对时序进行控制。 4.对于嵌入式设计,解码过程必须逐个样本进行。 存储大量数据再进行批处理的接收机设计,对嵌入式系统来说是不现实的。 AD9361等强大的RF前端与MATLAB之类的科技计算语言相结合,可大大简化与此类传输的检测和解码相关的问题。 MATLAB和信号处理工具箱中的函数可用来识别同步模式,计算噪底,作出位判定,以及计算校验和。 MATLAB中的条件和执行控制函数可简化控制逻辑。 利用AD9361 SDR平台很容易访问测试数据,无论是从二进制或文本文件读取,还是以流形式直接输入MATLAB。 最后,MATLAB是解释性语言,因而很容易与数据进行交互,尝试不同的方法,以交互方式开发解决方案。 在MATLAB中建模并验证S模式接收机算法 对下述内容和MATLAB源代码感兴趣的读者,可在Analog Devices GitHub库中找到相关文件。 入门级函数为ad9361_ModeS.m,同时提供了此函数调用的文件。 设计接收机算法的第一步是访问一些源数据。 许多航空器现在都配备了S模式应答器,因而只需将接收机调谐到1090 MHz的广播频率便可捕获本地传输。 在我们的例子中,可以使用Zynq SDR快速原型开发平台。 ADI公司提供了一个MATLAB系统对象,它能通过以太网从FMCOMMS平台接收数据。该系统对象允许用户选择调谐频率和采样速率,利用无线电硬件收集接收样本,以及将接收样本作为MATLAB变量直接送入MATLAB工作空间。 所需代码非常少,几行代码便可设置MATLAB系统对象,再用几行代码设置FMCOMMS3,还有几行代码用来捕获I/Q样本并将其写入一个MATLAB变量。 代码示例如图2、图3和图4所示。
我们使用了一些基于这些命令的代码,以12.5 MHz的采样速率捕获数个数据集。 选择12.5 MHz速率是为了提供足够的样本来使前同步码与第一个消息位精密对齐,并通过求均值方法消除用来作出位判定的样本中的噪声。 捕捉一百万样本的结果如图5所示。
在这个较短的数据集中,有14个信号从噪底中凸显出来。 在这14个信号中,有两个是S模式消息。 其余是传统或杂散信号,应予以抛弃。 放大样本号604000附近的区域,可看到其中一个有效消息(图6)。
在此图中,可以清楚看到前同步码,PPM调制引起的位跃迁也很明显。 即使面对如此清晰的信号,通过目视检查解码各位也需要很好的视力和极大的耐心。 显然,需要一个自动化程序来解码这些消息。 MATLAB非常适合于开发这种程序。 用于接收和解码S模式消息的MATLAB代码可概述如下: 1.利用filter()函数计算一个短时间窗口上的噪底和前同步码相关性。 我们的解决方案使用75个样本,相当于6 μs。 2.当前同步码相关性比噪底大一个相当大的倍数时,启动寻找第一消息位样本的逻辑。 a.此阈值可主观选择。 它应足够小,以便检测弱信号,但又应足够大,以防出现大量误报。 我们选择比噪底高10倍的值,这是一个能够捕捉大多数可解码消息的合理阈值。 b.前同步码模式产生数个峰值。 最佳匹配是第一个6 μs,因此存储第一峰值,开始寻找第一消息位,并检查接下来的3 μs是否有一个更大的峰值。 若有,则存储新峰值,重新开始寻找第一消息位。 c.找到最大峰值时,于2 μs后开始解码消息位。 d.图7显示了噪底(绿色)以及将理想前同步码与输入数据相关的结果。 噪底上有多个峰值,但有意义的峰值是幅度最大的峰值。 第一消息位样本出现在该峰值后2 μs处。
3.对于每一位,将前0.5μs和后0.5μs的样本幅度分别求和。 哪一个和较大决定该位是逻辑1还是逻辑0。 4.一边作出位判定,一边计算校验和。 当第一位到达时,需要某种控制逻辑来复位CRC寄存器,计算88位的校验和,然后在最后的24位期间清空CRC寄存器。 若接收位匹配校验和,则ADS-B消息有效。 5.根据S模式标准解析消息位(参见图8)。
上图来自MATLAB命令窗口,显示了从一百万样本数据集中成功解码的两条消息。 图中给出了构成88位消息和24位校验和的十六进制字符,解码过程的结果显示了航空器ID、消息类型以及航空器速度、高度和位置。 MATLAB提供了功能强大的数学和信号处理语言,使我们能够相对轻松地解决此类问题。 用于处理数据样本并最终解码消息的MATLAB代码很短,只有200行。 此外,MATLAB是解释性语言,因而很容易以交互方式尝试不同的设计思想,快速确定可行的解决方案。 我们对不同数据集测试了多种时序机制、阈值和噪声水平,最终获得一个满意的程序。 该MATLAB代码已针对本地空域飞行的航空器发出的信号进行了测试,解码的消息也对照airframes.org和flight-aware.com等信息源进行了检查。 硬件和代码表现得非常好,我们已经能够解码距离50英里的飞机发出的信号。 下一页:实施路径 |
|