作者:Di Pu and Andrei Cozma
在 MATLAB 或 Simulink 中实现任何信号处理算法后,下一个自然步骤是使用从将要运行的实际 SDR 硬件系统获取的真实数据来验证算法的功能。作为第一步,使用从系统捕获的不同输入数据集完成算法的验证。这有助于验证算法的功能,但不能保证算法在用于进行数据捕获的环境条件以外的环境条件下按预期执行,也不能保证SDR系统的模拟前端和数字模块的不同设置的行为和性能。为了验证所有这些方面,如果算法可以在线运行以接收实时数据作为输入并调整SDR系统的设置以获得最佳性能,则非常有益。本系列文章的这一部分讨论了ADI公司提供的软件工具,这些工具允许MATLAB和Simulink模型与FMCOMMSx SDR平台进行直接交互,并展示了如何使用这些工具验证本系列文章第2部分中介绍的ADS-B模型。
MATLAB 和 Simulink IIO 系统对象
ADI公司提供完整的软件基础设施,使MATLAB和Simulink模型能够与连接到运行Linux的FPGA/SoC系统的FMCOMMSx SDR平台进行实时交互。这是可能的,因为IIO系统对象™3旨在通过 TCP/IP 与硬件系统交换数据,以便将数据流式传输到目标和从目标流式传输数据、控制目标的设置并监视不同的目标参数(如 RSSI)。图 1 显示了软件基础架构的高级架构以及系统中组件之间的数据流。
图1.软件基础设施框图。
IIO 系统对象基于 MathWorks 系统对象规范4并公开数据和控制接口,MATLAB/Simulink 模型通过这些接口与基于 IIO 的平台进行通信。这些接口在配置文件中指定,该文件将系统对象接口链接到 IIO 数据通道或 IIO 属性。这使得IIO系统对象的实现具有通用性,允许它仅通过修改配置文件即可与任何IIO平台一起使用。ADI GitHub 存储库中提供了配置文件和示例的一些平台5包括AD-FMCOMMS2-EBZ/AD-FMCOMMS3-EBZ/AD-FMCOMMS4-EBZ/AD-FMCOMMS5-EBZ SDR板和高速数据采集AD-FMCDAQ2-EBZ板。IIO系统对象和目标之间的通信是通过libiio服务器/客户端基础结构完成的。服务器在 Linux 下的嵌入式目标上运行,并管理目标与本地和远程客户端之间的实时数据交换。libiio库抽象了硬件的低级细节,并提供了一个简单而完整的编程接口,可用于具有各种语言绑定(C,C++,C#,Python)的高级项目。
本文的下一部分提供了有关如何使用 IIO 系统对象验证 ADS-B MATLAB 和 Simulink 模型的真实示例。AD-FMCOMMS3-EBZ SDR平台6连接到 ZedBoard7运行ADI公司的Linux发行版用作SDR硬件系统,用于验证ADS-B信号检测和解码算法的操作,如图2所示。
图2.用于 ADS-B 算法验证的硬件设置。
使用 IIO 系统对象进行 MATLAB ADS-B 算法验证
为了利用从AD-FMCOMMS3-EBZ SDR平台获取的实时数据验证MATLAB ADS-B解码算法操作,我们开发了一个MATLAB脚本来执行以下操作:
根据用户输入计算地球区域
创建和配置 IIO 系统对象
通过IIO系统对象配置AD-FMCOMMS3-EBZ模拟前端和数字模块
使用 IIO 系统对象从 SDR 平台接收数据帧
检测和解码 ADS-B 数据
显示解码的 ADS-B 信息
构造 IIO 系统对象后,必须使用 SDR 系统的 IP 地址、目标设备名称以及输入/输出通道大小和编号对其进行配置。图 3 提供了有关如何创建和配置 MATLAB IIO 系统对象的示例。
图3.MATLAB IIO 系统对象创建和配置。
然后使用IIO系统对象设置AD9361的属性并接收ADS-B信号。AD9361的属性基于以下考虑因素进行设置:
图4.MATLAB libiio设置AD9361的属性。
基于AD9361的平台的采样速率非常简单。发射数据速率通常等于RX数据速率,最终取决于基带算法。在本例中,由于解码算法设计为12.5 MSPS采样速率,因此AD9361的数据速率设置得相应。通过这样做,接收到的样本可以直接应用于解码算法,而无需任何额外的抽取或插入操作。
RF带宽控制设置AD9361的RX模拟基带低通滤波器的带宽,以提供抗混叠和带外信号抑制。为了成功解调接收到的信号,系统必须最大化信噪比(SNR)。为此,需要将RF带宽设置得尽可能窄,同时满足平坦度和带外抑制规格,以最大限度地降低带内噪声和杂散信号电平。如果RF带宽设置得比需要的宽,ADC的线性动态范围将因额外的噪声而减小。同样,ADC的无杂散动态范围也会减小,因为带外信号抑制较低,导致接收器整体动态范围减小。因此,将RF带宽设置为最佳值对于接收所需的带内信号和抑制带外信号至关重要。通过观察接收信号的频谱,我们发现4 MHz是RF带宽的合适值。
除了通过RF带宽属性设置AD9361的模拟滤波器外,我们还可以通过IIO系统对象在AD9361上启用数字FIR滤波器来提高解码性能,如图5所示。根据ADS-B信号的频谱特性,设计了一种数据速率为12.5 MSPS、通带频率为3.25 MHz、阻带频率为4 MHz的FIR滤波器。这样,我们可以进一步关注感兴趣的带宽。
图5.通过 libiio 在 AD9361 上启用正确的 FIR 滤波器。
Adsb.ftr是一个包含使用ADI公司AD9361滤波器向导MATLAB应用程序设计的FIR滤波器系数的文件。8该工具不仅提供通用低通滤波器设计,还为信号路径中的其他级提供幅度和相位均衡。
图6.使用 MATLAB AD9361 滤波器向导为 ADS-B 信号设计的 FIR 滤波器。
多功能、高度可配置的AD9361收发器具有多种增益控制模式,可用于各种应用。IIO 系统对象的增益模式参数选择一种可用模式:手动、slow_attack、混合和fast_attack。最常用的模式是手动、slow_attack和fast_attack。手动增益控制模式允许基带处理器(BBP)控制增益。Slow_attack模式用于缓慢变化的信号,而fast_attack模式用于“突发”打开和关闭的波形。增益模式在很大程度上取决于接收信号的强度。如果信号太强或太弱,建议使用手动模式或slow_attack。否则,fast_attack是一个不错的选择。在ADS-B的情况下,由于这些信号的突发性质,fast_attack增益模式可提供最佳结果。Fast_attack模式是该波形的要求,因为存在前导码,并且AGC需要足够快的反应,以便捕获第一个比特。在没有信号的情况下,攻击时间(降低增益所需的时间)和衰减时间(增加增益所需的时间)之间存在差异。目标是快速调低增益,以便在第一个位上可以看到有效的“1”,但不增加位之间的增益。
最后,根据您设置TX_LO_FREQ和RX_LO_FREQ的方式,有两种使用此模型的方法:使用预先捕获的数据(RF 环回)和使用实时数据。
预捕获的数据
在这种情况下,我们正在使用 AD-FMCOMMS3-EBZ 发送和接收一些预先捕获的 ADS-B 信号。这些信号保存在一个名为“newModeS”的变量中。
图7.使用预先捕获的 ADS-B 信号定义输入。
这种情况的要求是使TX_LO_FREQ = RX_LO_FREQ,它可以是AD-FMCOMMS3-EBZ支持的任何LO频率值。由于预捕获数据的性质,其中有大量 ADS-B 有效数据,因此这是验证硬件设置是否合适的好方法。
实时数据
在这种情况下,我们通过空中接收实时ADS-B信号,而不是AD-FMCOMMS3-EBZ传输的信号.根据ADS-B规范,它是在1090 MHz的中心频率下传输的,因此这种情况的要求是:
RX_LO_FREQ=1090 MHz,TX_LO_FREQ远离1090 MHz以避免干扰。
在接收器侧使用能够覆盖 1090 MHz 频段的适当天线,例如 ADS-B 双 1/2 波移动天线9;使用调谐不良或制作不良的天线将导致您的空中雷达范围不足。
正确设置好所有内容后,为了运行 MATLAB 模型,只需使用以下命令:
[rssi1,rssi2]=ad9361_ModeS('ip','data source',channel);
其中 ip 是 FPGA 板的 IP 地址,数据源指定接收信号的数据源。目前,此模型支持“预捕获”和“实时”数据源。通道指定是使用 AD-FMCOMMS3-EBZ 的通道 1 还是通道 2 接收信号。
例如,以下命令接收通道 2 上预先捕获的数据:
[rssi1,rssi2]=ad9361_ModeS('192.168.10.2','pre-captured',2);
在仿真结束时,您将获得两个通道上的RSSI值,以及如下所示的结果表:
图8.模拟结束时显示的结果表。
此结果表显示了模拟期间出现的飞机的信息。通过适当的天线,该型号能够使用 AD-FMCOMMS3-EBZ 捕获和解码 80 英里范围内的飞机信号。由于有两种类型的S模式消息(56 μs或112 μs),因此某些消息包含的信息比另一种消息多。
当使用真实世界的ADS-B信号试用此模型时,信号强度对于成功解码非常重要,因此请确保将天线放置在飞机的良好视线位置。通过查看两个通道上的RSSI值,可以看到接收到的信号强度。例如,如果在通道2上接收信号,则通道2的RSSI应明显高于通道1的RSSI。您可以通过查看频谱分析仪来判断是否有任何有用的数据。
射频信号质量
对于任何RF信号,都需要有一个质量指标。例如,对于像QPSK这样的信号,我们有误差矢量幅度(EVM)。对于 ADS-B 信号,仅查看切片器的输出以获取正确的消息是不够的,如图 8 所示。我们需要一个指标来定义ADS-B/脉冲位置调制的质量,以便我们可以判断一种设置是否优于另一种设置。
在 ModeS_BitDecode4.m 函数中,有一个变量 diffVals,可以用作这样的度量。此变量是 112 × 1 向量。它显示一个模式S消息中的每个解码位,它离阈值有多远。换句话说,每个解码位相对于正确决策有多少裕量。很明显,位的余量越大,解码结果就越可信。另一方面,如果裕量较低,则表示决策在边界区域,因此很可能是解码位错误。
以下两个图比较了从带和不带FIR滤波器的ADS-B接收器获得的差异值。通过查看 y 轴,我们发现使用 FIR 滤波器,无论它是在最高点、最低点还是平均值,diffVals 都更大。但是,当没有FIR滤波器时,几个位的差异非常接近0,这意味着解码结果可能是错误的。因此,我们能够验证使用适当的FIR滤波器可以提高解码的信号质量。
图9.从带有FIR滤波器的ADS-B接收器获得的差异值。
图 10.从不带FIR滤波器的ADS-B接收器获得的差异值。
使用 IIO 系统对象的 MATLAB ADS-B 算法可以从 ADI GitHub 存储库下载。10
使用 IIO 系统对象进行 ADS-B 算法验证
Simulink 模型基于本系列文章第 2 部分中介绍的模型。2检测器和解码部分直接来自该模型,我们添加了 Simulink IIO 系统对象,用于在环路仿真中进行信号接收和硬件仿真。
原始模型的采样时间 = 1,帧大小 = 1。但是,Simulink IIO 系统对象在缓冲模式下工作 - 它累积大量样本,然后对其进行处理。为了使原始模型与系统对象一起使用,我们在它们之间添加了两个块:取消缓冲以使帧大小= 1和速率转换以使采样时间= 1。通过这样做,我们可以保持原始模型完好无损。
图 11.用于捕获和解码 ADS-B 信号的 Simulink 模型。
Simulink IIO 系统对象设置如下。与 MATLAB 类似,它创建一个系统对象,然后定义与此系统对象相关的 IP 地址、设备名称和输入/输出通道数量和大小。
图 12.Simulink IIO 系统对象。
与IIO系统对象对应的Simulink模块的输入和输出端口通过对象模块的属性对话框以及特定于目标ADI SDR平台的配置文件进行定义。输入和输出端口分为数据端口和控制端口。数据端口用于以基于帧的处理模式接收/发送连续数据的缓冲区,而控制端口用于配置和监控不同的目标系统参数。数据端口的数量和大小从块的配置对话框中配置,而控制端口在配置文件中定义。AD9361的属性根据MATLAB模型中引入的相同因素进行设置。MATLAB 模型中采用的所有理论和方法都可以在这里应用。
根据您设置TX_LO_FREQ和RX_LO_FREQ的方式,此 Simulink 模型可以在两种模式下运行:使用预先捕获的数据“DataIn”和使用实时数据。以预先捕获的数据为例,在模拟结束时,我们可以在命令窗口中看到以下结果。
图 13.使用预先捕获的数据在模拟结束时在命令窗口中生成结果。
此处的结果以文本格式显示,而不是 MATLAB 模型中显示的结果表。
使用 IIO System Object 的 Simulink ADS-B 模型可从 ADI GitHub 存储库下载。
结论
本文讨论了使用ADI公司提供的libiio基础设施进行硬件在环仿真。使用此基础设施,用于 ADS-B 信号检测和解码的 MATLAB 和 Simulink 算法可以使用真实信号和真实硬件进行验证。由于属性设置非常依赖于应用程序和波形,因此适用于一个波形的方法不适用于另一个波形。这是确保SDR系统的模拟前端和数字模块针对目标算法和波形进行适当调谐的关键步骤,并且算法足够鲁棒,并且可以处理在不同环境条件下获取的真实数据,并按预期工作。有了经过验证的算法,现在是时候进入下一步了,其中包括使用 MathWorks 的自动代码生成工具将算法转换为 HDL 和 C 代码,并将该代码集成到实际 SDR 系统的可编程逻辑和软件中。本系列文章的下一部分将展示如何生成代码并将其部署到生产硬件中,并将讨论在机场使用真实世界的 ADS-B 信号操作平台所获得的结果。这将完成将SDR系统从原型设计一直到生产所需的步骤。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !