基于异构加速的动目标检测算法的实现方法
2022-03-07陈莹莹胡善清李兴明
陈莹莹 胡善清 李兴明 王 策
(1.北京理工大学信息与电子学院雷达技术研究所,北京 100081;2.嵌入式实时信息处理技术北京市重点实验室(北京理工大学),北京 100081;3.北京理工雷科电子信息技术有限公司,北京 100081)
1 引言
雷达具有全天候、作用距离大的优势,在目标探测领域应用广泛。对于探测雷达而言,主要需要完成对目标的方位信息以及运动状态的估计,更具体一点即需要估计出目标的具体模型,从而可以运用于预警、避障、侦察等[1]。而随着信息化、自动化不断普及,目标场景也在不断丰富,各类动目标大量出现,动目标检测的应用场景也在不断增加,如小型无人机、滑翔机等等,这对雷达动目标检测的性能提出了更高的要求,同时,雷达回波数据量的增大对实时性带来了新的挑战。动目标检测(MTD)是现代雷达信号处理中的重要方法,基于MTD当前有很多学者对其进行了研究和改良,如文献[2]提出的基于运动补偿的动目标检测处理方法,提高对远距离弱目标的探测能力;文献[3]针对距离徙动和多普勒频率徙动提出了一种基于频域实现MAR-MTD(Modified Axis Rotation Moving Target Detection)的高速微弱目标检测算法;文献[4]针对快速动目标的会在距离向上产生距离走动、方位向上产生散焦现象的问题,提出了多普勒补偿滤波器组和方位匹配滤波器组级联的方法,以达到抑制杂波提高动目标检测性能的目的等。可以看到,雷达动目标检测的应用领域不断扩展,算法的复杂度不断提高,尽可能的提高检测的准确性和实时性十分重要。
近年来,随着集成电路工艺进一步发展,GPU(Graphics Processing Unit,图形处理器)的计算能力也在不断提升,其强大的并行能力越来越多地被应用在了高性能计算需求领域[5]。针对动目标检测算法的特点,可以将检测流程模块化、流水化,将其与GPU 并行计算的优势结合来大大增强实时性,因此,本文提出了利用CPU(Central Processing Unit,中央处理器)+GPU 异构加速的方法提高动目标检测的实时性的方法。本文为实现动目标的实时检测,首先查阅相关资料,找到动目标检测的核心算法,设计动目标检测流程,即对回波数据首先进行脉冲压缩提高信噪比,然后采用动目标检测算法(MTD)形成距离-多普勒二维分布图,最后采用恒虚警(CFAR)检测算法进行目标的检测;然后进行了算法异构加速设计,即并行流水设计,采用算法模块内并行处理,算法模块间流水处理的方式加速算法运行,然后移植到CPU+GPU 异构平台上,最后仿真验证算法的准确性和实时性。
本文通过构造目标回波来验证算法的准确性,通过模块单独执行和算法运行的时间测试来验证实时性。实验结果表明,目标检测算法的结果与回波构造一致,并行流水优化后的目标检测算法平均约5.98 ms完成单帧计算,比异构加速下提升了27.6%。
2 动目标检测算法
本文的动目标检测算法如下图1所示。
2.1 脉冲压缩
输入的回波信号一般会含有噪声干扰,为了更真实仿真实际的回波处理,对输入的回波信号先进行了脉冲压缩,本文通过匹配滤波实现信号的脉冲压缩。
在时域上,根据发射信号s(t)可描述匹配滤波器的冲击响应h(t)为:
匹配滤波器输出的时域表达式为:
其中*代表卷积运算,X(t)作为回波信号,可以看作是发送信号s(t)的延时信号,因此卷积计算结果会在延时处形成一个尖峰。
而在频域上,匹配滤波是乘法运算,比卷积运算其运算量减少。因此,在实际的实现上,通常是先对回波信号进行FFT 变换,转换到频域上与本地参考信号相乘,最后使用逆FFT 运算,本文也采用的是这一种实现方式。
设输入信号的频谱为X(w),本地待匹配信号的共轭频域为S(w),则有:
最后经过IFFT可以得到匹配滤波的输出:
本文采用的脉冲压缩模块处理算法的流程如下图2所示。
2.2 动目标检测(MTD)
动目标检测(Moving Target Detection,MTD)是根据目标的运动特性来实现目标检测的方法,是现代雷达信号处理中的重要方法,它能在完成多普勒滤波处理的同时,实现相参积累,提高目标回波的信噪比,增强了雷达探测运动目标的能力[6-7]。
相参积累不是针对单个回波的一维处理,而是针对多个连续回波组成的二维处理,每个回波单独作为二维数据的行数据,然后对回波数据的每一个列向量做FFT处理,输出的结果为“距离-多普勒”二维分布图。假设每一个回波信号的一个周期内点数为N,当选择M个周期来完成MTD 时,则信号是一个行数为M,列数为N的二维矩阵,如下(5)所示:
将信号以矩阵的形式描述如下所示:
动目标检测是对多个回波进行的计算,主要完成相干积累,找到相位的偏移量,在算法中可以看成对式(6)所示的矩阵zM做列向量的傅里叶变换。
2.3 恒虚警检测
为了在不间断回波中,区分出回波中是否检测到了真实的目标,本文采用的是恒虚警(Constant False-Alarm Rate)检测。
恒虚警检测的方法有很多种,可以将其分为CA-CFAR(平均值恒虚警检测)、GO-CFAR(最大值选择恒虚警检测)、OS-CFAR(排序式恒虚警检测)等[8-9]。本次采用得是CA-CFAR 来实现目标检测,其处理框图如图3所示。
如图3所示,D为监测点,在本文中选取当前回波的功率最高点为监测点,为了更准确地确定检测门限,恒虚警检测时需要在监测点前后加上保护单元,其中保护单元的个数由动目标检测运算结果中的峰值主瓣宽度决定。去掉检测点和保护单元外的其他数据作为干扰点,计算这些干扰点的平均值,监测点的值应远大于这些干扰点的值,因此在最后加上一个自适应的门限值来筛选就可以完成CA-CFAR的过程。
CA-CFAR检测的原理为:
其中:α为归一化门限系数,为平均虚警概率,N为参考单元数。
Z为总的杂波功率水平估计。
3 异构加速的目标检测算法的实现
3.1 平台架构
本文的结果在服务器上进行验证,服务器的配置如下表1所示。
表1 实验平台及配置Tab.1 Experiment platform configuration instructions
本次实验平台的服务器为CPU+GPU 架构,是当前最为普遍的一种服务器架构,既可以CPU 满足高性能的多线程运算,又可以通过GPU 并行加速可以提高数据运算的速度。因此选用该平台来设计实现目标检测系统,并基于该平台结构及特性设计优化的目标检测算法。
3.2 异构加速的目标检测算法流程设计
本文将目标检测算法分为三个算法模块,充分利用CPU和GPU的资源,将整个流程拆分到CPU和GPU并行处理,程序流程如下图4所示。
其中,CPU 端主要负责算法流程中参数初始化、数据传输和流水控制。初始化的参数包含输入回波数据的参数,如脉冲周期、动目标检测维度、虚警概率、每帧数据含有的脉冲数等等。GPU 端主要配合CPU 实现动目标检测算法,本文将动目标检测算法分为三个模块,脉冲压缩、MTD和CFAR。
由于三个模块存在执行先后关系,为最大程度利用运算资源,提高实时性,设计如图5所示的流水处理模型。本次实验中,采用二级流水的方式,每一级流水对应CPU端的一个线程和GPU端并行处理算法。CPU 线程控制算法的顺序执行,GPU 则完成算法高效运行。如图5所示,当第一级流水完成M个脉冲处理后,触发二级流水完成后续的算法。
同时,在设计的流水算法模块基础上,根据每个模块的原理,将其并行优化后再移植到GPU 上。并行优化提升主要应用在模块算法内部,如在动目标检测算法中,输入的数据为多个脉冲组成的二维的数据,主要执行的算法为列向量的傅里叶变换,每一列的傅里叶变换是独立的,而且是执行的算法是一致的,可以通过开启GPU 多核并行优化处理实现加速,如下图6 所示;在恒虚警检测中,每个脉冲的自适应门限计算互不影响,也能并行处理多个脉冲数据。
由于本文的设计采用了多线程的流水处理,为保证算法的正确运行,在模块之间数据传递的过程中加入了标志来保证模块数据的正确获取,当且仅当该模块的数据被取走或计算完毕后方可覆盖。
3.3 高性能GPU加速优化
在GPU 代码的实现过程中,不仅要关注算法本身的可并行性,还需要从内存占用、调试流程、数据拷贝等方面来综合考虑,进行优化。
(1)减少数据拷贝的次数
在动目标检测的算法中,不仅要有单个脉冲内的一维计算,也有多个脉冲间的多维计算,当涉及到多维计算,且模块间数据具有相关性的应用场景中,尽量减少拷贝的次数可以大大提高整个动目标检测算法的实时性。本次设计使用数据块拷贝代替单个脉冲拷贝,即当脉冲压缩模块累计完成M个脉冲压缩计算后一次性拷贝到GPU 端进行MTD 模块。这样的操作不仅可以减少数据拷贝的耗时,同时又满足动目标检测模块数据输入的要求,大大提高了目标检测的实时性。
(2)固定GPU存储空间
在本文的设计中,由于每个内部算法模块的流程是固定的,同时具有一定的时间先后关系,因此需要占用的GPU 内存是固定的,重复地执行空间申请和释放会占用大量的时间,因此在程序的设计时,需要对算法模块整个执行流程的GPU 内存空间消耗进行设计,并在算法执行初始申请空间,算法执行结束后再释放。
(3)采用乒乓存储
数据的输入是源源不断地,在本次设计中为了保证提高实时性在进行GPU 运算时,采用了固定空间存储的方式,因此数据地覆盖是不可避免的,为了防止数据覆盖导致的错误,本文设计了标志位。但是仅依靠标志位,会出现拷贝等待的问题消耗时间,因此本文设计了乒乓存储的方式,申请了两段内存,避免了拷贝等待,以脉冲压缩为例,如下图7所示。
动目标模块的输入数据是前一个模块,即脉冲压缩的结果,但是,动目标检测模块的输入数据不是单个脉冲数据构成的一维数据,而是多个脉冲数据构成的二维数据,处理时需要对数据的结构进行整理,这就导致这两个模块间的数据拷贝必不可少,并且只有将数据拷贝到MTD模块的内存中,才能继续进行脉冲压缩的匹配滤波计算。如图7所示,若只申请一块内存,则两次匹配滤波计算需要等待转置拷贝,而申请两块内存可以让匹配滤波计算不间断执行,避免了拷贝等待的时间消耗。因此本次设计采用乒乓存储技术,申请两段空间来节省这一段时间的消耗。
(4)代码调试的优化
1)程序应减少读写内存次数,以便有效降低时间,特别是对外部内存操作。GPU 更擅长于计算,不擅长读写内存。因此固定参数尽可写在代码里,而不是从内存中读取[10]。
2)CUDA 程序预编译时,对于整数和浮点数的处理不同,如果需使用浮点数,必须将数值写成浮点数。在调试过程中,可以使用打印或者查看内存的方式来验证结果的准确性。
3.4 结果分析
为了验证并行流水算法能在保证结果准确的基础上对实现实时性的提升,本文构造了仿真的测试数据,测试数据的参数如下表2所示。
如表2 所示,构造的测试数据是以200 μs 为脉冲周期的,每个脉冲的数据含有8192个采样点的浮点数。其中,为最大程度接近实际的场景,设置信噪比为60 dB,每积累128个脉冲进行一次动目标检测算法,后续称每128 个脉冲数据为一帧。后续的测试,均以上述的参数进行数据构造,由于测试环境的限制,数据的接收不是按照脉冲周期接收的,因此后续的测试以数据文件的格式输入,测试算法的耗时。
表2 测试数据参数Tab.2 Test data parameters
本文的结果分析分为两部分,第一部分为准确性验证,通过构造回波数据来验证目标检测算法的结果是否正确。为了保证准确性验证结果的可靠性,本文采用构造多种类型的回波进行多次验证实验,其中包含无目标、单目标、多目标的三种回波类型,将检测结果与构造回波的目标数做比对,结果与仿真数据全部一致,因此本文认为,该算法的目标检测准确性可靠。
第二部分为实时性分析,通过测试算法耗时来测试。由于算法的初始化阶段和空间分配阶段的耗时不是每个目标检测模块都是需要的,因此,在本次实验的测试中不予考虑。为了保证实时性验证的可靠性,本次实时性的测试采用多次实验取平均的方式来提高实验结果的准确性,对不同类型的回波输入进行多次分模块耗时测试和算法整体耗时测试,其结果如下表3所示。其中,整体算法耗时测试分为流水测试和非流水测试,验证异构加速的性能。
表3 分模块耗时测试结果Tab.3 Time-consuming test results
理论上,在非流水加速下,每帧数据的耗时等于所有模块耗时的总和,每帧的耗时可以通过式(9)来计算:
其中,M为每帧数据含有的脉冲数,t1为动目标检测的耗时,t0为脉冲压缩的耗时,t2为恒虚警检测的耗时,下同。本次实验中,设置M为128,将表3的数据代入得到非流水模式下理论上的耗时为7932.12 μs。
理论上,在流水加速下,平均耗时受最大耗时模块约束,当测试帧数为x帧时,每帧的耗时可以通过式(10)来计算:
将表3中的实测模块耗时数据代入式(10)可以得到理论上随着测试帧数增大,平均耗时的变化趋势图,如下图8所示。随着测试帧数的不断增加,每帧的平均耗时不断减少,不断趋近于最大耗时模块的值,即5541.12 μs。因此,理论上,流水加速下的目标检测算法相比于非流水加速下的耗时,提高了30.14%。
到达理论值需要无限数据量,实际不可能实现,由图8 所示,当数据量大于100 时,算法平均耗时已经得到了明显的改善。因此,本文取每次100 个回波帧数据取平均的实验方式,多次进行实验测试,得到如表3所得数据。
由表3 可以得到,总体的耗时小于分模块的耗时总和,这证明了流水设计的有效性,虽然还是一定程度上会受到数据传输、数据拷贝的影响,但是异构加速下的动目标检测的耗时约为5.98 ms,比非流水下提升了27.6%。
4 结论
由于动目标本身特征多样、处于运动状态的特性,导致回波的数量大并且检测算法的运算量较大的问题,因此对动目标进行实时检测具有一定的挑战性。本文利用CPU+GPU 的异构加速的方式来提高动目标检测的实时性,采用CPU多线程主导、GPU多核并行运算相结合的流水算法处理,最大化利用运算资源。本文设计将动目标检测算法细分为三个模块,脉冲压缩模块、MTD和CA-CFAR,使用模块内并行加速,模块间流水执行的方式,移植到CPU+GPU 架构的服务器上,充分利用了计算机的运算资源和存储资源,实现了算法的实时处理,单帧的计算时间约为5.98 ms,比非流水加速下提高了27.6%。
GPU 和CPU 异构协同并行处理,可以更高效利用计算机的资源,设计时,需考虑不同算法模块间的数据拷贝,尽可能减少拷贝的耗时,同时还需根据每个功能模块的耗时来进行流水设计,否则在某些时刻中会出现空闲状态运算,导致效率得不到有效的提升。
后续,将对动目标检测算法增加更多的模块,如运动补偿、目标跟踪等等,通过单模块的耗时分析,通过将新的模块加入原有流水或者新增多级流水的方式,在保证动目标检测正确性和实时性的基础上,增加更为复杂的功能。