此示例展示如何在 NI™ USRP™ 无线电的 FPGA 上部署雷达目标仿真算法。
介绍
在本例中,您将从 Simulink® 模型入手,该模型可模拟最多四个雷达目标响应。您将按照分步指南,在 Simulink 中从该模型生成比特流,并使用生成的 MATLAB® 主机接口脚本将其部署到 NI USRP 无线电上。该示例允许您发送线性 FM 雷达脉冲序列,然后在 MATLAB 中捕获并绘制模拟目标距离-多普勒响应。
有关如何在 NI USRP 无线电的 FPGA 上原型化和部署软件定义无线电算法的更多信息,请参阅目标 NI USRP 无线电工作流程。
设计概述
该示例使用了来自雷达目标仿真器和 HDL 编码器(雷达工具箱)示例的算法。该算法接收线性 FM 脉冲序列,并通过对接收波形应用可变距离延迟、多普勒频移和增益来模拟最多四个目标。然后,该算法以已知的时间偏移重新传输修改后的波形。此设计修改了接口,使您能够将生成的比特流部署到 NI USRP 无线电的 FPGA 上。
打开 Simulink 模型
Simulink 模型采用硬件建模方式实现目标仿真算法,并使用支持 HDL 代码生成的模块。它采用定点算法,并包含控制模型数据流的控制信号。
从 MATLAB 打开模型。
open_system('wtRADARTargetEmulatorSL');
该模型为子系统提供数据并保存其输出数据wtRADARTargetEmulatorSL。
打开wtRADARTargetEmulatorSL子系统。
open_system('wtRADARTargetEmulatorSL/wtRADARTargetEmulatorSL');
数据流经这些块和子系统:
AND 块在每个突发的最后一个数据包的最后一个样本上声明突发结束 (EOB) 信号。
该Multiple Target Emulator子系统模拟四个不同目标的响应。
该Sum Channels子系统将来自四个目标的响应合并为单个数据流。
每 256 个有效样本或 EOB 信号被断言时,分组块就会断言最后一个信号。
该区域通过由txTimeOffsetControl retransmission time relative to receive time端口控制的固定值生成从无线电重新传输下一个数据包的时间戳。
打开Multiple Target Emulator子系统。
open_system('wtRADARTargetEmulatorSL/wtRADARTargetEmulatorSL/Multiple Target Emulator');
该Multiple Target Emulator子系统根据输入enable、delay、inc和gain端口,应用可变时间延迟、可变频移和可变衰减,模拟四个不同目标的响应。操作如下:
当enable为真时,输入数据将提供给可变时间延迟。
可变时间延迟将输入样本缓冲在内存中,缓冲的样本数量由延迟端口指定。
延迟数据与数控振荡器 (NCO) 的输出相乘,以实现可变频率偏移。NCO 由inc端口值控制。
延迟和移位的数据与增益端口值相乘,以实现可变衰减。
open_system('wtRADARTargetEmulatorSL');
每个目标的输入都被指定为wtRADARTargetEmulatorSL子系统上的输入寄存器端口:e1、e2、e3和e4对应于启用输入端口;d1、d2、d3和d4对应于延迟输入;i1、i2、i3和i4对应于inc输入端口;g1、g2、g3和g4分别对应于四个目标的增益输入端口。
模拟设计
通过仿真模型验证设计。启用四个目标并指定初始雷达截面 (RCS)、距离和速度。
targetEnabled = [true true true true]; % 设置为 true 以模拟目标
targetRCS = [1 2 3 4]; % dBsm
targetRange = [5e3 15e3 3e3 5e3]; % m
targetSpeed = [-200 -100 100 200]; % m/s
设置模型应用的相对增益所基于的最大增益。这可以避免由于定点数据类型造成的不必要的信号损失,并且可以通过使用无线电前端的无线电增益来计算。指定maxGain为空可在辅助函数中使用计算出的最高实际增益helperRadarTargetSimulationSetup。
maxGain = [];
使用辅助函数在 MATLAB 中设置模型所使用的目标仿真参数helperRadarTargetSimulationSetup。
sl_in = helperRadarTargetSimulationSetup(targetEnabled,targetRCS,targetRange,targetSpeed,maxGain);
运行 Simulink 模型。
sl_out = sim("wtRADARTargetEmulatorSL.slx");
### Searching for referenced models in model 'wtRADARTargetEmulatorSL'.
### Total of 1 models to build.
### Building the rapid accelerator target for model: wtRADARTargetEmulatorSL
### Successfully built the rapid accelerator target for model: wtRADARTargetEmulatorSL
处理模拟输出数据并使用辅助函数绘制距离多普勒响应helperVisualizeRadarTargetSimulation。
创建距离多普勒响应对象来处理数据
设置环境和无线电
要使用 Wireless Testbench™ 连接 NI USRP 无线电,您必须首先安装并配置其他工具箱、支持包和第三方工具。更多信息,请参阅NI USRP 无线电安装指南。
如果您之前未保存过无线电硬件的无线电设置配置,请使用此radioSetupWizard功能打开“无线电设置”向导并按照步骤操作。要查看之前保存的无线电设置配置,请使用此radioConfigurations功能。
配置模型以生成 IP 核
首先,使用(HDL Coder)函数设置 Xilinx® 工具链。指定 Vivado® bin 目录的路径。更多信息,请参阅设置第三方工具。hdlsetuptoolpath
>> hdlsetuptoolpath('ToolName','Xilinx Vivado','ToolPath','/opt/Xilinx/Vivado/2021.1/bin');
在Simulink 工具条的“应用”选项卡中,选择“HDLCoder”。打开“HDL 代码”选项卡并按照以下步骤操作:# 确保子系统已在“代码”选项wtRADARTargetEmulatorSL中固定。要固定此选项,请在 Simulink 模型中选择子系统,然后单击固定图标。# 在“输出”>“IP 核”选项中选择“IP 核”。wtRADARTargetEmulatorSL
配置 HDL 代码生成设置
要打开“配置参数”窗口,请点击“HDL 代码”选项卡中的“设置”。然后,请按照以下步骤操作:
在HDL 代码生成面板的基本选项中,确保将语言设置为Verilog。默认情况下,HDL Coder 会在文件夹中生成 Verilog 文件hdlsrc。您可以选择其他位置。如果您进行了任何更改,请点击应用。
在HDL 代码生成 > 目标 > 工作流设置中,单击浏览并选择要保存生成的项目文件的项目文件夹。
在HDL 代码生成 > 目标 > 工具和设备设置中,将目标平台设置为USRP X410。如果您使用的是其他 USRP 无线电,请选择相应的目标平台并相应地调整参考设计参数。
在“HDL 代码生成”>“目标”>“参考设计设置”中,将“参考设计”设置为X1_200 10GigE,或者如果您使用的是其他 USRP 无线电,则设置为所需的参考 FPGA 映像。使用以下值设置参考设计参数:
外部存储器- 设置为PL DDR Buffer通过无线电上的内存缓冲区传输样本。此设置可确保 MATLAB 和无线电之间的样本连续。
输入流的数量- 设置为1,因为 DUT 连接到一个数据输入流。
输出流的数量- 设置为1,因为 DUT 连接到一个数据输出流。
天线数量- 设置为1,因为 DUT 有一个无线电接收和发射通道。
采样率 (S/s) - 设置250e6为无线电支持的目标模拟器硬件所需的基带采样率。有关支持的采样率列表,请参阅NI USRP 无线电中的基带采样率。
BlockID - 设置为任意 32 位十六进制数。默认值为12345678。
DUT 时钟源- 设置为Radio。此选项选择无线电前端的主时钟速率 (MCR) 作为 DUT 时钟。
流端口 FIFO 长度(样本) - 设置为Auto。
寄存器端口 FIFO 长度(样本) - 设置为Auto。
在HDL 代码生成 > 目标 > 目标设置中,目标频率默认设置为无线电支持的最大 MCR。
单击“应用”。
有关更多信息,请参阅配置 HDL 代码生成设置。
配置目标接口
在HDL Code选项卡中,单击Target Interface以打开 IP Core 编辑器。
在“接口映射”选项卡中,单击重新加载端口接口映射选项Reload IP core settings and interface mapping table from model:
将 DUT 的输入寄存器指定为写入寄存器。
为输入和输出流接口分配数据、有效、就绪、最后、突发结束 (EOB)、hastime 和时间戳信号。
每个流接口数据输入和输出端口都有一个选项菜单。要重新传输接收到的样本,请将源和接收器连接选项设置为Radio。对于这些adcDataIn选项,请将流缓冲区大小设置为32768,这是默认设置。缓冲区大小必须是 2 的幂,以确保最佳利用 FPGA RAM 资源。缓冲区大小根据样本数量指定。
单击以下按钮验证接口映射Validate IP core settings and interface mapping:
生成并加载比特流
要从 IP 核生成比特流,首先从“构建比特流”菜单中打开部署设置,并确保选中“在外部运行构建过程”选项。此设置是默认设置,可确保比特流构建在外部 Shell 中执行,从而允许您在构建 FPGA 映像时继续使用 MATLAB。
点击“构建比特流”即可创建 Vivado IP 核项目并构建比特流。基本项目检查完成后,诊断查看器会显示一条Build Bitstream Successful消息以及警告消息。但是,您必须等到外部 shell 显示比特流构建成功后才能继续下一步。比特流构建过程可能需要几个小时。在显示构建成功提示之前关闭外部 shell 将终止构建。成功构建比特流后,此项目的比特流将以名称生成x4xx.bit,并位于build_X410_X1_200/build_X410_X1_200工作目录的文件夹中。
在“构建比特流”中,打开“部署设置”。在“程序目标设备”设置中,设置 IP 地址。默认值为 192.168.10.2。如果您在使用“无线电设置”向导设置硬件时更改了默认 IP 地址,请相应地设置 IP 地址。
要将比特流加载到收音机上,有两个选项:
在后续步骤中使用生成的主机接口脚本加载比特流,该脚本调用该programFPGA函数。
现在通过单击“构建比特流”菜单中的“编程目标设备”将比特流加载到设备上。
如果您的无线电设备是 USRP X310,则编程大约需要五分钟。对于其他无线电设备,则只需不到一分钟。有关更多信息,请参阅生成比特流和编程 FPGA。
生成和修改主机接口脚本
要生成 MATLAB 脚本,以便连接到无线电并在其上运行已部署的设计,请点击“HDL 代码”选项卡中的“主机接口脚本”。这将生成一个接口脚本文件和设置函数文件,它们特定于 IP 核的目标接口映射。更多信息,请参阅运行和验证硬件实现。
运行主机接口脚本
此示例提供了两个现成的实时脚本,用于连接、配置和控制部署在 FPGA 上的目标仿真算法的无线电设备。您可以选择使用单个无线电设备运行和验证 DUT,或者使用第二个无线电设备发送测试信号并接收响应。
在单无线电上运行并验证 DUT
打开RADARTargetEmulator_SingleDevice.mlx。运行此实时脚本,从 MATLAB 发送雷达脉冲序列,将脉冲序列接收到目标模拟器 DUT 中,发送目标模拟器响应,并将响应捕获到 MATLAB 中。
绘制响应图,并叠加目标位置和恒虚警率 (CFAR) 目标检测结果,以验证被测器件 (DUT) 的运行情况。该图显示了示例输出。
open("./RADARTargetEmulator_SingleDevice.mlx")
使用外部刺激运行 DUT
打开RADARTargetEmulator_MultiDevice.mlx。运行此实时脚本,在一个无线电的后台线程中模拟雷达场景。同时,在 MATLAB 主线程中,将第二个无线电配置为基带收发器,以发射雷达脉冲序列并捕获响应。
您还可以使用此方法来模拟其他无线电硬件的目标响应。
open("./RADARTargetEmulator_MultiDevice.mlx")