Post Go back to editing

【快速通往量产的四个步骤】第三步——如何利用硬件在环验证S模式信号解码算法

在MATLAB或SimulinkRegistered中实现信号处理算法之后,合乎逻辑的下一步是利用从实际要使用的SDR硬件平台获得的真实数据验证算法的功能。首先是利用从系统获得的不同输入数据集来验证算法。这样做有助于验证算法的功能,但不能保证算法在其它环境条件下也能像预期那样工作,也不能确定对于SDR系统模拟前端和数字模块的不同设置,算法的行为和性能会如何。为了验证所有这些方面,如果能让算法在线运行以接收实时数据作为输入,并且调整SDR系统设置以实现最佳性能,将是非常有好处的。本系列文章的这一部分讨论ADI公司提供的软件工具(https://ezchina.analog.com/message/32385#32385),其支持MATLAB和Simulink模型与FMCOMMSx SDR平台直接互动;此外还会说明如何利用这些工具验证第二部分所述的ADS-B模型2。


MATLAB和Simulink IIO系统对象
ADI公司提供了完整的软件基础设施来支持MATLAB和Simulink模型与FMCOMMSx SDR平台(其连接到运行Linux的FPGA/SoC系统)实时互动。这之所以可能,有赖于IIO System ObjectTm3(系统对象),它设计用于通过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模型。一个连接到ZedBoard7且运行Analog Devices Linux发行版的AD-FMCOMMS3-EBZ SDR平台6用作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的平台,采样速率相当容易确定。发送数据速率一般等于接收数据速率,最终取决于基带算法。本例中,解码算法是针对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文件包含FIR滤波器的系数,该FIR滤波器利用ADI公司AD9361滤波器向导MATLAB应用程序设计8。此工具不仅能完成通用低通滤波器设计,还能为信号路径中的其它级提供幅度和相位均衡。

图6. 利用MATLAB AD9361滤波器向导设计的用于ADS-B信号的FIR滤波器


多功能且高度可配置的AD9361收发器具有多种增益控制模式,适合很多不同的应用。IIO系统对象的Gain Mode(增益模式)参数选择可用模式之一:manual、slow_attack、hybrid和fast_attack。最常用的模式是manual、slow_attack和fast_attack。Manual增益控制模式允许基带处理器 (BBP) 控制增益。Slow_attack模式主要用于慢速变化的信号,fast_attack模式主要用于"突发"开启和关闭的波形。增益模式在很大程度上取决于接收信号的强度。如果信号太强或太弱,建议使用manual或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双半波移动天线9;使用调谐不佳或制作不良的天线会导致空中雷达探测距离不够。


一切设置妥当之后,使用如下命令便可运行MATLAB模型:

[rssi1,rssi2]=ad9361_ModeS('ip','data source',channel);


其中,ip为FPGA板的IP地址,data source指定接收信号的数据源。目前,该模型支持"预先捕捉"的数据源和"实时"数据源。 Channel指定信号是利用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信号质量
任何RF信号都需要一个质量指标。例如,对于QPSK等信号,我们有误差矢量幅度 (EVM)。对于ADS-B信号,查看分隔器输出还不足以获得正确消息,如图8所示。我们需要一个指标来定义ADS-B/脉冲位置调制的质量,以便判断哪种设置更好。


ModeS_BitDecode4.m函数中有一个变量diffVals,它就可以用作这样的指标。此变量是一个112 × 1矢量。对于一条S模式消息中的每个解码位,它都会显示该位距离阈值有多远。也就是说,每个解码位相对于正确判断有多少裕量。显而易见,一个位的裕量越大,解码结果的置信度就越高。另一方面,若裕量很小,则意味着判断处于边缘区,解码位很有可能是错误的。


下面两幅图比较了有和没有FIR滤波器两种情况下从ADS-B接收器获得的diffVals值。注意y轴,我们发现,使用FIR滤波器时,无论处于最高点、最低点还是平均值,diffVals都较大。然而,当没有FIR滤波器时,几个位的diffVals都非常接近0,意味着解码结果可能不正确。因此,我们可以得出结论,使用适当的FIR滤波器可改善解码的信号质量。

图9. 使用FIR滤波器时从ADS-B接收器获得的diffVals值

 

图10. 无FIR滤波器时从ADS-B接收器获得的diffVals值


采用IIO系统对象的MATLAB ADS-B算法可从ADI GitHub库下载10。



利用IIO系统对象验证Simulink ADS-B算法
Simulink模型基于本系列文章第二部分介绍的模型2。解码器和解码模块直接来自该模型,我们增加了Simulink IIO系统对象以开展信号接收和硬件在环仿真。


原始模型以采样时间 = 1且帧大小 = 1的设置工作。然而,Simulink IIO系统对象以缓冲模式工作,它会积累若干样本,然后进行处理。为了让原始模型配合系统对象工作,我们在其间增加了两个模块:解除缓冲以使帧大小 = 1,转换速率以使采样时间 = 1。这样,原始模型便可保持不变。

图11. Simulink模型捕捉和解码ADS-B信号


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系统对象的Simulink ADS-B模型可从ADI GitHub库下载11。

 

结论
本文讨论了利用ADI公司提供的libiio基础设施进行的硬件在环仿真。采用这种基础设施,便可利用实际信号和硬件验证MATLAB和Simulink ADS-B信号检测与解码算法。属性设置高度依赖于应用和波形,适合一个波形的设置并不一定适合另一个波形。这是关键的一步,可确保SDR系统的模拟前端和数字模块针对目标算法和波形调谐妥当,并且算法足够鲁棒,对于不同环境条件下获得的实际数据,它都能像预期的那样处理。有了经过验证的算法之后,便可开始下一步,即利用MathWorks代码自动生成工具将算法转换为HDL和C代码,并将此代码集成到实际SDR系统的可编程逻辑和软件当中。