使用 AMD Vitis™ Model Composer 创建数字 AM 调制与解调方案
FPGA在无线通信和软件定义无线电(SDR)领域的应用尤为出色。尽管无线通信和SDR技术较为复杂,但AMD Versal™ RF系列自适应SoC家族中的多种设备均可胜任相关任务。
不过,我们可以在大多数AMD设备上创建简单的SDR,因此在本项目中,我们将创建一个使用振幅调制进行数据收发的简单SDR。
为此,我想展示我们如何轻松地使用 AMD Vitis™ Model Composer 开发此类解决方案。
如果您之前未曾接触过Vitis Model Composer,它是由AMD开发的一款基于模型的设计环境,可利用MathWorks MATLAB®和Simulink®快速开发和验证采用FPGA加速的系统。该工具使设计者能够以高度抽象的方式创建、仿真和优化硬件架构,然后自动生成可综合的RTL代码以及适用于FPGA的实现,无需手动编写HDL代码。
AM调制
幅度调制(AM)可能是最容易实现和解调的调制方式,尽管其在功率和带宽方面效率较低。AM至今仍被广泛应用于从无线电到航空通信等多种领域。作为最简单的调制方法,它为理解更复杂的调制方案提供了良好的起点。
在本项目中,我们将设计一个解决方案,用于调制和解调单个频率信号或数字传输的数据。
为确保不会无意中对社区造成射频干扰,我将确保各电路板之间的传输通过同轴电缆连接,从而避免射频信号向外辐射。
AM发射机
AM发射机的原理非常简单。我们需要一个本地振荡器来产生载波频率。由于信息被调制到载波的振幅上,因此需要将产生的载波与要传输的信息相乘。
我们还需要为调制信号提供直流偏移。所有这些功能都可以通过Simulink中的AMD工具箱内的一个模块来实现。
为了生成载波信号,我们将使用配置为产生20 MHz载波的正弦波模块。
待编码的数据将首先经过一个网关,该网关会将MATLAB数据类型转换为AMD工具箱所需的定点数据类型。
在通过网关后,将使用一个常数倍数,该常数倍数用于控制调制指数。该指数的范围为0到1.0,对于本应用,我将其设为1.0。
常数乘法器的输出随后与直流偏移量相加,该偏移量确保当输入数据为零时,载波仍保持存在。我们通过使用一个加减模块来实现这一点,该模块将输入数据与直流偏移量相加。
随后,通过将载波与加减运算的结果相乘来生成调制输出。
该设计开发用于100 MHz时钟频率下运行。
正弦波生成的设置如下所示。
该模块是在子系统中创建的,我们需要在FPGA中实现的设计也必须位于子系统内。
顶级
为了测试AM调制方案,我们需要在设计的顶层实现多个功能。
第一个是Vitis模型构建器中心,可用于选择目标设备或板卡,同时验证硬件并生成RTL。
RTL 设置
在设计中加入VMC中心后,下一步是添加正弦波发生器和随机数发生器。它们将作为被调制数据的来源。
为了能够在不同信号源之间切换,我使用了一个可以通过拨动开关控制的开关。
然后我在输入和输出上添加了扫描范围,以观察时域信号,并使用FFT分析调制后的输出,其频谱看起来是正确的。
正弦波和随机数据均以500 kHz的频率生成,开关设置为使用正弦波作为数据源。
在以下输出频谱中,您可以看到正频率和负频率。在此频谱中,我们可以看到20 MHz的载波,以及±500 kHz的上边带和下边带。当使用单个谐振子时,这些边带是预期出现的。
时域图如下所示,显示了经典的包络线。
当切换设置为编码随机数据时,我们可以看到载波在20 MHz处,由于随机数据包含多个频率,因此上下边带不明显,能量分散在整个频谱中。
AM编码信号可以在时域中观察到。
信封检测器
解调AM调制有几种不同的方法,其中最简单(也是我们这里要实现的)是包络检波器。
要将此内容生成为HDL模块,我们需要创建一个子系统,并在其中添加我们的设计。然后,在该子系统的输出端连接频谱分析仪和示波器。
方法很简单。首先,我们需要对输入的射频波形取绝对值。接下来进行两个阶段的滤波处理。第一阶段将输入采样率从100 MHz降低到4 MHz。第二阶段的滤波采用一个带通滤波器,通带为500 kHz,阻带为600 kHz。
为了设计滤波器,我们可以使用FDA工具,因为我们希望在工作区中存储多个不同设置的滤波系数。
第一个滤波器采样频率为100 MHz,设计的通带为500 kHz,阻带从2 MHz开始。
第二个滤波器在4 MHz处实现,截止频率更窄。
使用500 kHz正弦波进行实现时,FFT显示了500 kHz频率处的明显频谱。由于解调器未进行直流滤除,因此在0 MHz处可以看到较大的直流分量。
时域输出如下所示。
当我们将随机数据输入解调器时,便能在时域中观察到所传输的信息。
在基带的频率域中,我们可以看到直流分量以及信号在500 kHz范围内的分布。
时域响应。
生成硬件
在成功实现预期的调制与解调功能后,下一步是生成用于硬件在环测试的模块。
我选择了AMD Kintex™ 7 FPGA KC705评估套件,因为这是我撰写该项目时办公室里可用的电路板之一。不过,该套件可以用于开发和部署在多种AMD设备上。
开始时,我打开了VMC Hub,选择了AM Mod子系统,然后在导出类型中选择了联合仿真(JTAG)。
这将为目标板创建一个项目和位流。
完成后,将在库中创建一个新组件。保存库后,将新符号拖放到主图示中。
将此拖到主图中后,我们就可以连接输入和输出了。我将输入连接到了模型的同一端,输出则连接到另一个频谱分析仪。
这次运行模拟需要稍长时间,但我们可以看到相同的FFT频谱。
我们可以通过打开AMD Vivado™设计套件项目来检查实现资源。对于调制器,我们可以看到它大约需要699个LUT和844个FF。
当以相同方式实现时,解调器需要623个查找表(LUT)、970个固定寄存器(FF)和12个数字信号处理器(DSP)。
解调结果如下图所示,包括随机数据和500 kHz正弦波的解调。
总结
该项目表明,可以利用AMD Vitis Model Composer中的AMD Toolbox创建一个简单的AM调制/解调方案。
本文编译自hackster.io





