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