0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:ADI 作者:Mike Donovan, Andrei 2023-01-08 10:52 次阅读

作者: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模式信号,然后使用MATLABSimulink开发可以解码消息的算法。该算法的开发最终目标是将解决方案部署到Zynq SoC平台上,例如安富利PicoZed™ SDR模块系统(SOM)。

接收器设计挑战

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

poYBAGO6L9qAGnXyAAAp7m8zLsQ646.png?la=en&imgver=1

图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 所示。

pYYBAGO6L9uAJLdZAAEt_J8bUI0338.png?la=en&imgver=1

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

poYBAGO6L9yAeLJ7AACSaq68LEA474.png?la=en&imgver=1

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

pYYBAGO6L96AIyeAAADafr4EVQk039.png?la=en&imgver=1

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

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

poYBAGO6L-CAFk-yAAEp3_gvXYE070.png?la=en&imgver=1

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

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

pYYBAGO6L-GAFIWMAAHxX6UYF60500.png?la=en&imgver=1

图6.单模式 S 消息。

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

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

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

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

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

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

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

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

poYBAGO6L-OAKpicAAC9G9owP1A314.png?la=en&imgver=1

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

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

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

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

pYYBAGO6L-WARlVXAADNbzUtm-M140.png?la=en&imgver=1

图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)。

poYBAGO6L-aAOrvoAAC-VVcXevk271.png?la=en&imgver=1

图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 位乘法器。

pYYBAGO6L-eANXlbAAFd7GB3TOQ417.png?la=en&imgver=1

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

poYBAGO6L-mAQ0G3AAIBxXGgmnU762.png?la=en&imgver=1

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

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

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

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

位进程:启用位处理

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

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

pYYBAGO6L-uAGDCKAAI027eFpIE523.png?la=en&imgver=1

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

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

poYBAGO6L--AaRgQAACtQRpNi_k025.png?la=en&imgver=1

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

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

结论

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

审核编辑:郭婷

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

    关注

    10

    文章

    2976

    浏览量

    104793
  • matlab
    +关注

    关注

    175

    文章

    2924

    浏览量

    228465
  • SDR
    SDR
    +关注

    关注

    7

    文章

    232

    浏览量

    50158
收藏 人收藏

    评论

    相关推荐

    基于MATLAB/Simulink的系统仿真技术与应用

    基于MATLAB_Simulink的系统仿真技术与应用. 本书首先介绍了MATLAB语言的程序设计的基本内容,在此基础上系统介绍了系统仿真所必要的数值计算方法及MATLAB实现
    发表于 06-19 13:15

    matlabsimulink仿真

    matlabsimulink仿真模块里面进行仿真SPWM时怎么设置调制比?如何实现空间矢量面宽调制SVPWM的仿真输出?
    发表于 08-05 18:12

    如何利用MATLABSimulink进行S模式检测和解码

    如何利用MATLABSimulink进行S模式检测和解码
    发表于 05-18 07:17

    如何利用MATLABSimulink进行S模式检测和解码

    如何利用MATLABSimulink进行S模式检测和解码
    发表于 05-20 06:31

    什么是MATLAB SIMULINKSimulink有哪些应用实例?

    什么是MATLAB SIMULINKSimulink有哪些应用实例?怎样去设计一种Simulink电力电子控制系统?
    发表于 07-02 06:50

    如何去搭建Matlab/Simulink

    搭建MatlabSimulink 下针对 TIDSP 的代码自动生成环境搭建 Matlab/Simulink 下针对 TIDSP 的代码自动生成环境本文介绍如何搭建 Matlab/Simuli
    发表于 07-07 06:18

    如何对六脉波交交变频调速系统进行Matlab/Simulink仿真

    双变量控制的是什么?怎样去设计一种基于晶闸管的六脉波交交变频调速系统?如何对六脉波交交变频调速系统进行Matlab/Simulink仿真?
    发表于 09-27 09:24

    电路实验与Matlab/Simulink仿真

    电路实验与Matlab/Simulink仿真:摘要:在探索和研究电路实验的改革创新过程中,分析电路实验存在的不足,对电路实验提出改进的措施.提出采用工程软件MatlabSimulink
    发表于 04-14 08:26 167次下载

    simulink__matlab教程

      演示一个Simulink的简单程序   【例7.1】创建一个正弦信号的仿真模型。   步骤如下:   (1) 在MATLAB的命令窗口运行simulink命令,或单击工具栏中的 图
    发表于 11-04 16:58 245次下载

    Matlab-Simulink教程集合(文档)

    Matlab-Simulink教程集合【文档】,大学学习Matlab基础教材。
    发表于 08-23 16:46 0次下载

    利用MATLABSimulink进行S模式检测和解码

    自动相关监视广播波形,能被检测和解码的无线信号无处不在。利用当今的软件定义无线电 (SDR) 硬件,像ADI公司的集成RF捷变收发器 AD9361/AD9364 等,很容易接入这些信号™1,2。商业
    发表于 11-17 08:42 4846次阅读

    使用MATLABSimulink工具进行三相PFC仿真的资料概述

    本文档的主要内容详细介绍的是使用MATLABSimulink工具进行三相PFC仿真的资料概述免费下载。
    发表于 01-04 15:34 50次下载
    使用<b class='flag-5'>MATLAB</b>的<b class='flag-5'>Simulink</b>工具<b class='flag-5'>进行</b>三相PFC仿真的资料概述

    如何使用MatlabSimulink进行调制解调的分析

    调制与解调是信号处理应用的重要内容,该文利用 Matlab/Simulink 对幅度调制与解调进行仿真和分析。首先采用 MATLAB7.0 语言编制脚本文件, 对信号
    发表于 04-22 08:00 12次下载
    如何使用<b class='flag-5'>Matlab</b>和<b class='flag-5'>Simulink</b><b class='flag-5'>进行</b>调制解调的分析

    MATLAB Simulink系统进行图像处理仿真的教程免费下载

    本文档的主要内容详细介绍的是MATLAB Simulink系统进行图像处理仿真的教程免费下载包括了:1 图像处理模块库,2 基于SIMULINK的图像增强,3 基于
    发表于 10-09 08:00 0次下载
    <b class='flag-5'>MATLAB</b> <b class='flag-5'>Simulink</b>系统<b class='flag-5'>进行</b>图像处理仿真的教程免费下载

    使用Zynq SDR套件和Simulink代码生成工作流程进行快速原型设计

    本系列第 2 部分中讨论的 Simulink 模型(“使用 MATLABSimulink 进行模式 S
    的头像 发表于 01-08 09:50 1579次阅读
    使用Zynq SDR套件和<b class='flag-5'>Simulink</b>代码生成工作流程<b class='flag-5'>进行</b>快速原型设计