使用MATLAB和Simulink进行模式S检测和解码

描述

作者:Mike Donovan, Andrei Cozma, and Di Pu

可检测和解码的无线信号无处不在,使用当今的软件定义无线电(SDR)硬件(如ADI公司集成RF捷变收发器AD9361/AD9364)可以轻松访问这些信号。 ™1,2商用飞机的自动相关监视广播 (ADS-B) 传输提供现成的无线信号,可用于演示基于连接到 Xilinx Zynq-7000 全可编程 SoC 的 AD9361 的快速原型制作流程。 商用飞机使用 ADS-B 发射器向空中交通管制员报告其位置、速度、高度和飞机 ID。®®3飞行数据格式在国际民用航空组织 (ICAO) 的模式 S 扩展 Squitter 规范中定义。4ADS-B正在世界各地推出,以实现空中交通管制和防撞系统的现代化。它已经在欧洲被采用,并正在逐步引入美国。

S模式扩展分离器标准提供了RF传输格式和编码数据字段的详细信息。应答器传输具有以下特性:

发射频率:1090兆赫

调制:脉冲位置调制 (PPM)

数据速率:1 Mbps

消息长度:56 μs 或 112 μs

24 位 CRC 校验和

调谐频率和带宽完全在AD9361 RF收发器的能力范围内,并且可以使用各种软件或嵌入式平台选项检测和解码接收到的I/Q样本。

在本文中,我们将讨论如何使用基于AD9361的接收器平台捕获这些S模式信号,然后使用MATLAB和Simulink开发可以解码消息的算法。该算法的开发最终目标是将解决方案部署到Zynq SoC平台上,例如安富利的PicoZed™ SDR模块系统(SOM)。

接收器设计挑战

S模式消息为短(56 μs)或长(112 μs)。短消息包含消息类型、飞机标识号和循环冗余校验 (CRC) 校验和。长消息还包含高度、位置、速度和飞行状态。无论哪种情况,S模式传输都以8 μs前导码开始。接收方使用此前导码模式来确定正在传输的有效消息,并帮助接收方确定消息位何时开始。有关详细信息,请参见图 1。5

SDR

图1.模式 S 消息的结构。

S模式波形相当简单,但成功接收和解码传输的消息仍然存在一些挑战。

接收环境通常包含非常短的消息,其中穿插着较长的空闲时间,当发射飞机距离接收器很远时,接收的信号可能非常微弱。传统波形也以 1090 MHz 传输。接收器需要使用前导码来识别拥塞频带中的高幅度和低幅度模式S传输。

位在1 μs位间隔内具有两种可能的模式之一。逻辑 1 在前 1/2 μs 内导通,在第二个 1/2 μs 内关闭。逻辑 0 在前 1/2 μs 内关闭,在第二个 1/2 μs 内导通。由于位决策是基于基于时间的模式做出的,因此接收器需要使用前导码来准确找到消息位开始的I/Q采样。

模式 S 消息由 88 个信息位和 24 个校验和位组成。接收器需要能够清除寄存器、做出位决策、计算校验和并在正确的时间读取校验和寄存器。接收器需要定时控制才能正常工作。

对于嵌入式设计,解码过程必须逐个样本地工作。存储大量数据以进行批处理并不是嵌入式系统的现实接收器设计。

AD9361等功能强大的RF前端与MATLAB等技术计算语言相结合,极大地简化了与检测和解码这些传输相关的问题。MATLAB 和信号处理工具箱中的函数可用于识别同步模式、计算本底噪声、做出位决策以及计算校验和。MATLAB 中的条件和执行控制功能简化了控制逻辑。从二进制或文本文件访问测试数据,或使用AD9361 SDR平台直接流式传输到MATLAB都很容易。最后,MATLAB 的解释性质使得与数据交互、尝试不同的方法以及交互式开发解决方案变得容易。®

在 MATLAB 中对模式 S 接收器算法进行建模和验证

有兴趣了解MATLAB源代码的读者可以在ADI公司的GitHub存储库中找到这些文件。入门级函数为 ad9361_ModeS.m,还提供了此函数调用的文件。

设计接收器算法的第一步是访问一些源数据。由于许多飞机现在都配备了S模式转发器,因此可以将接收器调谐到1090 MHz的广播频率并捕获本地传输。在我们的例子中,我们可以使用 Zynq SDR 快速原型制作平台。ADI公司提供了一个MATLAB系统对象™,能够通过以太网从FMCOMMS平台接收数据。6System 对象允许用户选择调谐频率和采样率,使用无线电硬件收集接收样本,并将接收样本作为 MATLAB 变量直接引入 MATLAB 工作区。所需的代码非常短;几行代码用于设置 MATLAB 系统对象,几行代码用于设置 FMCOMMS3,以及几行代码用于捕获 I/Q 样本并将其写入 MATLAB 变量。代码示例如图 2、图 3 和图 4 所示。

