楊 光,賈倩茜,曹 鼎,曹 陽,潘瑞云,左 霖
(中國船舶集團有限公司第八研究院,南京 211153)
根據雷達信號分辨理論,在保證一定信噪比并實現最佳處理的前提下,測距精度和距離分辨力主要取決于信號的頻率結構,它要求信號具有大的帶寬;測速精度和速度分辨力取決于信號的時間結構,它要求信號具有大的時寬。理想的雷達信號應具有大的時寬帶寬乘積:大時寬不僅保證速度分辨,更是提高探測距離的手段;大帶寬則是距離高分辨的前提。單載頻脈沖信號的時寬帶寬積近似為1,即其同時的大時寬和大帶寬不可兼得。為了解決上述矛盾,雷達必須采用具有大時寬帶寬乘積的復雜信號形式。脈沖壓縮處理將發射的寬脈沖信號壓縮成窄脈沖信號,既可以發射寬脈沖以提高平均發射功率和雷達的檢測能力,又能保持窄脈沖的距離分辨率。
脈沖壓縮處理算法分為時域和頻域兩種。警戒搜索雷達的探測重復周期較長,時域和頻域脈沖壓縮處理的運算量都非常大,所以通常采用數據分段的方法進行并行頻域脈沖壓縮來進一步提高算法的處理速度。并行加速通過多核多線程方式實現,主要應用支持跨平臺(Linux/Windows)的OpenMP技術。該技術是可移植多線程應用程序開發的行業標準,在細粒度(循環級別)與粗粒度(函數級別)線程技術上具有很高的效率。OpenMP自動將循環線程化,提高多處理器系統上的應用程序性能。用戶不必處理迭代劃分、數據共享、線程調度及同步等低級別的細節。
本文首先介紹基于重疊相加法和重疊保留法的兩種分段頻域脈沖壓縮算法,然后以多核服務器為硬件平臺,研究基于OpenMP技術的分段頻域脈沖壓縮算法,最后對普通頻域脈壓和兩種分段頻域脈壓算法的時間進行對比測試,結果表明分段頻域脈壓可以大大縮短脈沖壓縮處理的時間。
脈沖壓縮處理在數學上可以描述為兩個序列在時域的線性卷積問題,等價于頻域相乘。兩個離散信號的頻域相乘相當于它們在時域做循環卷積,可由FFT算法實現。設序列x(n)和h(n)均為有限長序列,長度分別為M和N,其線性卷積為y(n),循環卷積為yc(n),快速FFT計算線性卷積的流程如圖1所示。

圖1 FFT計算線性卷積的流程圖
yc(n)是將y(n)以L為周期進行周期延拓后再取主值區間得到的序列。利用循環卷積計算線性卷積的條件為L≥N+M-1。當序列x(n)和h(n)的長度相差不大時,用循環卷積計算線性卷積比直接計算線性卷積的速度要快得多。當應用于雷達脈沖壓縮處理時,序列x(n)和h(n)分別對應于雷達的重復周期和發射脈沖,雷達的重復周期一般為發射脈沖寬度的5~10倍。如果采用上述快速FFT算法直接計算線性卷積,除要求對發射脈沖序列補充很多零點以外,還必須將重復周期對應的序列全部輸入后才能進行FFT計算,增加了算法的處理時間,很難實現實時處理。針對這種情況,可以通過將長序列分段并行計算來減少算法的處理時間,這種分段處理方法有重疊相加法和重疊保留法。
設h(n)的長度為N,x(n)的長度為無限長,取段長M盡量與N接近,則
(1)
式中,xk(n)=x(n)RM(n-kM)。
所以,x(n)和h(n)的卷積為
(2)
式中,yk(n)=xk(n)*h(n),yk(n)是長度分別為M和N的兩個序列的線性卷積,可用FFT算法計算,FFT的長度為L=N+M-1。
分別計算出各段的卷積yk(n),按式(2)將結果相加,即完成基于重疊相加法的快速卷積計算。
設h(n)的長度為N,將序列x(n)分段,每段長為M,然后各段向前多取N-1個采樣點,并在信號前面補N-1個零,這樣每一段xk(n)的長度為L=N+M-1。對每一段xk(n)與h(n)進行循環卷積y′k(n)為
y′k(n)=x(n)?h(n)
(3)
y′k(n)長度為N+M-1,而線性卷積yk(n)=xk(n)*h(n)的長度為L=2N+M-2,大于循環卷積的長度,必然產生混疊現象,即當0≤n≤N-2時,y′k(n)的值混有h((n-m))LRL(n)與xk(m)尾部的卷積值,在N-1≤n≤L-1范圍內h((n-m))LRL(n)=h(n-m),此時y′k(n)與yk(n)相等,將這部分y′k(n)保留下來,最后將各段數據銜接起來,就完成了基于重疊保留法的快速線性卷積計算。
設雷達發射脈沖序列h(n)長度為N,雷達回波信號x(n)長度為P,基于重疊相加法的分段頻域脈壓算法步驟如下:
(1)根據h(n)的長度N計算FFT點數Nfft=2^「log2(N)?,根據x(n)的長度P計算分段數目Nseg=「P/Nfft?;
(2)將h(n)補充零點,補到2·Nfft點,并計算長為2·Nfft點的FFT,得到H(k);
(3)將x(n)補充零點,補到Nseg·Nfft點。將x(n)分為Nseg個長度為Nfft的子段,將每個子段xi(n)補充零點,補2·Nfft點,并計算長為2·Nfft點的FFT,得到Xi(k);
(4)計算Yi(k)=Xi(k)H(k),并求Yi(k)長為2·Nfft點的IFFT,yi(n)=IFFT[Yi(k)];

