主要内容

利用GPU和代码生成加速杂波模拟

这个例子展示了如何在图形处理单元(GPU)上或通过代码生成(MEX)来代替MATLAB解释器来模拟杂波。该实例应用了样本矩阵反演(SMI)算法,这是一种流行的空时自适应处理(STAP)技术,用于机载雷达接收到的6元均匀线性阵列(ULA)信号。通过实例比较了GPU、代码生成和MATLAB解释器在杂波仿真中的性能。感兴趣的读者可以在示例中找到仿真和算法的细节时空适应处理导论

这个例子的完整功能需要并行计算工具箱™和MATLAB编码器™。

杂波模拟

雷达系统工程师经常需要模拟杂波返回来测试信号处理算法,如STAP算法。然而,产生一个高保真杂波返回涉及许多步骤,因此通常是昂贵的计算。例如,constantGammaClutter使用以下步骤模拟杂波:

  1. 将整个地形分割成小块杂波。贴片的大小取决于方位贴片跨度和距离分辨率。

  2. 对于每个补丁,计算其相应的参数,例如随机返回,放牧角度和天线阵列增益。

  3. 将所有杂波补丁的返回值组合起来生成总的杂波返回值。

杂波斑块的数量取决于地形覆盖范围,但通常在数千到数百万之间。此外,以上所有步骤都需要对每个脉冲执行(假设使用脉冲雷达)。因此,杂波仿真往往是系统仿真中的难点。

为了提高杂波模拟的速度,可以利用并行计算。注意,从后面的脉冲返回的杂波可能依赖于前面脉冲产生的信号,因此MATLAB提供的某些并行解,如金宝搏官方网站parfor,并不总是适用的。但由于每个patch上的计算是独立于其他patch上的计算的,因此适合GPU加速。

如果你有一个支持的GPU和访金宝app问并行计算工具箱,那么你可以利用GPU生成杂波返回使用gpuConstantGammaClutter而不是constantGammaClutter.在大多数情况下,使用agpuConstantGammaClutter系统对象是您需要做的唯一更改。

如果你有MATLAB Coder,你也可以通过生成C代码来加速杂波模拟onstantGammaClutter,编译并运行编译后的版本。当在代码生成模式下运行时,此示例将编译stapclutter使用codegen命令:

codegen(“stapclutter”,“参数”,…{coder.Constant (maxRange)……coder.Constant (patchAzSpan)});

c的所有属性值onstantGammaClutter必须作为常量传递。codegen命令将生成mex文件stapclutter_mex,该文件将在循环中被调用。

比较杂波模拟时间

为了比较MATLAB解释器、代码生成和GPU之间的杂波仿真性能,输入以下命令启动GUIstapcpugpu在MATLAB命令行中。启动后的GUI如下图所示:

GUI的左侧包含四个图,分别显示原始接收信号、接收信号的角度-多普勒响应、处理信号和STAP处理权值的角度-多普勒响应。同样,可以在示例中找到详细信息时空适应处理导论.在GUI的右侧,您可以通过在方位角方向(以度为单位)和最大杂波范围(以km为单位)上修改杂波补丁跨度来控制杂波补丁的数量。然后,您可以单击Start按钮来启动模拟,该模拟将模拟5个相干处理间隔(CPI),其中每个CPI包含10个脉冲。处理后的信号和角度-多普勒响应在每个CPI中更新一次。

下一节将展示不同模拟运行的计时。在这些模拟中,每个脉冲由200个距离样本组成,距离分辨率为50米。杂波片跨度和最大杂波范围的组合会产生不同数量的杂波片。例如,杂波斑块跨度为10度,最大杂波范围为5公里,则杂波斑块为3600个。仿真在以下系统配置上进行:

  • CPU: Xeon X5650, 2.66 GHz, 24gb内存

  • 图形处理器:特斯拉C2075, 6gb内存

时序结果如下图所示。

helperCPUGPUResultPlot

图中包含6个轴。坐标轴1包含3个bar类型的对象。坐标轴2包含3个bar类型的对象。标题为杂波模拟时间图的坐标轴3包含3个bar类型的对象。这些对象分别代表MATLAB、MEX、GPU。axis 4包含4个类型为bar, line的对象。axis 5包含4个类型为bar, line的对象。axis 6包含2个类型为line的对象。这些对象代表GPU加速,MEX加速。

从图中,您可以看到通常,GPU通过几十次提高模拟速度,有时甚至百次。两个有趣的观察是:

  • 当杂波补丁的数量很小时,只要数据能够装入GPU内存,GPU的性能几乎是恒定的。对于MATLAB解释器来说,情况并非如此。

  • 一旦杂波补丁的数量变大,数据就无法再放入GPU内存中。因此,GPU在MATLAB解释器上提供的速度开始下降。然而,对于近千万的杂波补丁,GPU仍然提供了超过50倍的加速。

仿真速度的提高由于代码生成不如GPU速度的提高,但仍然是显著的。代码生成的constantGammaClutter将收集的杂波作为常量数组进行预计算。对于大量的杂波补丁,数组的大小就会变得太大,从而由于内存管理的开销而降低了速度的提高。代码生成需要访问MATLAB Coder,但不需要特殊的硬件。

其他仿真时序结果

尽管本例中使用的模拟计算了数百万个杂波补丁,但得到的数据立方体的大小为200x6x10,这表明在每个脉冲、6个通道和10个脉冲中只有200个范围样本。与实际问题相比,这个数据立方体很小。本示例选择这些参数来展示使用GPU或代码生成的好处,同时确保示例在MATLAB解释器中运行在合理的时间内。一些具有较大数据立方体大小的模拟结果如下:

  • 使用GPU进行模拟,为50个元素的ULA生成50个脉冲,每个脉冲中有5000个范围样本,即5000x50x50数据立方体。距离分辨率为10米。雷达覆盖的总方位角为60度,每个杂波片中有1度。最大杂波距离为50公里。杂波片总数为305,000。

  • 除了180度方位角覆盖和最大杂波范围等于地平线范围(约130公里)之外,使用GPU进行类似于上述模拟的60倍加速度。在本例中,杂波补丁的总数为2,356,801。

概括

这个例子比较了使用MATLAB解释器、GPU或代码生成来模拟杂波返回的性能。结果表明,与MATLAB解释器相比,GPU和代码生成的速度有很大的提高。