一種基于cuda的多體制信號頻率快速捕獲實(shí)現(xiàn)方法
【專利摘要】一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特點(diǎn)在于:基于高性能PC,利用CUDA架構(gòu),以并行的方式實(shí)現(xiàn)多體制信號頻率的快速捕獲;實(shí)現(xiàn)步驟包括:設(shè)置多普勒及多普勒變化率分段,確定各GPU內(nèi)核函數(shù)的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,將信號數(shù)據(jù)讀入GPU卡全局存儲空間,啟動下變頻和積分模塊,進(jìn)行并行FFT運(yùn)算,以并行歸約方式查找最大值譜線及對應(yīng)的多普勒變化率分段和多普勒分段,計(jì)算載波頻偏和多普勒變化率估值完成捕獲。本發(fā)明使信號頻率快速捕獲算法符合CUDA架構(gòu)和GPU工作特點(diǎn),能夠充分發(fā)揮GPU并行計(jì)算能力,同時(shí)適合多種體制的信號,有效提高捕獲速度且易于實(shí)現(xiàn)。
【專利說明】—種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種信號頻率快速捕獲實(shí)現(xiàn)方法,特別是一種基于CUDA的多體制信號頻率快速捕獲方法。
【背景技術(shù)】
[0002]信號的快速捕獲是測控通信的關(guān)鍵技術(shù)之一,隨著深空探測技術(shù)的發(fā)展,信號捕獲技術(shù)的難度和復(fù)雜度大大增加,當(dāng)信號極其微弱且多普勒動態(tài)范圍大、變化率高時(shí),信號捕獲一般采用二維FFT捕獲方法,即首先對多普勒分段,再在每個(gè)多普勒頻點(diǎn)對多普勒變化率分段,并在每個(gè)分段上進(jìn)行相關(guān)、積分和FFT運(yùn)算,查找最大譜線,這使得信號捕獲過程的運(yùn)算量呈級數(shù)增長?,F(xiàn)有的研究中一般采用高性能FPGA來實(shí)現(xiàn)這種二維FFT信號頻率快速捕獲算法,這種方式需要開發(fā)專門的硬件板卡,實(shí)現(xiàn)復(fù)雜,且FPGA的資源有限,一般一次只能實(shí)現(xiàn)一種體制信號的捕獲,通用性差、可擴(kuò)展性差。
[0003]近年來,隨著商用高性能計(jì)算機(jī)系統(tǒng)的普及,基于現(xiàn)代高性能PC或服務(wù)器平臺的信號處理技術(shù)成為新的研究熱點(diǎn),并且,統(tǒng)一計(jì)算設(shè)備架構(gòu)(Computer Unified DeviceArchitecture, CUDA)開啟了使用GPU強(qiáng)大計(jì)算能力做通用計(jì)算的大門,GPU具有強(qiáng)大的并行計(jì)算能力,如果能夠通過CUDA架構(gòu)在GPU上實(shí)現(xiàn)復(fù)雜的二維FFT信號快速捕獲算法,就能夠大大提高信號捕獲的速度,同時(shí)適應(yīng)多種體制,實(shí)現(xiàn)手段簡單,可擴(kuò)展性強(qiáng)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的不足之處,提供了種基于CUDA的多體制信號頻率快速捕獲方法,以高性能PC為平臺,基于CUDA架構(gòu),以并行的方式實(shí)現(xiàn)多體制信號頻率的快速捕獲;本發(fā)明使信號頻率快速捕獲算法符合CUDA架構(gòu)和GPU工作特點(diǎn),能夠充分發(fā)揮GPU并行計(jì)算能力,同時(shí)適合多種體制的信號,有效提高了捕獲速度且易于實(shí)現(xiàn)。
[0005]本發(fā)明的技術(shù)解決方案是:一種基于CUDA的多體制信號頻率快速捕獲方法,步驟如下:
[0006](I) CPU通過CUDA架構(gòu)選擇GPU協(xié)處理器并初始化CPU和GPU的運(yùn)行環(huán)境,同時(shí)對運(yùn)行參數(shù)進(jìn)行初始化設(shè)置,所述運(yùn)行參數(shù)包括:信號數(shù)據(jù)文件路徑、信號碼速率、信號采樣頻率、信號載波頻率初始值、信號多普勒范圍、信號多普勒變化率范圍、信號的FFT分析點(diǎn)數(shù)和信號體制;
[0007](2) CPU根據(jù)步驟(I)中設(shè)置的信號數(shù)據(jù)文件路徑將信號數(shù)據(jù)從數(shù)據(jù)文件讀入CPU內(nèi)存中;
[0008](3) CPU根據(jù)步驟(I)中設(shè)置的信號碼速率確定信號的FFT采樣頻率和信號的FFT分析帶寬,然后根據(jù)信號的FFT采樣頻率計(jì)算對步驟(I)中設(shè)置的信號多普勒范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒分段數(shù),根據(jù)信號的FFT分析帶寬計(jì)算對步驟(I)中設(shè)置的信號多普勒變化率范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒變化率分段數(shù),最后根據(jù)步驟(I)中設(shè)置的信號采樣頻率和本步驟獲得的信號FFT采樣頻率計(jì)算信號的積分長度;
[0009](4) CPU分配GPU全局存儲空間,并初始化已分配的GPU全局存儲空間;
[0010](5)CPU根據(jù)步驟(3)中獲得的信號的積分長度設(shè)置GPU中在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目;
[0011](6)CPU根據(jù)步驟(3)中獲得的多普勒變化率分段數(shù)和步驟(I)中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置并行一維FFT運(yùn)算的參數(shù),所述并行一維FFT運(yùn)算的參數(shù)包括并行的一維FFT運(yùn)算的個(gè)數(shù)和每個(gè)一維FFT運(yùn)算的FFT分析點(diǎn)數(shù);
[0012](7)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和步驟(I)中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組,對所有多普勒分段進(jìn)行二維最大值查找的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù);
[0013](S)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和多普勒分段數(shù)設(shè)置GPU對步驟(7)中所述的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù)的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組;
[0014](9) CPU根據(jù)步驟(3)獲得的多普勒分段數(shù)設(shè)置GPU對步驟⑶所述的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目;
[0015](1)CPU將步驟⑵中讀入到CPU內(nèi)存中的信號數(shù)據(jù)從CPU內(nèi)存拷貝至步驟(4)確定的GPU全局存儲空間中;
[0016](Il)GPU利用步驟(5)中確定的在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以并行的方式完成對步驟(10)讀入到GPU全局存儲空間中的信號數(shù)據(jù)的下變頻處理,然后以歸約算法進(jìn)行并行求和,并對并行求和后的結(jié)果進(jìn)行鑒相處理,將鑒相處理結(jié)果寫回步驟(4)確定的GPU全局存儲空間中,所述每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù);
[0017](12)GPU利用步驟(6)中確定的并行一維FFT運(yùn)算的參數(shù),對步驟(11)中的處理結(jié)果進(jìn)行并行一維FFT運(yùn)算,并將結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述并行一維FFT運(yùn)算結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù);
[0018](13)GPU根據(jù)步驟(7)中確定的對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(12)的并行一維FFT運(yùn)算結(jié)果分別進(jìn)行取模獲得FFT模值,并分別對FFT模值以歸約算法并行查找最大值和最大值對應(yīng)的FFT點(diǎn)號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組;
[0019](14)GPU循環(huán)進(jìn)行步驟(11)至步驟(13),循環(huán)次數(shù)為多普勒分段數(shù),獲得對所有多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果,所述結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù);
[0020](15)GPU根據(jù)步驟(8)中確定的對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(14)獲得的二維數(shù)組分別以歸約算法并行查找FFT模值在每一個(gè)多普勒分段下所有多普勒變化率范圍內(nèi)的最大值和對應(yīng)的多普勒變化率分段號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組;
[0021](16)GPU根據(jù)步驟(9)中確定的對步驟(15)獲得的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程并行的方式完成對步驟(15)獲得的一維數(shù)組以歸約算法并行查找FFT模值在所有多普勒分段中的最大值和對應(yīng)的最大多普勒分段號,并將結(jié)果寫回步驟(4)確定的GPU全局存儲空間;
[0022](17)CPU將步驟(16)中獲得的FFT模值在所有多普勒分段中的最大值及其對應(yīng)的多普勒分段號、所述FFT模值在所有多普勒分段中的最大值在步驟(14)獲得的對應(yīng)的FFT點(diǎn)號和在步驟(15)獲得的對應(yīng)的多普勒變化率分段號從GPU全局存儲空間中拷貝回CPU內(nèi)存,并計(jì)算載波頻偏和多普勒變化率。
[0023]所述信號包括BPSK信號和標(biāo)準(zhǔn)TT&C信號。
[0024]所述步驟(3)中,CPU根據(jù)步驟⑴中設(shè)置的信號碼速率確定信號的FFT采樣頻率和信號的FFT分析帶寬,然后根據(jù)信號的FFT采樣頻率計(jì)算對步驟(I)中設(shè)置的信號多普勒范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒分段數(shù),根據(jù)信號的FFT分析帶寬計(jì)算對步驟
(I)中設(shè)置的信號多普勒變化率范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒變化率分段數(shù),最后根據(jù)步驟(I)中設(shè)置的信號采樣頻率和本步驟獲得的信號FFT采樣頻率計(jì)算信號的積分長度,具體為:
[0025]當(dāng)信號體制為二相編碼體制,即BPSK時(shí):
[0026]Fs = CodeRate ;
[0027]RBff = Fs/FFTSize ;
[0028]PerDoppler = Fs/4 ;
[0029]PerDopplerRate = 3 X RBff X RBff ;
[0030]Seg = 2 X Doppler/PerDoppler+1 ;
[0031]Segl = 2 X DopplerRate/PerDoppleRate+1 ;
[0032]SumSize = SampleRate/Fs+0.5 ;
[0033]當(dāng)信號體制為統(tǒng)一測控體制,即標(biāo)準(zhǔn)TT&C時(shí),RBff根據(jù)信號的情況和經(jīng)驗(yàn)選取:
[0034]Fs = RBffXFFTSize ;
[0035]PerDoppler = Fs/4 ;
[0036]PerDopplerRate = 3 X RBff X RBff ;
[0037]Seg = 2 X Doppler/PerDoppler+1 ;
[0038]Segl = 2 X DopplerRate/PerDoppleRate+1 ;
[0039]SumSize = SampleRate/Fs+0.5 ;
[0040]式中,CodeRate為信號碼速率,F(xiàn)s為FFT采樣頻率,RBff為信號的FFT分析帶寬,Doppler為信號多普勒范圍,DopplerRate為多普勒變化率范圍,PerDoppler為多普勒范圍分段的步進(jìn)值,Seg為多普勒分段數(shù),PerDopplerRate為多普勒變化率范圍分段的步進(jìn)值,Segl為多普勒變化率分段數(shù),F(xiàn)FTSize為信號的FFT分析點(diǎn)數(shù),SumSize為積分長度,SampleRate為信號采樣頻率。
[0041]所述步驟(5)中,CPU根據(jù)步驟(3)中獲得的信號的積分長度設(shè)置GPU中在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0042](I)每個(gè)線程塊的線程數(shù)目由信號數(shù)據(jù)的積分長度決定,當(dāng)積分長度小于等于1024時(shí),線程數(shù)目等于積分長度,當(dāng)積分長度大于1024時(shí),線程數(shù)目等于1024 ;
[0043](2)令線程塊數(shù)目為(X,y,z),其中X為多普勒變化率的分段數(shù),y為FFT運(yùn)算的分析點(diǎn)數(shù),z值為I。
[0044]所述步驟(7)中,CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和步驟⑴中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0045](I)每個(gè)線程塊中的線程數(shù)目由四分之一 FFT分析點(diǎn)數(shù)的值決定,當(dāng)四分之一 FFT分析點(diǎn)數(shù)的值小于等于1024時(shí),線程數(shù)目等于四分之一FFT分析點(diǎn)數(shù)的值,當(dāng)四分之一FFT分析點(diǎn)數(shù)的值大于1024時(shí),線程數(shù)目等于1024 ;
[0046](2)線程塊數(shù)目等于多普勒變化率的分段數(shù)。
[0047]所述步驟(8)中,CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和多普勒分段數(shù)設(shè)置GPU對步驟(7)中所述的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù)的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0048](I)每個(gè)線程塊中的線程數(shù)目由多普勒變化率分段數(shù)決定,當(dāng)多普勒變化率分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒變化率分段數(shù),當(dāng)多普勒變化率分段數(shù)大于1024時(shí),線程數(shù)目等于1024;
[0049](2)線程塊數(shù)目等于多普勒的分段數(shù)。
[0050]所述步驟(9)中,CPU根據(jù)步驟(3)獲得的多普勒分段數(shù)設(shè)置GPU對步驟(8)所述的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0051](I)每個(gè)線程塊的線程數(shù)目由多普勒分段數(shù)決定,當(dāng)多普勒分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒分段數(shù),當(dāng)多普勒分段數(shù)大于1024時(shí),線程數(shù)目等于1024 ;
[0052](2)線程塊數(shù)目等于I。
[0053]所述步驟(17)中計(jì)算載波頻偏和多普勒變化率,具體為:
[0054]載波頻偏由公式:
[0055]EstCarrFreq = (MaxDopplerID-Seg/2)XPerDoppIer+MaxFFTIDX RBff/2 ;
[0056]給出,式中,MaxDopplerID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒分段號,MaxFFTID為FFT模值在所有多普勒分段中最大值對應(yīng)的FFT點(diǎn)號;
[0057]多普勒變化率由公式:
[0058]EstDopplerRate = (MaxDopplerRateID-Segl/2)XPerDopplerRate
[0059]給出,式中MaxDopplerRateID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒變化率分段號。
[0060]本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:
[0061](I)易于實(shí)現(xiàn):基于FPGA的信號頻率快速捕獲方法需要開發(fā)專門的硬件板卡和固件程序,實(shí)現(xiàn)難度大,實(shí)現(xiàn)周期長,且對硬件的調(diào)試工具有限,手段有限,而本發(fā)明基于CPU+GPU的開發(fā)平臺易于獲取,且利用CUDA架構(gòu),可以在C語言環(huán)境下完成對GPU的調(diào)用,代碼編寫容易,調(diào)試過程簡單。
[0062](2)運(yùn)行速度快:本發(fā)明將信號頻率快速捕獲算法拆分為多個(gè)GPU處理過程,每個(gè)處理過程可以通過線程塊和線程兩層并行進(jìn)行加速,并且本發(fā)明對信號快速捕獲算法的每個(gè)處理過程進(jìn)行了合理的并行優(yōu)化設(shè)計(jì),給出了每個(gè)處理過程線程塊數(shù)目和線程數(shù)目的確定方法,充分發(fā)揮了 GPU的并行計(jì)算能力,保證了本發(fā)明方法的運(yùn)行速度。
[0063](3)適用范圍廣,基于CPU+GPU的開發(fā)平臺資源充足,本發(fā)明通過對信號頻率快速捕獲算法的處理過程進(jìn)行結(jié)構(gòu)優(yōu)化,將BPSK體制和標(biāo)準(zhǔn)TT&C體制信號的頻率快速捕獲過程進(jìn)行了融合,并且本發(fā)明針對此兩種體制分別給出了運(yùn)行參數(shù)的確定方法,使本發(fā)明方法能夠同時(shí)滿足兩種體制信號頻率快速捕獲的要求。
[0064](4)可擴(kuò)展性強(qiáng):基于FPGA的信號頻率快速捕獲方法因?yàn)槭艿接布陨硖攸c(diǎn)的約束,資源受到限制,當(dāng)信號的多普勒范圍和多普勒變化率范圍增大,多普勒分段數(shù)和多普勒變化率分段數(shù)增多,信號的FFT分析點(diǎn)數(shù)增大時(shí)都可能導(dǎo)致FPGA的資源不夠,從而需要更換FPGA器件并且重新設(shè)計(jì)硬件板卡,可擴(kuò)展性差,而本發(fā)明采用的CPU+GPU的開發(fā)平臺和CUDA架構(gòu)均具有很強(qiáng)的可擴(kuò)展性,當(dāng)信號的多普勒范圍和多普勒變化率范圍增大,多普勒分段數(shù)和多普勒變化率分段數(shù)增多,信號的FFT分析點(diǎn)數(shù)增大時(shí)只需要根據(jù)本發(fā)明中給出的各處理過程線程塊數(shù)目和線程數(shù)目的確定方法重新確定各處理過程的線程塊數(shù)目和線程數(shù)目即可。
【專利附圖】
【附圖說明】
[0065]圖1是本發(fā)明采用的CUDA架構(gòu)的示意圖;
[0066]圖2是本發(fā)明流程示意圖。
【具體實(shí)施方式】
[0067]本發(fā)明采用自動運(yùn)行的方式實(shí)施。實(shí)施例使用CUDA架構(gòu)提供的擴(kuò)展C語言作為開發(fā)工具。
[0068]CUDA架構(gòu)示意如圖1所示,實(shí)施例使用高性能PC和新一代基于Ifepler架構(gòu)的GPU協(xié)處理器實(shí)施和運(yùn)行。CUDA架構(gòu)中,高性能PC的CPU與GPU協(xié)同工作,CPU負(fù)責(zé)進(jìn)行邏輯性強(qiáng)的事務(wù)處理和串行計(jì)算,包括啟動CUDA并行處理過程前進(jìn)行數(shù)據(jù)準(zhǔn)備和設(shè)備初始化的工作,以及在各CUDA并行處理過程間進(jìn)行串行計(jì)算,GPU則專注于執(zhí)行高度線程化的并行處理任務(wù),運(yùn)行在GPU上的CUDA并行處理過程稱為kernel (內(nèi)核處理過程),一個(gè)kernel存在兩個(gè)層次的并行,即Grid (線程網(wǎng)格)中的block (線程塊)間并行和block (線程塊)中的thread (線程)間并行。
[0069]實(shí)施例中將信號碼速率設(shè)為CodeRate、信號采樣率設(shè)為SampleRate、信號載波頻率初始值設(shè)為CarrFreq、信號多普勒范圍設(shè)為Doppler、信號多普勒變化率范圍設(shè)為DopplerRate、信號的FFT分析點(diǎn)數(shù)設(shè)為FFTSize、信號的FFT采樣頻率設(shè)為Fs、信號的FFT分析帶寬設(shè)為RBW、多普勒范圍分段的步進(jìn)值設(shè)為PerDoppler、多普勒分段數(shù)設(shè)為Seg、多普勒變化率范圍分段的步進(jìn)值設(shè)為PerDopplerRate、多普勒變化率分段數(shù)設(shè)為Segl、信號的積分長度設(shè)為SumSize、最大譜線對應(yīng)的多普勒分段號設(shè)為MaxDopplerlD,一次FFT分析所有點(diǎn)中最大值對應(yīng)的FFT點(diǎn)號設(shè)為MaxFFTID、最大譜線對應(yīng)的多普勒變化率分段號設(shè)為MaxDoppIerRateIDο
[0070]如圖2所示,實(shí)施例包括以下步驟:
[0071](I) CPU通過調(diào)用CUDA的API函數(shù)cudaSetDevice來選擇使用O號GPU協(xié)處理器并初始化運(yùn)行環(huán)境,同時(shí)從配置文件讀取信號數(shù)據(jù)文件路徑、信號碼速率(CodeRate)、信號采樣率(SampleRate)、信號載波頻率初始值(CarrFreq)、信號多普勒范圍(Doppler)、信號多普勒變化率范圍(DopplerRate)、信號的FFT分析點(diǎn)數(shù)(FFTSize)、信號體制等運(yùn)行參數(shù);
[0072](2) CPU根據(jù)步驟(I)中設(shè)置的信號數(shù)據(jù)文件路徑將信號數(shù)據(jù)從數(shù)據(jù)文件讀入CPU內(nèi)存中;
[0073](3) CPU根據(jù)步驟(I)中設(shè)置的信號碼速率(CodeRate)確定信號的FFT采樣頻率(Fs)和信號的FFT分析帶寬(RBW),然后根據(jù)信號的FFT采樣頻率(Fs)計(jì)算對步驟(I)中設(shè)置的信號多普勒范圍(Doppler)進(jìn)行分段的步進(jìn)值(PerDoppler),進(jìn)而確定多普勒分段數(shù)(Seg),根據(jù)信號的FFT分析帶寬(RBW)計(jì)算對步驟(I)中設(shè)置的信號多普勒變化率范圍(DopplerRate)進(jìn)行分段的步進(jìn)值(PerDopplerRate),進(jìn)而確定多普勒變化率分段數(shù)(Segl),最后根據(jù)步驟(I)中設(shè)置的信號采樣頻率(SampleRate)和本步驟獲得的信號FFT采樣頻率(Fs)計(jì)算信號的積分長度(SumSize),具體為:
[0074]當(dāng)信號體制為二相編碼體制(BPSK)時(shí):
[0075]Fs = CodeRate ;
[0076]RBW = Fs/FFTSize ;
[0077]PerDoppler = Fs/4 ;
[0078]PerDopplerRate = 3 X RBWX RBW ;
[0079]Seg = 2 X Doppler/PerDoppler+1 ;
[0080]Segl = 2 X DopplerRate/PerDoppleRate+1 ;
[0081]SumSize = SampleRate/Fs+0.5 ;
[0082]當(dāng)信號體制為統(tǒng)一測控體制(標(biāo)準(zhǔn)TT&C)時(shí),RBW根據(jù)信號的情況和經(jīng)驗(yàn)選取,本實(shí)施例中RBW選取為10:
[0083]Fs = RBWXFFTSize ;
[0084]PerDoppler = Fs/4 ;
[0085]PerDopplerRate = 3 X RBWX RBW ;
[0086]Seg = 2 X Doppler/PerDoppler+1 ;
[0087]Segl = 2 X DopplerRate/PerDoppleRate+1 ;
[0088]SumSize = SampleRate/Fs+0.5 ;
[0089](4)CPU根據(jù)(3)的計(jì)算結(jié)果,分配GPU全局存儲空間,并初始化已分配的GPU全局存儲空間,具體為:
[0090]首先CPU調(diào)用CUDA的API函數(shù)cudaMalloc在GPU全局存儲空間中分配存儲空間,用以存儲步驟(10)將會用到的從CPU內(nèi)存中拷貝至GPU全局存儲空間的信號數(shù)據(jù),該存儲空間的大小等于信號的積分長度(SumSize)和信號的FFT分析點(diǎn)數(shù)(FFTSize)的乘積,然后調(diào)用CUDA的API函數(shù)cudaMemset對已分配好的GPU全局存儲空間進(jìn)行初始化;
[0091]其二 CPU調(diào)用CUDA的API函數(shù)cudaMalloc在GPU全局存儲空間中分配存儲空間,用以存儲步驟(11)的處理結(jié)果,該存儲空間的大小等于信號的多普勒變化率的分段數(shù)(Segl)與信號的FFT分析點(diǎn)數(shù)(FFTSize)的乘積,然后調(diào)用CUDA的API函數(shù)cudaMemset對已分配好的GPU全局存儲空間進(jìn)行初始化;
[0092]其三CPU調(diào)用CUDA的API函數(shù)cudaMalloc在GPU全局存儲空間中分配存儲空間,用以存儲步驟(13)的處理結(jié)果,該存儲空間的大小等于信號的多普勒的分段數(shù)(Seg)與信號的多普勒變化率的分段數(shù)(Segl)的乘積,然后調(diào)用CUDA的API函數(shù)cudaMemset對已分配好的GPU全局存儲空間進(jìn)行初始化;
[0093]其四CPU調(diào)用CUDA的API函數(shù)cudaMalloc在GPU全局存儲空間中分配存儲空間,用以存儲步驟(15)的處理結(jié)果,該存儲空間的大小等于信號的多普勒的分段數(shù)(Seg),然后調(diào)用CUDA的API函數(shù)cudaMemset對已分配好的GPU全局存儲空間進(jìn)行初始化;
[0094]最后CPU調(diào)用CUDA的API函數(shù)cudaMalloc在GPU全局存儲空間中分配存儲空間,用以存儲步驟(16)的處理結(jié)果,該存儲空間為一個(gè)包含4個(gè)單精度浮點(diǎn)數(shù)的結(jié)構(gòu)體,然后調(diào)用CUDA的API函數(shù)cudaMemset對已分配好的GPU全局存儲空間進(jìn)行初始化;
[0095](5)CPU根據(jù)步驟(3)中獲得的信號的積分長度設(shè)置GPU中在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0096]每個(gè)線程塊的線程數(shù)目由信號數(shù)據(jù)的積分長度決定,當(dāng)積分長度小于等于1024時(shí),線程數(shù)目等于積分長度,當(dāng)積分長度大于1024時(shí),線程數(shù)目等于1024 ;
[0097]令線程塊數(shù)目為(X,y, z),其中X為多普勒變化率的分段數(shù),y為FFT運(yùn)算的分析點(diǎn)數(shù),z值為I ;
[0098](6) CPU根據(jù)步驟(3)中獲得的多普勒變化率分段數(shù)和步驟(I)中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置并行一維FFT運(yùn)算的參數(shù),所述并行一維FFT運(yùn)算的參數(shù)包括并行的一維FFT運(yùn)算的個(gè)數(shù)和每個(gè)一維FFT運(yùn)算的FFT分析點(diǎn)數(shù),本實(shí)施例中具體為:
[0099]當(dāng)信號體制為二相編碼體制(BPSK)時(shí):
[0100]并行的一維FFT運(yùn)算的個(gè)數(shù)等于多普勒變化率分段數(shù);
[0101]每個(gè)一維FFT運(yùn)算的FFT分析點(diǎn)數(shù)等于4096 ;
[0102]當(dāng)信號體制為統(tǒng)一測控體制(標(biāo)準(zhǔn)TT&C)時(shí):
[0103]并行的一維FFT運(yùn)算的個(gè)數(shù)等于多普勒變化率分段數(shù);
[0104]每個(gè)一維FFT運(yùn)算的FFT分析點(diǎn)數(shù)等于16384 ;
[0105](7)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和步驟⑴中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0106]每個(gè)線程塊中的線程數(shù)目由四分之一 FFT分析點(diǎn)數(shù)的值決定,當(dāng)四分之一 FFT分析點(diǎn)數(shù)的值小于等于1024時(shí),線程數(shù)目等于四分之一 FFT分析點(diǎn)數(shù)的值,當(dāng)四分之一 FFT分析點(diǎn)數(shù)的值大于1024時(shí),線程數(shù)目等于1024 ;
[0107]線程塊數(shù)目等于多普勒變化率的分段數(shù);
[0108]本步驟所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組,對所有多普勒分段進(jìn)行本步驟所述二維最大值查找的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù);
[0109](S)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和多普勒分段數(shù)設(shè)置GPU對步驟(7)中所述的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù)的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0110]每個(gè)線程塊中的線程數(shù)目由多普勒變化率分段數(shù)決定,當(dāng)多普勒變化率分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒變化率分段數(shù),當(dāng)多普勒變化率分段數(shù)大于1024時(shí),線程數(shù)目等于1024;
[0111]線程塊數(shù)目等于多普勒的分段數(shù);
[0112]本步驟所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組;
[0113](9)CPU根據(jù)步驟(3)獲得的多普勒分段數(shù)設(shè)置GPU對步驟⑶所述的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為:
[0114]每個(gè)線程塊的線程數(shù)目由多普勒分段數(shù)決定,當(dāng)多普勒分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒分段數(shù),當(dāng)多普勒分段數(shù)大于1024時(shí),線程數(shù)目等于1024 ;
[0115]線程塊數(shù)目等于I;
[0116](1)CPU將步驟⑵中讀入到CPU內(nèi)存中的信號數(shù)據(jù)從CPU內(nèi)存拷貝至步驟(4)確定的GPU全局存儲空間中;
[0117]具體實(shí)施時(shí),CPU調(diào)用CUDA的API函數(shù)cudaMemcpy完成;
[0118](Il)GPU利用步驟(5)中確定的在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以并行的方式完成對步驟(10)讀入到GPU全局存儲空間中的信號數(shù)據(jù)的下變頻處理,然后以歸約算法進(jìn)行并行求和,并對并行求和后的結(jié)果進(jìn)行鑒相處理,將鑒相處理結(jié)果寫回步驟(4)確定的GPU全局存儲空間中,所述每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù);
[0119]具體實(shí)施時(shí)當(dāng)步驟(5)確定的GPU中在每個(gè)多普勒分段下所有多普勒變化率分段下對信號進(jìn)行下變頻和積分處理的每個(gè)線程塊中的線程數(shù)目等于步驟(3)計(jì)算得到的信號的積分長度時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)一個(gè)信號采樣點(diǎn)的下變頻過程和用歸約算法實(shí)現(xiàn)的積分過程,當(dāng)每個(gè)線程塊中的線程數(shù)目小于步驟(3)計(jì)算得到的信號的積分長度時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)多個(gè)采樣點(diǎn)的下變頻過程和用歸約算法實(shí)現(xiàn)的積分過程;
[0120]具體實(shí)施時(shí),當(dāng)信號體制為二相編碼體制(BPSK)時(shí),下變頻和積分內(nèi)核函數(shù)中保留鑒相處理過程,當(dāng)信號體制為統(tǒng)一測控體制(標(biāo)準(zhǔn)TT&C)時(shí),下變頻和積分內(nèi)核函數(shù)中屏蔽鑒相處理過程。
[0121](12)GPU利用步驟(6)中確定的并行一維FFT運(yùn)算的參數(shù),對步驟(11)中的處理結(jié)果進(jìn)行并行一維FFT運(yùn)算,并將結(jié)果寫回寫回步驟(4)確定的GPU全局存儲空間,所述并行一維FFT運(yùn)算結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù);
[0122]具體實(shí)施時(shí)CPU使用GPU廠商N(yùn)VIDIA提供的基于GPU的通用函數(shù)庫CUFFT,首先根據(jù)步驟(6)中確定的并行一維FFT運(yùn)算的參數(shù),調(diào)用CUFFT函數(shù)庫中的cufftPlanld函數(shù)創(chuàng)建一個(gè)一維CUFFT句柄,然后調(diào)用CUFFT函數(shù)庫中的cufTtExecC2C函數(shù)對步驟(11)的結(jié)果啟動GPU進(jìn)行并行一批多個(gè)一維的FFT運(yùn)算,運(yùn)算結(jié)果寫回存放步驟(11)結(jié)果的同一片GPU全局存儲空間;
[0123](13)GPU根據(jù)步驟(7)中確定的對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(12)的并行一維FFT運(yùn)算結(jié)果分別進(jìn)行取模獲得FFT模值,并分別對FFT模值以歸約算法并行查找最大值和最大值對應(yīng)的FFT點(diǎn)號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組;
[0124]具體實(shí)施時(shí)當(dāng)步驟(7)確定的GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的每個(gè)線程塊中的線程數(shù)目等于四分之一 FFT分析點(diǎn)數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)一個(gè)FFT運(yùn)算結(jié)果的取模和歸約求最大值過程,當(dāng)每個(gè)線程塊中的線程數(shù)目小于四分之一 FFT分析點(diǎn)數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)多個(gè)FFT運(yùn)算結(jié)果的取模和歸約求最大值過程;
[0125](14)GPU循環(huán)進(jìn)行步驟(11)至步驟(13),循環(huán)次數(shù)為多普勒分段數(shù),獲得對所有多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果,所述結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù);
[0126](15)GPU根據(jù)步驟(8)中確定的對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(14)獲得的二維數(shù)組分別以歸約算法并行查找FFT模值在每一個(gè)多普勒分段下所有多普勒變化率范圍內(nèi)的最大值和對應(yīng)的多普勒變化率分段號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組;
[0127]具體實(shí)施時(shí)當(dāng)步驟(8)確定的對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的每個(gè)線程塊中的線程數(shù)目等于多普勒變化率的分段數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)一個(gè)多普勒變化率分段FFT模值的歸約求最大值過程,當(dāng)每個(gè)線程塊中的線程數(shù)目小于多普勒變化率的分段數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)多個(gè)多普勒變化率分段FFT模值的歸約求最大值過程;
[0128](16)GPU根據(jù)步驟(9)中確定的對步驟(15)獲得的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程并行的方式完成對步驟(15)獲得的一維數(shù)組以歸約算法并行查找FFT模值在所有多普勒分段中的最大值和對應(yīng)的最大多普勒分段號,并將結(jié)果寫回GPU全局存儲空間;
[0129]具體實(shí)施時(shí)當(dāng)步驟(9)確定的對步驟(15)獲得的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的每個(gè)線程塊中的線程數(shù)目等于多普勒分段數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)一個(gè)多普勒分段最大譜線值的歸約求最大值過程,當(dāng)每個(gè)線程塊中的線程數(shù)目小于多普勒分段數(shù)時(shí),每個(gè)線程塊中的每一個(gè)線程對應(yīng)多個(gè)多普勒分段最大譜線值的歸約求最大值過程;
[0130](17)CPU將步驟(16)中獲得的FFT模值在所有多普勒分段中的最大值及其對應(yīng)的多普勒分段號、所述FFT模值在所有多普勒分段中的最大值在步驟(14)獲得的對應(yīng)的FFT點(diǎn)號和在步驟(15)獲得的對應(yīng)的多普勒變化率分段號從GPU全局存儲空間中拷貝回CPU內(nèi)存,并計(jì)算載波頻偏和多普勒變化率,具體為:
[0131]載波頻偏由公式:
[0132]EstCarrFreq = (MaxDopplerID-Seg/2)XPerDoppIer+MaxFFTIDX RBff/2 ;
[0133]給出,式中,MaxDopplerID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒分段號,MaxFFTID為FFT模值在所有多普勒分段中最大值對應(yīng)的FFT點(diǎn)號;
[0134]多普勒變化率由公式:
[0135]EstDopplerRate = (MaxDopplerRateID-Segl/2)XPerDopplerRate
[0136]給出,式中MaxDopplerRateID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒變化率分段號。
[0137]信號的快速捕獲是測控通信的關(guān)鍵技術(shù)之一,隨著深空探測技術(shù)的發(fā)展,信號捕獲技術(shù)的難度和復(fù)雜度大大增加,當(dāng)信號極其微弱且多普勒動態(tài)范圍大、變化率高時(shí),信號捕獲一般采用二維FFT捕獲方法,即首先對多普勒分段,再在每個(gè)多普勒頻點(diǎn)對多普勒變化率分段,并在每個(gè)分段上進(jìn)行相關(guān)、積分和FFT運(yùn)算,查找最大譜線,這使得信號捕獲過程的運(yùn)算量呈級數(shù)增長?,F(xiàn)有的研究中一般采用高性能FPGA來實(shí)現(xiàn)這種二維FFT信號頻率快速捕獲算法,這種方式需要開發(fā)專門的硬件板卡,實(shí)現(xiàn)復(fù)雜,且FPGA的資源有限,一般一次只能實(shí)現(xiàn)一種體制信號的捕獲,通用性差、可擴(kuò)展性差。
[0138]本發(fā)明充分李永樂CUDA架構(gòu)和GPU的工作特點(diǎn),能夠充分發(fā)揮GPU并行計(jì)算能力,同時(shí)適合多種體制的信號,有效提高了捕獲速度且易于實(shí)現(xiàn),適用于深空探測中測控信號的快速捕獲,尤其是信號極其微弱且多普勒動態(tài)范圍大、變化率高時(shí),可以有效地實(shí)現(xiàn)信號頻率的快速捕獲。
[0139]本發(fā)明說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域技術(shù)人員的公知技術(shù)。
【權(quán)利要求】
1.一種基于CUDA的多體制信號頻率快速捕獲方法,其特征在于步驟如下: (1)CPU通過CUDA架構(gòu)選擇GPU協(xié)處理器并初始化CPU和GPU的運(yùn)行環(huán)境,同時(shí)對運(yùn)行參數(shù)進(jìn)行初始化設(shè)置,所述運(yùn)行參數(shù)包括:信號數(shù)據(jù)文件路徑、信號碼速率、信號采樣頻率、信號載波頻率初始值、信號多普勒范圍、信號多普勒變化率范圍、信號的FFT分析點(diǎn)數(shù)和信號體制; (2)CPU根據(jù)步驟(I)中設(shè)置的信號數(shù)據(jù)文件路徑將信號數(shù)據(jù)從數(shù)據(jù)文件讀入CPU內(nèi)存中; (3)CPU根據(jù)步驟(I)中設(shè)置的信號碼速率確定信號的FFT采樣頻率和信號的FFT分析帶寬,然后根據(jù)信號的FFT采樣頻率計(jì)算對步驟(I)中設(shè)置的信號多普勒范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒分段數(shù),根據(jù)信號的FFT分析帶寬計(jì)算對步驟(I)中設(shè)置的信號多普勒變化率范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒變化率分段數(shù),最后根據(jù)步驟(I)中設(shè)置的信號采樣頻率和本步驟獲得的信號FFT采樣頻率計(jì)算信號的積分長度; (4)CPU分配GPU全局存儲空間,并初始化已分配的GPU全局存儲空間; (5)CPU根據(jù)步驟(3)中獲得的信號的積分長度設(shè)置GPU中在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目; (6)CPU根據(jù)步驟(3)中獲得的多普勒變化率分段數(shù)和步驟⑴中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置并行一維FFT運(yùn)算的參數(shù),所述并行一維FFT運(yùn)算的參數(shù)包括并行的一維FFT運(yùn)算的個(gè)數(shù)和每個(gè)一維FFT運(yùn)算的FFT分析點(diǎn)數(shù); (7)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和步驟(I)中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組,對所有多普勒分段進(jìn)行二維最大值查找的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù); (8)CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和多普勒分段數(shù)設(shè)置GPU對步驟(7)中所述的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù)的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,所述二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組; (9)CPU根據(jù)步驟(3)獲得的多普勒分段數(shù)設(shè)置GPU對步驟⑶所述的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目; (10)CPU將步驟(2)中讀入到CPU內(nèi)存中的信號數(shù)據(jù)從CPU內(nèi)存拷貝至步驟(4)確定的GPU全局存儲空間中; (11)GPU利用步驟(5)中確定的在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以并行的方式完成對步驟(10)讀入到GPU全局存儲空間中的信號數(shù)據(jù)的下變頻處理,然后以歸約算法進(jìn)行并行求和,并對并行求和后的結(jié)果進(jìn)行鑒相處理,將鑒相處理結(jié)果寫回步驟(4)確定的GPU全局存儲空間中,所述每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù); (12)GPU利用步驟(6)中確定的并行一維FFT運(yùn)算的參數(shù),對步驟(11)中的處理結(jié)果進(jìn)行并行一維FFT運(yùn)算,并將結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述并行一維FFT運(yùn)算結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒變化率分段數(shù),另一個(gè)維度為信號的FFT分析點(diǎn)數(shù); (13)GPU根據(jù)步驟(7)中確定的對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(12)的并行一維FFT運(yùn)算結(jié)果分別進(jìn)行取模獲得FFT模值,并分別對FFT模值以歸約算法并行查找最大值和最大值對應(yīng)的FFT點(diǎn)號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒變化率分段數(shù)相同的一維數(shù)組; (14)GPU循環(huán)進(jìn)行步驟(11)至步驟(13),循環(huán)次數(shù)為多普勒分段數(shù),獲得對所有多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的結(jié)果,所述結(jié)果為一個(gè)二維數(shù)組,該數(shù)組的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù); (15)GPU根據(jù)步驟(8)中確定的對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程塊及多個(gè)線程并行的方式完成對步驟(14)獲得的二維數(shù)組分別以歸約算法并行查找FFT模值在每一個(gè)多普勒分段下所有多普勒變化率范圍內(nèi)的最大值和對應(yīng)的多普勒變化率分段號,并將獲得的結(jié)果寫回步驟(4)確定的GPU全局存儲空間,所述對步驟(14)獲得的二維數(shù)組進(jìn)行二維最大值查找的結(jié)果為一個(gè)維度與多普勒分段數(shù)相同的一維數(shù)組; (16)GPU根據(jù)步驟(9)中確定的對步驟(15)獲得的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,以多個(gè)線程并行的方式完成對步驟(15)獲得的一維數(shù)組以歸約算法并行查找FFT模值在所有多普勒分段中的最大值和對應(yīng)的最大多普勒分段號,并將結(jié)果寫回步驟(4)確定的GPU全局存儲空間; (17)CPU將步驟(16)中獲得的FFT模值在所有多普勒分段中的最大值及其對應(yīng)的多普勒分段號、所述FFT模值在所有多普勒分段中的最大值在步驟(14)獲得的對應(yīng)的FFT點(diǎn)號和在步驟(15)獲得的對應(yīng)的多普勒變化率分段號從GPU全局存儲空間中拷貝回CPU內(nèi)存,并計(jì)算載波頻偏和多普勒變化率。
2.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述信號包括BPSK信號和標(biāo)準(zhǔn)TT&C信號。
3.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(3)中,CPU根據(jù)步驟(I)中設(shè)置的信號碼速率確定信號的FFT采樣頻率和信號的FFT分析帶寬,然后根據(jù)信號的FFT采樣頻率計(jì)算對步驟(I)中設(shè)置的信號多普勒范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒分段數(shù),根據(jù)信號的FFT分析帶寬計(jì)算對步驟(I)中設(shè)置的信號多普勒變化率范圍進(jìn)行分段的步進(jìn)值,進(jìn)而確定多普勒變化率分段數(shù),最后根據(jù)步驟(I)中設(shè)置的信號采樣頻率和本步驟獲得的信號FFT采樣頻率計(jì)算信號的積分長度,具體為: 當(dāng)信號體制為二相編碼體制,即BPSK時(shí):
Ps — CodeR&te ;
RBW = Fs/FFTSize ;
PerDoppler = Fs/4 ;
PerDopplerRate = 3 X RBff X RBff ;
Seg = 2 X Doppler/PerDoppler+1 ;
Segl = 2 X DopplerRate/PerDoppleRate+1 ;
SumSize = SampleRate/Fs+0.5 ; 當(dāng)信號體制為統(tǒng)一測控體制,即標(biāo)準(zhǔn)TT&C時(shí),RBW根據(jù)信號的情況和經(jīng)驗(yàn)選取:
Fs = RBffXFFTSize ;
PerDoppler = Fs/4 ;
PerDopplerRate = 3 X RBff X RBff ;
Seg = 2 X Doppler/PerDoppler+1 ;
Segl = 2 X DopplerRate/PerDoppleRate+1 ;
SumSize = SampleRate/Fs+0.5 ; 式中,CodeRate為信號碼速率,F(xiàn)s為FFT采樣頻率,RBW為信號的FFT分析帶寬,Doppler為信號多普勒范圍,DopplerRate為多普勒變化率范圍,PerDoppler為多普勒范圍分段的步進(jìn)值,Seg為多普勒分段數(shù),PerDopplerRate為多普勒變化率范圍分段的步進(jìn)值,Segl為多普勒變化率分段數(shù),F(xiàn)FTSize為信號的FFT分析點(diǎn)數(shù),SumSize為積分長度,SampleRate為信號采樣頻率。
4.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(5)中,CPU根據(jù)步驟(3)中獲得的信號的積分長度設(shè)置GPU中在每個(gè)多普勒分段下所有多普勒變化率分段對信號進(jìn)行下變頻和積分處理的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為: (1)每個(gè)線程塊的線程數(shù)目由信號數(shù)據(jù)的積分長度決定,當(dāng)積分長度小于等于1024時(shí),線程數(shù)目等于積分長度,當(dāng)積分長度大于1024時(shí),線程數(shù)目等于1024 ; (2)令線程塊數(shù)目為(x,y,z),其中X為多普勒變化率的分段數(shù),y為FFT運(yùn)算的分析點(diǎn)數(shù),z值為I。
5.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(7)中,CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和步驟(I)中設(shè)置的信號FFT分析點(diǎn)數(shù)設(shè)置GPU對每個(gè)多普勒分段下所有多普勒變化率分段的FFT模值進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為: (1)每個(gè)線程塊中的線程數(shù)目由四分之一FFT分析點(diǎn)數(shù)的值決定,當(dāng)四分之一FFT分析點(diǎn)數(shù)的值小于等于1024時(shí),線程數(shù)目等于四分之一 FFT分析點(diǎn)數(shù)的值,當(dāng)四分之一 FFT分析點(diǎn)數(shù)的值大于1024時(shí),線程數(shù)目等于1024 ; (2)線程塊數(shù)目等于多普勒變化率的分段數(shù)。
6.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(8)中,CPU根據(jù)步驟(3)獲得的多普勒變化率分段數(shù)和多普勒分段數(shù)設(shè)置GPU對步驟(7)中所述的一個(gè)維度為多普勒分段數(shù),另一個(gè)維度為多普勒變化率分段數(shù)的二維數(shù)組進(jìn)行二維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為: (I)每個(gè)線程塊中的線程數(shù)目由多普勒變化率分段數(shù)決定,當(dāng)多普勒變化率分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒變化率分段數(shù),當(dāng)多普勒變化率分段數(shù)大于1024時(shí),線程數(shù)目等于1024; (2)線程塊數(shù)目等于多普勒的分段數(shù)。
7.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(9)中,CPU根據(jù)步驟(3)獲得的多普勒分段數(shù)設(shè)置GPU對步驟(8)所述的維度與多普勒分段數(shù)相同的一維數(shù)組進(jìn)行一維最大值查找的線程塊數(shù)目和每個(gè)線程塊中的線程數(shù)目,具體為: (1)每個(gè)線程塊的線程數(shù)目由多普勒分段數(shù)決定,當(dāng)多普勒分段數(shù)小于等于1024時(shí),線程數(shù)目等于多普勒分段數(shù),當(dāng)多普勒分段數(shù)大于1024時(shí),線程數(shù)目等于1024 ; (2)線程塊數(shù)目等于I。
8.根據(jù)權(quán)利要求1所述的一種基于CUDA的多體制信號頻率快速捕獲實(shí)現(xiàn)方法,其特征在于:所述步驟(17)中計(jì)算載波頻偏和多普勒變化率,具體為: 載波頻偏由公式:
EstCarrFreq = (MaxDopplerID-Seg/2)XPerDoppIer+MaxFFTIDX RBff/2 ; 給出,式中,MaxDopplerID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒分段號,MaxFFTID為FFT模值在所有多普勒分段中最大值對應(yīng)的FFT點(diǎn)號; 多普勒變化率由公式:
EstDopplerRate = (MaxDopplerRateID-Segl/2)XPerDopplerRate 給出,式中MaxDoppIerRateID為FFT模值在所有多普勒分段中最大值對應(yīng)的多普勒變化率分段號。
【文檔編號】H04L12/26GK104202209SQ201410381743
【公開日】2014年12月10日 申請日期:2014年8月5日 優(yōu)先權(quán)日:2014年8月5日
【發(fā)明者】陳蓉, 王靜溫 申請人:北京遙測技術(shù)研究所, 航天長征火箭技術(shù)有限公司