SDR

图2.用于设置 MATLAB 系统对象的示例 MATLAB 代码。

SDR

图3.用于配置 FMCOMMS3 板的示例 MATLAB 代码。

SDR

图4.用于捕获 I/Q 样本并将其写入 Rx 变量的示例 MATLAB 代码。

我们 使用 了一些 基于 这些 命令 的 代码, 以 12.5 MHz 的 采样 率 捕获 多个 数据 集。选择 12.5 MHz 速率 是为了 提供 足够 的 样本, 以 微调 前导 码 与 第一 消息 位 的 对齐 方式, 并 平均 出 用于 做出 位 决策 的 样本 中 的 一些 噪声。100万个样品捕获的结果如图5所示。

SDR

图5.在 1090 MHz 下捕获样本数据。

在这个简短的数据集中,有14个信号在本底噪声之上脱颖而出。在这 14 个信号中,有两个是 S 模式消息。其余的都是应拒绝的遗留或杂散信号。放大到样本编号 604000 附近的区域会显示一条有效消息(参见图 6)。

SDR

图6.单模式 S 消息。

在此图中,可以清楚地看到前导码,并且由于PPM调制引起的位转换很明显。即使有这样的干净信号,通过检查解码位也需要良好的视力和很大的耐心。显然,需要一个自动化程序来解码这些消息。MATLAB 是开发该程序的良好解决方案。

可以接收和解码模式 S 消息的 MATLAB 代码可以总结如下:

计算本底噪声和前导码与 filter() 函数在短时间窗口内的相关性。在我们的解决方案中,我们使用 75 个样本,相当于 6 μs。

当前导码相关性超过本底噪声一个显著因素时,启动逻辑以查找第一个消息位样本。

这个阈值的选择是主观的。它应该足够小以检测微弱信号,但又足够大以防止大量误报。我们选择比本底噪声高 10× 的值作为捕获大多数可解码消息的合理阈值。

前导码模式产生多个峰值。由于最佳匹配在前6 μs,因此存储第一个峰值,开始搜索第一个消息位,并查看在接下来的3 μs中是否出现另一个更大的峰值。如果确实发生,请存储新的峰值并重置搜索第一个消息位的开头。

当出现最大峰值时,2 μs后开始消息位解码。

图7以绿色显示本底噪声,以及将理想前导码与输入数据相关联的结果。本底噪声上方有几个峰值,但感兴趣的峰值是幅度最大的峰值。第一个消息位的采样发生在该峰值后2 μs。

SDR

图7.计算本底噪声和前导码相关性。

对于每个单独的位,对前 1/2 μs 和第二个 1/2 μs 的样本幅度求和。无论总和较大,确定位是逻辑 1 还是逻辑 0。

在做出位决策时计算校验和。这需要一些控制逻辑,用于在第一个位到达时重置CRC寄存器,计算88位的校验和,然后清空最后24位的CRC寄存器。当接收位与校验和匹配时,ADS-B 消息有效。

根据模式 S 标准解析消息位(参见图 8)。

SDR

图8.解码模式 S 消息。

上图来自 MATLAB 命令窗口,显示了从 100 万个样本数据集中成功解码的两条消息。将显示构成 88 位消息和 24 位校验和的十六进制字符,解码过程的结果显示飞机 ID、消息类型以及飞机速度、高度和位置。

MATLAB 提供了一种强大的数学和信号处理语言,可以相对轻松地解决这个问题。处理数据样本并最终解码消息所需的 MATLAB 代码很短,只有 200 行 MATLAB 代码。此外,MATLAB 的解释性使得以交互方式尝试设计理念并快速确定可行的解决方案变得容易。在各种数据集上测试了几种时序机制、阈值和噪声水平,以产生令人满意的程序。

该 MATLAB 代码已在当地空域飞行的飞机信号上进行了测试,并且已根据 airframes.org 和 flightaware.com 等来源对解码消息进行了检查。硬件和代码性能非常好;我们已经能够解码50英里外飞机的传输。

实施途径

