陳瑩瑩 胡善清 李興明 王 策
(1.北京理工大學(xué)信息與電子學(xué)院雷達技術(shù)研究所,北京 100081;2.嵌入式實時信息處理技術(shù)北京市重點實驗室(北京理工大學(xué)),北京 100081;3.北京理工雷科電子信息技術(shù)有限公司,北京 100081)
雷達具有全天候、作用距離大的優(yōu)勢,在目標(biāo)探測領(lǐng)域應(yīng)用廣泛。對于探測雷達而言,主要需要完成對目標(biāo)的方位信息以及運動狀態(tài)的估計,更具體一點即需要估計出目標(biāo)的具體模型,從而可以運用于預(yù)警、避障、偵察等[1]。而隨著信息化、自動化不斷普及,目標(biāo)場景也在不斷豐富,各類動目標(biāo)大量出現(xiàn),動目標(biāo)檢測的應(yīng)用場景也在不斷增加,如小型無人機、滑翔機等等,這對雷達動目標(biāo)檢測的性能提出了更高的要求,同時,雷達回波數(shù)據(jù)量的增大對實時性帶來了新的挑戰(zhàn)。動目標(biāo)檢測(MTD)是現(xiàn)代雷達信號處理中的重要方法,基于MTD當(dāng)前有很多學(xué)者對其進行了研究和改良,如文獻[2]提出的基于運動補償?shù)膭幽繕?biāo)檢測處理方法,提高對遠距離弱目標(biāo)的探測能力;文獻[3]針對距離徙動和多普勒頻率徙動提出了一種基于頻域?qū)崿F(xiàn)MAR-MTD(Modified Axis Rotation Moving Target Detection)的高速微弱目標(biāo)檢測算法;文獻[4]針對快速動目標(biāo)的會在距離向上產(chǎn)生距離走動、方位向上產(chǎn)生散焦現(xiàn)象的問題,提出了多普勒補償濾波器組和方位匹配濾波器組級聯(lián)的方法,以達到抑制雜波提高動目標(biāo)檢測性能的目的等??梢钥吹?,雷達動目標(biāo)檢測的應(yīng)用領(lǐng)域不斷擴展,算法的復(fù)雜度不斷提高,盡可能的提高檢測的準(zhǔn)確性和實時性十分重要。
近年來,隨著集成電路工藝進一步發(fā)展,GPU(Graphics Processing Unit,圖形處理器)的計算能力也在不斷提升,其強大的并行能力越來越多地被應(yīng)用在了高性能計算需求領(lǐng)域[5]。針對動目標(biāo)檢測算法的特點,可以將檢測流程模塊化、流水化,將其與GPU 并行計算的優(yōu)勢結(jié)合來大大增強實時性,因此,本文提出了利用CPU(Central Processing Unit,中央處理器)+GPU 異構(gòu)加速的方法提高動目標(biāo)檢測的實時性的方法。本文為實現(xiàn)動目標(biāo)的實時檢測,首先查閱相關(guān)資料,找到動目標(biāo)檢測的核心算法,設(shè)計動目標(biāo)檢測流程,即對回波數(shù)據(jù)首先進行脈沖壓縮提高信噪比,然后采用動目標(biāo)檢測算法(MTD)形成距離-多普勒二維分布圖,最后采用恒虛警(CFAR)檢測算法進行目標(biāo)的檢測;然后進行了算法異構(gòu)加速設(shè)計,即并行流水設(shè)計,采用算法模塊內(nèi)并行處理,算法模塊間流水處理的方式加速算法運行,然后移植到CPU+GPU 異構(gòu)平臺上,最后仿真驗證算法的準(zhǔn)確性和實時性。
本文通過構(gòu)造目標(biāo)回波來驗證算法的準(zhǔn)確性,通過模塊單獨執(zhí)行和算法運行的時間測試來驗證實時性。實驗結(jié)果表明,目標(biāo)檢測算法的結(jié)果與回波構(gòu)造一致,并行流水優(yōu)化后的目標(biāo)檢測算法平均約5.98 ms完成單幀計算,比異構(gòu)加速下提升了27.6%。
本文的動目標(biāo)檢測算法如下圖1所示。
輸入的回波信號一般會含有噪聲干擾,為了更真實仿真實際的回波處理,對輸入的回波信號先進行了脈沖壓縮,本文通過匹配濾波實現(xiàn)信號的脈沖壓縮。
在時域上,根據(jù)發(fā)射信號s(t)可描述匹配濾波器的沖擊響應(yīng)h(t)為:
匹配濾波器輸出的時域表達式為:
其中*代表卷積運算,X(t)作為回波信號,可以看作是發(fā)送信號s(t)的延時信號,因此卷積計算結(jié)果會在延時處形成一個尖峰。
而在頻域上,匹配濾波是乘法運算,比卷積運算其運算量減少。因此,在實際的實現(xiàn)上,通常是先對回波信號進行FFT 變換,轉(zhuǎn)換到頻域上與本地參考信號相乘,最后使用逆FFT 運算,本文也采用的是這一種實現(xiàn)方式。
設(shè)輸入信號的頻譜為X(w),本地待匹配信號的共軛頻域為S(w),則有:
最后經(jīng)過IFFT可以得到匹配濾波的輸出:
本文采用的脈沖壓縮模塊處理算法的流程如下圖2所示。
動目標(biāo)檢測(Moving Target Detection,MTD)是根據(jù)目標(biāo)的運動特性來實現(xiàn)目標(biāo)檢測的方法,是現(xiàn)代雷達信號處理中的重要方法,它能在完成多普勒濾波處理的同時,實現(xiàn)相參積累,提高目標(biāo)回波的信噪比,增強了雷達探測運動目標(biāo)的能力[6-7]。
相參積累不是針對單個回波的一維處理,而是針對多個連續(xù)回波組成的二維處理,每個回波單獨作為二維數(shù)據(jù)的行數(shù)據(jù),然后對回波數(shù)據(jù)的每一個列向量做FFT處理,輸出的結(jié)果為“距離-多普勒”二維分布圖。假設(shè)每一個回波信號的一個周期內(nèi)點數(shù)為N,當(dāng)選擇M個周期來完成MTD 時,則信號是一個行數(shù)為M,列數(shù)為N的二維矩陣,如下(5)所示:
將信號以矩陣的形式描述如下所示:
動目標(biāo)檢測是對多個回波進行的計算,主要完成相干積累,找到相位的偏移量,在算法中可以看成對式(6)所示的矩陣zM做列向量的傅里葉變換。
為了在不間斷回波中,區(qū)分出回波中是否檢測到了真實的目標(biāo),本文采用的是恒虛警(Constant False-Alarm Rate)檢測。
恒虛警檢測的方法有很多種,可以將其分為CA-CFAR(平均值恒虛警檢測)、GO-CFAR(最大值選擇恒虛警檢測)、OS-CFAR(排序式恒虛警檢測)等[8-9]。本次采用得是CA-CFAR 來實現(xiàn)目標(biāo)檢測,其處理框圖如圖3所示。
如圖3所示,D為監(jiān)測點,在本文中選取當(dāng)前回波的功率最高點為監(jiān)測點,為了更準(zhǔn)確地確定檢測門限,恒虛警檢測時需要在監(jiān)測點前后加上保護單元,其中保護單元的個數(shù)由動目標(biāo)檢測運算結(jié)果中的峰值主瓣寬度決定。去掉檢測點和保護單元外的其他數(shù)據(jù)作為干擾點,計算這些干擾點的平均值,監(jiān)測點的值應(yīng)遠大于這些干擾點的值,因此在最后加上一個自適應(yīng)的門限值來篩選就可以完成CA-CFAR的過程。
CA-CFAR檢測的原理為:
其中:α為歸一化門限系數(shù),為平均虛警概率,N為參考單元數(shù)。
Z為總的雜波功率水平估計。
本文的結(jié)果在服務(wù)器上進行驗證,服務(wù)器的配置如下表1所示。
表1 實驗平臺及配置Tab.1 Experiment platform configuration instructions
本次實驗平臺的服務(wù)器為CPU+GPU 架構(gòu),是當(dāng)前最為普遍的一種服務(wù)器架構(gòu),既可以CPU 滿足高性能的多線程運算,又可以通過GPU 并行加速可以提高數(shù)據(jù)運算的速度。因此選用該平臺來設(shè)計實現(xiàn)目標(biāo)檢測系統(tǒng),并基于該平臺結(jié)構(gòu)及特性設(shè)計優(yōu)化的目標(biāo)檢測算法。
本文將目標(biāo)檢測算法分為三個算法模塊,充分利用CPU和GPU的資源,將整個流程拆分到CPU和GPU并行處理,程序流程如下圖4所示。
其中,CPU 端主要負(fù)責(zé)算法流程中參數(shù)初始化、數(shù)據(jù)傳輸和流水控制。初始化的參數(shù)包含輸入回波數(shù)據(jù)的參數(shù),如脈沖周期、動目標(biāo)檢測維度、虛警概率、每幀數(shù)據(jù)含有的脈沖數(shù)等等。GPU 端主要配合CPU 實現(xiàn)動目標(biāo)檢測算法,本文將動目標(biāo)檢測算法分為三個模塊,脈沖壓縮、MTD和CFAR。
由于三個模塊存在執(zhí)行先后關(guān)系,為最大程度利用運算資源,提高實時性,設(shè)計如圖5所示的流水處理模型。本次實驗中,采用二級流水的方式,每一級流水對應(yīng)CPU端的一個線程和GPU端并行處理算法。CPU 線程控制算法的順序執(zhí)行,GPU 則完成算法高效運行。如圖5所示,當(dāng)?shù)谝患壛魉瓿蒑個脈沖處理后,觸發(fā)二級流水完成后續(xù)的算法。
同時,在設(shè)計的流水算法模塊基礎(chǔ)上,根據(jù)每個模塊的原理,將其并行優(yōu)化后再移植到GPU 上。并行優(yōu)化提升主要應(yīng)用在模塊算法內(nèi)部,如在動目標(biāo)檢測算法中,輸入的數(shù)據(jù)為多個脈沖組成的二維的數(shù)據(jù),主要執(zhí)行的算法為列向量的傅里葉變換,每一列的傅里葉變換是獨立的,而且是執(zhí)行的算法是一致的,可以通過開啟GPU 多核并行優(yōu)化處理實現(xiàn)加速,如下圖6 所示;在恒虛警檢測中,每個脈沖的自適應(yīng)門限計算互不影響,也能并行處理多個脈沖數(shù)據(jù)。
由于本文的設(shè)計采用了多線程的流水處理,為保證算法的正確運行,在模塊之間數(shù)據(jù)傳遞的過程中加入了標(biāo)志來保證模塊數(shù)據(jù)的正確獲取,當(dāng)且僅當(dāng)該模塊的數(shù)據(jù)被取走或計算完畢后方可覆蓋。
在GPU 代碼的實現(xiàn)過程中,不僅要關(guān)注算法本身的可并行性,還需要從內(nèi)存占用、調(diào)試流程、數(shù)據(jù)拷貝等方面來綜合考慮,進行優(yōu)化。
(1)減少數(shù)據(jù)拷貝的次數(shù)
在動目標(biāo)檢測的算法中,不僅要有單個脈沖內(nèi)的一維計算,也有多個脈沖間的多維計算,當(dāng)涉及到多維計算,且模塊間數(shù)據(jù)具有相關(guān)性的應(yīng)用場景中,盡量減少拷貝的次數(shù)可以大大提高整個動目標(biāo)檢測算法的實時性。本次設(shè)計使用數(shù)據(jù)塊拷貝代替單個脈沖拷貝,即當(dāng)脈沖壓縮模塊累計完成M個脈沖壓縮計算后一次性拷貝到GPU 端進行MTD 模塊。這樣的操作不僅可以減少數(shù)據(jù)拷貝的耗時,同時又滿足動目標(biāo)檢測模塊數(shù)據(jù)輸入的要求,大大提高了目標(biāo)檢測的實時性。
(2)固定GPU存儲空間
在本文的設(shè)計中,由于每個內(nèi)部算法模塊的流程是固定的,同時具有一定的時間先后關(guān)系,因此需要占用的GPU 內(nèi)存是固定的,重復(fù)地執(zhí)行空間申請和釋放會占用大量的時間,因此在程序的設(shè)計時,需要對算法模塊整個執(zhí)行流程的GPU 內(nèi)存空間消耗進行設(shè)計,并在算法執(zhí)行初始申請空間,算法執(zhí)行結(jié)束后再釋放。
(3)采用乒乓存儲
數(shù)據(jù)的輸入是源源不斷地,在本次設(shè)計中為了保證提高實時性在進行GPU 運算時,采用了固定空間存儲的方式,因此數(shù)據(jù)地覆蓋是不可避免的,為了防止數(shù)據(jù)覆蓋導(dǎo)致的錯誤,本文設(shè)計了標(biāo)志位。但是僅依靠標(biāo)志位,會出現(xiàn)拷貝等待的問題消耗時間,因此本文設(shè)計了乒乓存儲的方式,申請了兩段內(nèi)存,避免了拷貝等待,以脈沖壓縮為例,如下圖7所示。
動目標(biāo)模塊的輸入數(shù)據(jù)是前一個模塊,即脈沖壓縮的結(jié)果,但是,動目標(biāo)檢測模塊的輸入數(shù)據(jù)不是單個脈沖數(shù)據(jù)構(gòu)成的一維數(shù)據(jù),而是多個脈沖數(shù)據(jù)構(gòu)成的二維數(shù)據(jù),處理時需要對數(shù)據(jù)的結(jié)構(gòu)進行整理,這就導(dǎo)致這兩個模塊間的數(shù)據(jù)拷貝必不可少,并且只有將數(shù)據(jù)拷貝到MTD模塊的內(nèi)存中,才能繼續(xù)進行脈沖壓縮的匹配濾波計算。如圖7所示,若只申請一塊內(nèi)存,則兩次匹配濾波計算需要等待轉(zhuǎn)置拷貝,而申請兩塊內(nèi)存可以讓匹配濾波計算不間斷執(zhí)行,避免了拷貝等待的時間消耗。因此本次設(shè)計采用乒乓存儲技術(shù),申請兩段空間來節(jié)省這一段時間的消耗。
(4)代碼調(diào)試的優(yōu)化
1)程序應(yīng)減少讀寫內(nèi)存次數(shù),以便有效降低時間,特別是對外部內(nèi)存操作。GPU 更擅長于計算,不擅長讀寫內(nèi)存。因此固定參數(shù)盡可寫在代碼里,而不是從內(nèi)存中讀?。?0]。
2)CUDA 程序預(yù)編譯時,對于整數(shù)和浮點數(shù)的處理不同,如果需使用浮點數(shù),必須將數(shù)值寫成浮點數(shù)。在調(diào)試過程中,可以使用打印或者查看內(nèi)存的方式來驗證結(jié)果的準(zhǔn)確性。
為了驗證并行流水算法能在保證結(jié)果準(zhǔn)確的基礎(chǔ)上對實現(xiàn)實時性的提升,本文構(gòu)造了仿真的測試數(shù)據(jù),測試數(shù)據(jù)的參數(shù)如下表2所示。
如表2 所示,構(gòu)造的測試數(shù)據(jù)是以200 μs 為脈沖周期的,每個脈沖的數(shù)據(jù)含有8192個采樣點的浮點數(shù)。其中,為最大程度接近實際的場景,設(shè)置信噪比為60 dB,每積累128個脈沖進行一次動目標(biāo)檢測算法,后續(xù)稱每128 個脈沖數(shù)據(jù)為一幀。后續(xù)的測試,均以上述的參數(shù)進行數(shù)據(jù)構(gòu)造,由于測試環(huán)境的限制,數(shù)據(jù)的接收不是按照脈沖周期接收的,因此后續(xù)的測試以數(shù)據(jù)文件的格式輸入,測試算法的耗時。
表2 測試數(shù)據(jù)參數(shù)Tab.2 Test data parameters
本文的結(jié)果分析分為兩部分,第一部分為準(zhǔn)確性驗證,通過構(gòu)造回波數(shù)據(jù)來驗證目標(biāo)檢測算法的結(jié)果是否正確。為了保證準(zhǔn)確性驗證結(jié)果的可靠性,本文采用構(gòu)造多種類型的回波進行多次驗證實驗,其中包含無目標(biāo)、單目標(biāo)、多目標(biāo)的三種回波類型,將檢測結(jié)果與構(gòu)造回波的目標(biāo)數(shù)做比對,結(jié)果與仿真數(shù)據(jù)全部一致,因此本文認(rèn)為,該算法的目標(biāo)檢測準(zhǔn)確性可靠。
第二部分為實時性分析,通過測試算法耗時來測試。由于算法的初始化階段和空間分配階段的耗時不是每個目標(biāo)檢測模塊都是需要的,因此,在本次實驗的測試中不予考慮。為了保證實時性驗證的可靠性,本次實時性的測試采用多次實驗取平均的方式來提高實驗結(jié)果的準(zhǔn)確性,對不同類型的回波輸入進行多次分模塊耗時測試和算法整體耗時測試,其結(jié)果如下表3所示。其中,整體算法耗時測試分為流水測試和非流水測試,驗證異構(gòu)加速的性能。
表3 分模塊耗時測試結(jié)果Tab.3 Time-consuming test results
理論上,在非流水加速下,每幀數(shù)據(jù)的耗時等于所有模塊耗時的總和,每幀的耗時可以通過式(9)來計算:
其中,M為每幀數(shù)據(jù)含有的脈沖數(shù),t1為動目標(biāo)檢測的耗時,t0為脈沖壓縮的耗時,t2為恒虛警檢測的耗時,下同。本次實驗中,設(shè)置M為128,將表3的數(shù)據(jù)代入得到非流水模式下理論上的耗時為7932.12 μs。
理論上,在流水加速下,平均耗時受最大耗時模塊約束,當(dāng)測試幀數(shù)為x幀時,每幀的耗時可以通過式(10)來計算:
將表3中的實測模塊耗時數(shù)據(jù)代入式(10)可以得到理論上隨著測試幀數(shù)增大,平均耗時的變化趨勢圖,如下圖8所示。隨著測試幀數(shù)的不斷增加,每幀的平均耗時不斷減少,不斷趨近于最大耗時模塊的值,即5541.12 μs。因此,理論上,流水加速下的目標(biāo)檢測算法相比于非流水加速下的耗時,提高了30.14%。
到達理論值需要無限數(shù)據(jù)量,實際不可能實現(xiàn),由圖8 所示,當(dāng)數(shù)據(jù)量大于100 時,算法平均耗時已經(jīng)得到了明顯的改善。因此,本文取每次100 個回波幀數(shù)據(jù)取平均的實驗方式,多次進行實驗測試,得到如表3所得數(shù)據(jù)。
由表3 可以得到,總體的耗時小于分模塊的耗時總和,這證明了流水設(shè)計的有效性,雖然還是一定程度上會受到數(shù)據(jù)傳輸、數(shù)據(jù)拷貝的影響,但是異構(gòu)加速下的動目標(biāo)檢測的耗時約為5.98 ms,比非流水下提升了27.6%。
由于動目標(biāo)本身特征多樣、處于運動狀態(tài)的特性,導(dǎo)致回波的數(shù)量大并且檢測算法的運算量較大的問題,因此對動目標(biāo)進行實時檢測具有一定的挑戰(zhàn)性。本文利用CPU+GPU 的異構(gòu)加速的方式來提高動目標(biāo)檢測的實時性,采用CPU多線程主導(dǎo)、GPU多核并行運算相結(jié)合的流水算法處理,最大化利用運算資源。本文設(shè)計將動目標(biāo)檢測算法細(xì)分為三個模塊,脈沖壓縮模塊、MTD和CA-CFAR,使用模塊內(nèi)并行加速,模塊間流水執(zhí)行的方式,移植到CPU+GPU 架構(gòu)的服務(wù)器上,充分利用了計算機的運算資源和存儲資源,實現(xiàn)了算法的實時處理,單幀的計算時間約為5.98 ms,比非流水加速下提高了27.6%。
GPU 和CPU 異構(gòu)協(xié)同并行處理,可以更高效利用計算機的資源,設(shè)計時,需考慮不同算法模塊間的數(shù)據(jù)拷貝,盡可能減少拷貝的耗時,同時還需根據(jù)每個功能模塊的耗時來進行流水設(shè)計,否則在某些時刻中會出現(xiàn)空閑狀態(tài)運算,導(dǎo)致效率得不到有效的提升。
后續(xù),將對動目標(biāo)檢測算法增加更多的模塊,如運動補償、目標(biāo)跟蹤等等,通過單模塊的耗時分析,通過將新的模塊加入原有流水或者新增多級流水的方式,在保證動目標(biāo)檢測正確性和實時性的基礎(chǔ)上,增加更為復(fù)雜的功能。