基于重疊相加法的分段頻域脈壓實現過程如圖2所示。

圖2 基于重疊相加法的分段頻域脈壓實現過程
(1)根據h(n)的長度N計算FFT點數Nfft=2^「log2(N)?,計算分段后xi(n)的長度M=Nfft-N+1,根據分段長度M(要求M≥N)和x(n)的長度P計算分段數目Nseg=「P/M?;
(2)將h(n)補充零點,補到Nfft點,并計算長為Nfft點的FFT,得到H(k);
(3)將x(n)補充零點,補到Nseg·M點。再將x(n)分為Nseg段,每段xi(n)長度為M,然后各段向前多取N-1個樣點,并將這些樣點置零,如此xi(n)的長度為M=(Nfft-N+1)+N-1=Nfft點。計算長為Nfft點的FFT,得到Xi(k);
(4)計算Yi(k)=Xi(k)H(k),并求Yi(k)長為Nfft點的IFFT,yi(n)=IFFT[Yi(k)];
(5)將各段yi(n)中第N至Nfft點的數據保留和拼接,得到脈壓結果,即y((i-1)M+1:iM)=yi(N:Nfft),i=1,2,…,Nseg。
基于重疊保留法的分段頻域脈壓實現過程如圖3所示。

圖3 基于重疊保留法的分段頻域脈壓實現過程
硬件平臺為主頻2.6 GHz、96核的服務器。模擬脈沖寬度為400 μs、脈沖重復周期為2 500 μs、采樣率為6.25 MHz的線性調頻信號,在服務器中通過讀文件的形式將模擬信號輸入至服務器內存。基于OpenMP的頻域脈壓實現算法的功能框圖如圖4所示。

圖4 基于OpenMP的頻域脈壓實現算法的功能框圖
根據信號的脈沖寬度和重復周期數分別計算出重疊相加法(以下簡稱“方法一”)和重疊保留算法(以下簡稱“方法二”)中FFT的點數、信號的分段個數。通過信號補零處理構造輸入信號并分段,然后開辟并行區域,對各段數據并行頻域脈壓處理,最后將每段數據進行保留或相加得到分段頻域脈壓結果。兩種算法的頻域脈壓結果如圖5所示??梢钥闯?,方法一和方法二的處理結果與普通頻域脈壓結果相同,從而驗證了兩種分段頻域脈壓算法的正確性。

圖5 基于OpenMP的頻域分段脈壓仿真
服務器的運行結果如圖6所示。根據算法的分段數,服務器開辟相應個數的線程執行并行計算,通過1 000次仿真實驗測試算法的運行時間,如表 1所示:方法一的運行時間為158 μs,方法二的運行時間為75.8 μs,兩種算法的時間效率較傳統普通頻域脈壓方法分別提高了2.76倍和5.76倍。

圖6 服務器運行結果

表1 算法運行時間統計
方法一要求分段后的序列長度M大于等于發射脈沖序列長度N,否則對發射脈沖進行FFT處理時,將會出現“欠采樣”的現象,所以方法一分段后序列的最小長度為N,FFT處理的點數最小值為2N。方法二中分段后的序列“重疊保留”了M個采樣點,不會出現上述“欠采樣”現象,所以方法二分段FFT處理的點數最小值為M+N-1。
由于服務器中的算法庫通常只支持基2的FFT算法,對于給定的脈沖長度N,可能會出現方法一處理的FFT點數為方法二兩倍的情況,例如2.3節中仿真輸入的脈沖寬度和重復周期分別為400 μs、2 500 μs,采用方法一和方法二處理的FFT的點數分別為8 192和4 096。所以對于任意給定的脈沖長度N,在服務器線程資源充足的情況下,為了避免出現方法一FFT計算點數翻倍的情況,通常選擇方法二執行分段頻域脈壓處理。
雷達信號處理中脈沖壓縮處理等價于兩個序列的線性卷積問題。本文首先推導了循環卷積計算線性卷積的條件,然后介紹了長序列卷積加速的兩種分段處理算法,隨后給出了兩種算法在工程應用中的實現過程,最后在服務器中采用OpenMP技術對算法進行實現,并統計了算法的時間。研究表明,在服務器線程數量充足的情況下,根據不同的處理方法和分段數目,基于OpenMP的分段頻域脈壓算法可將傳統的頻域脈壓算法的時間效率提高2~5倍,具有很高的工程應用價值。