MATLAB 是在 PC 上测试设计理念和运行算法的绝佳环境,但如果最终目标是生成要在嵌入式平台上使用的软件或 HDL,尤其是像 Zynq SoC 这样的平台,那么 Simulink 是一个很好的解决方案。Simulink 非常适合对针对可编程器件所需的硬件特定细节进行建模。一个好的工作流程是使用 MATLAB 开发和验证算法,然后将设计转换为 Simulink,并继续沿着开发路径进行最终的硬件实现。

幸运的是,该算法的 MATLAB 代码逐个样本处理数据,因此转换为 Simulink 相当简单。与 200 行 MATLAB 代码相比,Simulink 模型易于显示和描述(参见图 9)。

SDR

图9.模式S检测与译码算法的模拟模型.

在图9中,您可以看到解码的第一步是计算本底噪声以及与前导码的相关性。数字滤波器块用于这些计算。时序控制块是使用 Stateflow 实现的,Stateflow 是一种状态机工具,用于为解码算法的其余部分生成定时、复位和控制信号。状态流对于要将控制逻辑与数据流分离的模型非常有用。激活时序和触发器后,名为 BitProcess 的块获取输入 I/Q 样本并计算数据位,CRC_Check块计算校验和。消息解析仍然在由此 Simulink 模型驱动的 MATLAB 脚本中进行。®

深入了解该模型,您可以看到使 Simulink 适合嵌入式开发的一些功能,尤其是将设计划分为面向 Zynq SoC 的功能以及生成 HDL 代码和 C 代码。

Simulink 具有出色的定点支持,因此您可以构建和测试设计的位真版本。各个块允许您为模型中的数学运算设置字长和小数长度。用于计算前导码相关性的数字滤波器模块就是一个很好的例子(图10)。您可以设置计算的舍入模式和溢出行为(地板和环绕是在 HDL 中完成数学运算的最简单选择)。此外,您可以为产品指定不同的字长和分数精度,并为滤波器指定累加器操作(图 11)。您可以使用映射到接收器 ADC 的字长选择,并利用硬件乘法器,例如 Zynq SoC DSP48 片中的 18 位× 25 位乘法器。

SDR

图 10.用于前导码相关的 Simulink 数字滤波器块,12 位数据类型。

SDR

图 11.定点数据类型设置。

嵌入式设计通常具有许多操作模式和有条件执行的算法。Stateflow特别擅长管理这些控制信号。状态流为您提供了检测和解码模式 S 消息所需的控制逻辑的可视化表示形式。在下面的图 12 中,您可以看到逻辑中的状态为:

同步搜索:在捕获的样本中查找前导码

WaitForT0:查找第一个消息位的开头

位进程:启用位处理

EmptyReg:清空校验和寄存器,并将位与位处理的输出进行比较

随着检测和解码算法在不同状态中的进展,Stateflow 模块生成启用位处理的信号,重置位决策计数器和校验和寄存器,并在模式 S 消息末尾读出校验和位。

SDR

图 12.用于解码模式 S 消息的状态流程图。

Simulink 模块库为工程师提供了在非常高的水平或非常精细的细节水平下工作的选择。Simulink 具有数字滤波器、FFT 和数控振荡器等高级模块,可轻松构建信号处理设计。如果需要对设计进行更精确的控制,可能是为了速度或面积优化,工程师可以使用低级模块,如单元延迟、逻辑运算符(例如 XOR)和开关。该模型中的 24 位校验和是使用这些低电平块构建的反馈移位寄存器(图 13)。

SDR

图 13.用于模式 S 校验和计算的反馈移位寄存器。

此 Simulink 模型是 MATLAB 算法的硬件特定版本,用于检测和解码模式 S 消息。Simulink 是一种有用的工具,用于弥合用 MATLAB 编写的行为算法与嵌入式硬件实现代码之间的差距。您可以将特定于硬件的详细说明引入 Simulink 模型,运行模型,并验证您所做的更改不会破坏解码算法。

结论

Zynq SDR 快速原型制作平台和 MathWorks 软件的结合为通信工程师提供了一种全新且灵活的方法,可以快速为无线接收器设计理念进行原型设计。捷变宽带RF收发器AD9361/AD9364提供的高度可编程性和性能以及硬件与MATLAB环境之间的简单连接,使工程师可以使用各种有趣的无线信号。使用 MATLAB 的工程师可以快速尝试多种设计理念,并最终确定出有前途的解决方案。如果设计的最终目标是嵌入式处理器,那么 Simulink 就是工程师可以使用的工具,通过硬件特定的想法来完善设计,并最终生成用于对处理器进行编程的代码。此工作流程减少了设计无线接收器所需的技能数量,并缩短了从概念到工作原型的开发周期。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分