主要内容

基于GPU和代码生成的杂波加速仿真

这个例子展示了如何在图形处理单元(GPU)或通过代码生成(MEX)而不是MATLAB™解释器上模拟杂波。该实例将流行的空时自适应处理(STAP)技术之一的样本矩阵反演(SMI)算法应用于六元均匀线性阵列(ULA)机载雷达接收的信号。该示例着重比较了GPU、代码生成和MATLAB解释器在杂波模拟方面的性能。您可以在示例中找到模拟和算法的详细信息时空自适应处理导论

此示例的完整功能需要并行计算工具箱™和MATLAB Coder™。

杂波模拟

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

  1. 把整个地形分成小的杂波斑块。补丁的大小取决于方位角补丁跨度和距离分辨率。

  2. 对每个贴片,计算其对应的参数,如随机返回,掠射角,天线阵列增益。

  3. 结合所有杂波补丁的回报,生成总杂波回报。

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

为了提高杂波模拟的速度,可以利用并行计算的优势。注意,后期脉冲的杂波返回可能依赖于早期脉冲产生的信号,因此由MATLAB提供的某些并行解,如parfor,并不总是适用的。但是,由于每个补丁上的计算是独立于其他补丁上的计算的,所以它适合于GPU加速。

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

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

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

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

对比杂波模拟次数

要比较MATLAB解释器、代码生成和GPU之间的杂波模拟性能,请键入下面的GUIstapcpugpu在MATLAB命令行中。启动的GUI如下图所示。

STAPCPUGPUExample_launch.PNG

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

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

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

  • GPU:特斯拉C2075, 6gb内存

计时结果如下图所示。

helperCPUGPUResultPlot

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

从图中可以看出,总的来说,GPU将模拟速度提高了几十倍,有时甚至是数百倍。有两个有趣的发现:

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

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

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

其他模拟计时结果

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

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

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

总结

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

Baidu
map