一種并行雷達(dá)脈沖壓縮方法
【專利摘要】本發(fā)明屬于雷達(dá)信號處理領(lǐng)域,尤其涉及利用實(shí)時操作系統(tǒng)的實(shí)時調(diào)度的并行雷達(dá)脈沖壓縮方法:使用linux內(nèi)核中設(shè)置CPU親和性的API函數(shù),把實(shí)現(xiàn)脈沖壓縮算法的進(jìn)程綁定到多核CPU的某一個核心上,使所述多核CPU核心只做脈沖壓縮的算法,在內(nèi)核綁定的基礎(chǔ)上,操作系統(tǒng)使用改進(jìn)的實(shí)時調(diào)度機(jī)制,保證了脈沖壓縮過程的實(shí)時處理,而不會受到系統(tǒng)中斷,外部中斷,其他進(jìn)程運(yùn)行等因素的影響,從而大大提高了系統(tǒng)的實(shí)時性。該方法有效的提高了脈沖壓縮算法的實(shí)現(xiàn)效率,使雷達(dá)信號的實(shí)時處理真正成為可能。
【專利說明】一種并行雷達(dá)脈沖壓縮方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于雷達(dá)信號處理領(lǐng)域,尤其涉及利用實(shí)時操作系統(tǒng)的實(shí)時調(diào)度的并行雷達(dá)脈沖壓縮方法。
【背景技術(shù)】
[0002]線性調(diào)頻信號是一種具有較大時帶積的信號形式,它可以在保證一定的信號發(fā)射功率的情況下,達(dá)到較高的距離分辨率,因此在雷達(dá)系統(tǒng)中被廣泛使用。對于線性調(diào)頻信號中的脈沖壓縮過程,需要進(jìn)行多次快速傅氏變換算法(Fast Fourier TransformAlgorithm,FFT)變換以及多次乘加累計運(yùn)算,因此把脈沖壓縮的算法實(shí)現(xiàn)移植到圖形處理器(Graphics Processing Unit, GPU)并行運(yùn)算平臺上,使用GPU并行計算的方法,可提高脈沖壓縮算法的實(shí)現(xiàn)效率。
[0003]在普通的Linux操作系統(tǒng)中,通過使用GPU的并行計算的方法,在一定程度上提高了數(shù)據(jù)計算處理的效率,縮減了脈沖壓縮過程的時間,但是在實(shí)際的雷達(dá)系統(tǒng)中,雷達(dá)信號處理機(jī)無時無刻不在處理來自雷達(dá)接收機(jī)的實(shí)時數(shù)據(jù)。而實(shí)際的Linux操作系統(tǒng)中用戶程序所處的環(huán)境是相當(dāng)復(fù)雜的,中斷隨時可能發(fā)生,而且還可能被其他用戶或者內(nèi)核進(jìn)程搶斷,而用戶程序?qū)τ谶@種狀態(tài)幾乎沒有任何的控制方法。對于持續(xù)到來的回波信號數(shù)據(jù),用戶程序很難保證每次都能夠及時處理,程序執(zhí)行的時間確定性較差。雷達(dá)系統(tǒng)為了保證每次系統(tǒng)都能及時處理數(shù)據(jù),只能按照最長的處理時間來確定系統(tǒng)的數(shù)據(jù)率,這種情況下,GTO就很難獲得較高的利用率,脈沖壓縮的效率很難提高。而且,對于大量的回波數(shù)據(jù),為了獲得實(shí)時的雷達(dá)處理數(shù)據(jù),只能把它們分發(fā)到多個數(shù)據(jù)處理機(jī)上進(jìn)行處理,這就大大增加了系統(tǒng)的復(fù)雜性和成本。
【發(fā)明內(nèi)容】
[0004]為了解決現(xiàn)有系統(tǒng)中制約脈沖壓縮處理效率的問題,本發(fā)明提供了一種并行雷達(dá)脈沖壓縮方法:使用Iinux內(nèi)核中設(shè)置CPU親和性的API函數(shù),把實(shí)現(xiàn)脈沖壓縮算法的進(jìn)程綁定到多核CPU的某一個核心上,使所述多核CPU核心只做脈沖壓縮的算法,在內(nèi)核綁定的基礎(chǔ)上,操作系統(tǒng)使用改進(jìn)的實(shí)時調(diào)度機(jī)制,保證了脈沖壓縮過程的實(shí)時處理,而不會受到系統(tǒng)中斷,外部中斷,其他進(jìn)程運(yùn)行等因素的影響,從而大大提高了系統(tǒng)的實(shí)時性。該方法有效的提高了脈沖壓縮算法的實(shí)現(xiàn)效率,使雷達(dá)信號的實(shí)時處理真正成為可能。
[0005]一種并行雷達(dá)脈沖壓縮方法,具體如下:
[0006]S1、設(shè)置進(jìn)程的CPU親和力掩碼,即調(diào)用Iinux的系統(tǒng)調(diào)用API函數(shù);
[0007]S2、屏蔽CPUO對外部中斷的響應(yīng),獲取程序調(diào)度延遲;
[0008]S3、屏蔽CPUO對本地時鐘中斷的響應(yīng);
[0009]S4、屏蔽CPUO對后臺進(jìn)程的響應(yīng);
[0010]S5、設(shè)置進(jìn)程的優(yōu)先級:基于Linux內(nèi)核改進(jìn)的實(shí)時內(nèi)核調(diào)度策略;
[0011]S6、設(shè)定定時器中斷,每隔T us產(chǎn)生一次中斷,所述T us用一個脈沖重復(fù)周期內(nèi)的GPU計算時間決定;
[0012]S7、為脈沖壓縮的計算分配GPU資源,將數(shù)據(jù)從主機(jī)中拷貝到GPU的全局存儲器中,每次拷貝的數(shù)據(jù)量是由脈沖重復(fù)周期內(nèi)的采樣點(diǎn)確定,其中,采樣點(diǎn)數(shù)=采樣時間/采樣間隔;
[0013]S8、調(diào)用GPU的Kernel進(jìn)行脈沖壓縮,并輸出脈沖壓縮結(jié)果;
[0014]S9、在GPU做前一個脈沖重復(fù)周期內(nèi)數(shù)據(jù)的脈沖壓縮算法的同時,CPU中預(yù)讀取下一個脈沖重復(fù)周期內(nèi)的數(shù)據(jù),為下次的計算做好準(zhǔn)備;
[0015]SlOjEGPU的計算結(jié)果寫回內(nèi)存中,用于后續(xù)運(yùn)算;
[0016]S11、把下一個脈沖重復(fù)周期的數(shù)據(jù)送入GPU中進(jìn)行下一輪運(yùn)算;
[0017]S12、重復(fù)S6?S10,直到進(jìn)程結(jié)束。
[0018]進(jìn)一步地,S5所述實(shí)時調(diào)度策略為:調(diào)度機(jī)制SCHED_0THER。
[0019]進(jìn)一步地,S5所述實(shí)時調(diào)度策略為:先到先服務(wù)的實(shí)時調(diào)度機(jī)制SCHED_FIF0。
[0020]進(jìn)一步地,S5所述實(shí)時調(diào)度策略為:基于時間片輪轉(zhuǎn)的實(shí)時調(diào)度機(jī)制SCHED_RR。
[0021]進(jìn)一步地,S6所述定時器為 IHMER_REAL、ITIMER_VIRTUAL 和 IHMER_PR0F。
[0022]進(jìn)一步地,S8所述調(diào)用GPU的Kernel進(jìn)行脈沖壓縮算法的計算,可以采用時域脈沖壓縮方法,可以采用頻域脈沖壓縮方法。
[0023]進(jìn)一步地,所述時域脈沖壓縮方法具體為:使回波信號通過一個脈沖壓縮匹配濾波器進(jìn)行卷積運(yùn)算,輸出脈沖壓縮結(jié)果S。(t) = Si(t)*h(t),所述回波信號通過脈沖壓縮匹配濾波器的時域形式為_ = Ks:{td -O,其中,Ss表示發(fā)射信號的時域形式,td表示從發(fā)射信號到接收信號的時間延遲,K表示一個增益系數(shù),Si (t)表示所述回波信號的時域形式,t為時間軸上的時間值,t e [0,+ Oo ]。
[0024]進(jìn)一步地,所述頻域脈沖壓縮方法具體為:
[0025]步驟1、對回波信號的時域形式進(jìn)行傅里葉變換到頻域,所述回波信號的頻域表現(xiàn)
N — ]/7?
形式為乂⑷,其中,Si(Ii)為所述回波信號的時域離散時間表
/? = ()N
現(xiàn)形式,N表示一個脈沖重復(fù)周期之內(nèi)的信號采樣點(diǎn)數(shù),Si(Ii)表示離散的輸入序列中的第η個值,O彡η彡N-1,0彡k彡N-1 ;
[0026]步驟2、對脈沖壓縮匹配濾波器的時域形式進(jìn)行傅里葉變換到頻域,所述脈沖壓縮
V —丨Iai
匹配濾波器的頻域表示形式為_ = Σ,,其中,h(n)是所述脈沖壓
/? = ()N
縮匹配濾波器的離散時域表示;
[0027]步驟3、輸出脈沖壓縮結(jié)果SQ(k) = Si(k)*H(k);
[0028]步驟4、對步驟3所述S。(k)進(jìn)行傅里葉變換,將所述脈沖壓縮結(jié)果從頻域變換到時域 S。(n) = IFFT (S0 (k))。
[0029]本發(fā)明的有益效果是:
[0030]在改進(jìn)的實(shí)時Linux操作系統(tǒng)中,本發(fā)明對系統(tǒng)的調(diào)度機(jī)制進(jìn)行了修改,使進(jìn)程執(zhí)行環(huán)境的可控性增強(qiáng),在該系統(tǒng)中程序能夠嚴(yán)格控制程序的執(zhí)行環(huán)境,通過相關(guān)的設(shè)置,可在多核CPU的某一個核心上,屏蔽中斷響應(yīng),禁止其他進(jìn)程的運(yùn)行,只允許需要進(jìn)行實(shí)時運(yùn)算的進(jìn)程運(yùn)行,最大程度減少進(jìn)程之間的調(diào)度切換,從而使進(jìn)程的實(shí)時處理能力大大提聞。
[0031]程序執(zhí)行的時間確定性得到很大的改善,可以處理更高數(shù)據(jù)率的數(shù)據(jù),大大加速了脈沖壓縮的過程,極大地提高了雷達(dá)系統(tǒng)的實(shí)時性。
【專利附圖】
【附圖說明】
[0032]圖1是本發(fā)明的實(shí)驗(yàn)流程圖。
【具體實(shí)施方式】
[0033]下面結(jié)合實(shí)施例和附圖,詳細(xì)說明本發(fā)明的技術(shù)方案。
[0034]實(shí)施例1、
[0035]選用雙核四線程的i3處理器,選擇CPUO作為實(shí)現(xiàn)脈沖壓縮算法的CPU核心,選擇NVIDIA公司Tesla系列的K20計算卡,計算能力為V3.5。選用NVIDIA的通用并行計算架構(gòu) CUDA。
[0036]如圖1所示:
[0037]S1、設(shè)置進(jìn)程的CPU親和力掩碼,即調(diào)用Iinux的系統(tǒng)調(diào)用API函數(shù)。一個進(jìn)程的CPU親合力掩碼決定了該進(jìn)程將在哪個或哪幾個CPU上運(yùn)行。脈沖壓縮進(jìn)程的CPU親和力掩碼為I (對應(yīng)二進(jìn)制碼為0001,二進(jìn)制的位與CPU編號對應(yīng)),即表示進(jìn)程只能在CPUO上運(yùn)行,實(shí)現(xiàn)了把脈沖壓縮算法的進(jìn)程綁定到了 CPUO上執(zhí)行。調(diào)用Iinux的系統(tǒng)調(diào)用API函數(shù)sched_setaffinity,設(shè)置對應(yīng)CPU為當(dāng)前進(jìn)程的執(zhí)行CPU核心。
[0038]所述函數(shù)sched_setaffinity 的使用方法為:sched_setaffinity (pid_tpid, size_t cpusetsize, cpu_set_t*mask)。其中,pid表示需要設(shè)置或獲取綁定信息的進(jìn)程id,若pid為0,則表示對當(dāng)前調(diào)用的線程進(jìn)行設(shè)置;參數(shù)cpusetsize —般設(shè)置為sizeof (cpu_set_t),用以表示參數(shù)mask指向的內(nèi)存結(jié)構(gòu)對象的大小;參數(shù)mask指向類型為cpu_set_t對象的指針,用以設(shè)置指定進(jìn)程可以使用的CPU核列表,本實(shí)施例中該值設(shè)置參數(shù)mask為I,表示進(jìn)程只能在CPUO上執(zhí)行。
[0039]S2、屏蔽CPUO對外部中斷的響應(yīng),獲取程序調(diào)度延遲。當(dāng)多個中斷被分配到同一個CPU上時,恰好目標(biāo)進(jìn)程也運(yùn)行在這個CPU上,程序的調(diào)度延遲就更加無法預(yù)測了,因?yàn)榇藭r會出現(xiàn)中斷嵌套的現(xiàn)象,中斷會堆積起來。通過屏蔽CPUO上的中斷響應(yīng),可以獲得最小的程序調(diào)度延遲,而且程序調(diào)度延遲的確定性也大大增強(qiáng)。對于實(shí)時程序來說,最大的程序調(diào)度延遲是系統(tǒng)的一個關(guān)鍵指標(biāo),因?yàn)樽铋L的響應(yīng)時間將決定實(shí)時程序滿足deadline情況下的處理能力。屏蔽CPU的中斷響應(yīng)是通過讀寫proc文件系統(tǒng)中的/proc/shield/irqs文件實(shí)現(xiàn)的。所述/proc/shield/irqs文件存放的是一個二進(jìn)制的數(shù)字,所述/proc/shield/irqs每一位代表一個CPU核心的位掩碼,例如0001—bitO置位。
[0040]讀寫proc 文件系統(tǒng)中的 /proc/shield/irqs 文件:fprintf (irqs_fd, ” %d〃,shield_code);,表示把int類型的shield_code變量(0001)寫入FILE*類型變量irqs_fd表示的文件(/proc/shield/irqs)中,表示屏蔽掉CPUO的中斷響應(yīng)。
[0041]S3、屏蔽CPUO對本地時鐘中斷的響應(yīng)。在系統(tǒng)中,每個CPU核心都有一個私有的定時器,這個定時器每1ms產(chǎn)生一個中斷信號,因此本地定時器中斷是程序執(zhí)行過程中發(fā)生的最頻繁的中斷抖動。如果不屏蔽掉這個本地時鐘中斷,就會對程序的實(shí)時性帶來嚴(yán)重的影響。但是,系統(tǒng)中可能會有一些程序依賴這個本地時鐘工作,例如低精度的鬧鐘程序,因此應(yīng)該把這些程序放到其他的CPU核心上執(zhí)行。屏蔽CPU的本地定時器是通過讀寫proc文件系統(tǒng)中的/proc/shield/ltms文件實(shí)現(xiàn)的。所述/proc/shield/ltms文件存放的是一個二進(jìn)制的數(shù)字,所述/proc/shield/ltms文件每一位代表一個CPU核心的位掩碼,例如0001—bitO 置位。
[0042]讀寫proc文件系統(tǒng)中的/proc/shield/ltms文件:
[0043]fprintf (ltmrs_fd, 〃 % d", shield_code);,表不把 int 類型的 shield_code 變量(0001)寫入FILE*類型的ltmrs_fd變量表示的文件(/proc/shield/ltms)中,表示屏蔽CPUO的定時器中斷。
[0044]S4、屏蔽CPUO對后臺進(jìn)程的響應(yīng)。當(dāng)一個CPU允許后臺程序的運(yùn)行時,它會影響一個需要對中斷實(shí)時響應(yīng)的高優(yōu)先級任務(wù)的程序調(diào)度延遲。因?yàn)楹笈_程序會默認(rèn)的調(diào)用禁用中斷和進(jìn)程搶占的系統(tǒng)調(diào)用。但是對于高優(yōu)先級的進(jìn)程的確定性執(zhí)行沒有影響。前提是后臺進(jìn)程的優(yōu)先級沒有此高優(yōu)先級的進(jìn)程優(yōu)先級高。屏蔽CPU的后臺程序是通過讀寫proc文件系統(tǒng)中的/proc/shield/procs文件實(shí)現(xiàn)的。所述/proc/shield/procs文件存放的是一個二進(jìn)制的數(shù)字,所述/proc/shield/procs文件每一位代表一個CPU核心的位掩碼,例如 0001—bitO 置位。
[0045]讀寫proc 文件系統(tǒng)中的 /proc/shield/procs 文件:fprintf (procs_fd, " %cT, shield_code);,表不把 int 類型的 shield_code 變量(0001)寫入 FILE* 類型的 procs_fd變量表示的文件(/proc/shield/procs)中,表示屏蔽CPUO對后臺進(jìn)程的響應(yīng)。
[0046]S5、設(shè)置進(jìn)程的優(yōu)先級:采用先進(jìn)先出實(shí)時調(diào)度機(jī)制SCHED_RR進(jìn)行調(diào)度?;贚inux內(nèi)核改進(jìn)的實(shí)時內(nèi)核有三種調(diào)度策略:普通的調(diào)度機(jī)制SCHED_0THER、先到先服務(wù)的實(shí)時調(diào)度機(jī)制SCHED_FIF0和基于時間片輪轉(zhuǎn)的實(shí)時調(diào)度機(jī)制SCHED_RR。SCHED_0THER調(diào)度策略是一種基于優(yōu)先級的動態(tài)調(diào)度策略,用于普通的進(jìn)程。SCHED_FIF0與SCHED_RR都是用于實(shí)時進(jìn)程的調(diào)度策略,二者的區(qū)別是當(dāng)進(jìn)程的調(diào)度策略為SCHED_FIF0時,當(dāng)前實(shí)時進(jìn)程將一直占用CPU直至自動退出,除非有更緊迫的、優(yōu)先級更高的實(shí)時進(jìn)程需要運(yùn)行時,它才會被搶占CPU ;當(dāng)進(jìn)程的調(diào)度策略為SCHED_RR時,它與其它實(shí)時進(jìn)程以實(shí)時輪流算法去共同使用CPU,用完時間片放到運(yùn)行隊(duì)列尾部。
[0047]最為優(yōu)選,選擇SCHED_RR的實(shí)時調(diào)度策略進(jìn)行調(diào)度。選擇調(diào)度策略的方法是調(diào)用系統(tǒng)的API函數(shù)sched_setscheduler,用戶可以通過填充一個struct sched_param結(jié)構(gòu)體變量,然后調(diào)用 sched_setscheduler。
[0048]sched_setscheduler 函數(shù)的使用方法如下:sched_setscheduler (pid_t pid, intpolicy, const struct sched_param*param);,參數(shù)pid表示需要設(shè)置或獲取綁定信息的進(jìn)程id,如果為0,表示對當(dāng)前調(diào)用的線程進(jìn)行設(shè)置;參數(shù)policy表示所述參數(shù)pid所指定進(jìn)程的調(diào)度策略,這里設(shè)置成SCHED_RR ;參數(shù)structsched_param指向的指針,該結(jié)構(gòu)中的sched_pr1rity表示進(jìn)程的調(diào)度優(yōu)先級,這里設(shè)置成60。
[0049]S6、設(shè)定定時器中斷,每隔T us產(chǎn)生一次中斷,所述T us用一個脈沖重復(fù)周期內(nèi)的GPU計算時間決定。假設(shè)為T us,設(shè)置一個定時器中斷,每隔T us產(chǎn)生一次中斷。而CPU在GPU做前一個點(diǎn)的脈沖壓縮運(yùn)算時就可以去準(zhǔn)備下一個點(diǎn)的數(shù)據(jù)讀取與準(zhǔn)備,在下一次中斷到來時,就可以立刻進(jìn)行下一個脈沖重復(fù)周期內(nèi)數(shù)據(jù)的脈沖壓縮運(yùn)算,從而極大了提高了程序的執(zhí)行效率。而能夠最高效率的利用GPU資源和CPU資源的前提就是程序執(zhí)行的時間確定性很好,能夠在預(yù)定的時間內(nèi)做完所有的工作。對于定時器的具體實(shí)現(xiàn),調(diào)用Linux系統(tǒng)的setitimer函數(shù)即可。
[0050]setitimer 函數(shù)的使用方法如下:setitimer (int which, const structitimerval*value, struct itimerval*ovalue);參數(shù) which 為定時器類型,第二個參數(shù)是指向 struct itimerval 的——個指針,struct itimerval 包含 it_interval 和 it_value兩個成員,it_interval指定間隔時間,it_value指定初始定時時間;第三個參數(shù)ovalue用來保存先前的值,常設(shè)為NULL,不做處理,其中,setitimer支持3種類型的定時器:IHMER_REAL,所述定時器IHMER_REAL以系統(tǒng)真實(shí)的時間來計算,送出SIGALRM信號;IHMER_VIRTUAL,所述定時器IHMER_VIRTUAL以該進(jìn)程在用戶態(tài)下花費(fèi)的時間來計算,送出SIGVTALRM信號;IHMER_PR0F,所述定時器IHMER_PR0F以該進(jìn)程在用戶態(tài)下和內(nèi)核態(tài)下所費(fèi)的時間來計算,送出SIGPR0F信號。
[0051]作為優(yōu)選,本實(shí)施例選用IHMER_REAL類型的定時器。
[0052]S7、為脈沖壓縮的計算分配GPU資源,將數(shù)據(jù)從主機(jī)中拷貝到GPU的全局存儲器中,每次拷貝的數(shù)據(jù)量是由脈沖重復(fù)周期內(nèi)的采樣點(diǎn)確定,采樣點(diǎn)數(shù)越大,就表示要計算的數(shù)據(jù)量越大,其中,采樣點(diǎn)數(shù)=采樣時間/采樣間隔。
[0053]首先需要把數(shù)據(jù)從主機(jī)中拷貝到GPU的全局存儲器中,由于每次計算的是一個脈沖重復(fù)周期內(nèi)的數(shù)據(jù),因此一次數(shù)據(jù)拷貝的數(shù)據(jù)量是由PRF決定的。cudamemcpy函數(shù)是一個異步調(diào)度的函數(shù),因此為了使數(shù)據(jù)同步,在內(nèi)存拷貝之后,需要調(diào)用一個cudaDeviceSynchronize 函數(shù)。
[0054]cudamemcpy 函數(shù):cudaMemcpy (void氺dst, const void氺src, size_t count, enumcudaMemcpyKind kind),該函數(shù)事項(xiàng)從src指向的存儲器區(qū)域中將count個字節(jié)復(fù)制到dst 指向的存儲器區(qū)域,其中 kind 是 cudaMemcpyHostToHost、cudaMemcpyHostToDevice、cudaMemcpy DeviceToHost 或 cudaMemcpyDeviceToDevice 之一,用于指定復(fù)制的方向。
[0055]cudaDeviceSynchronize O函數(shù):該函數(shù)不需要任何參數(shù)輸入,僅僅是在異步調(diào)度中使數(shù)據(jù)同步。
[0056]S8、調(diào)用GPU的Kernel進(jìn)行脈沖壓縮,并輸出脈沖壓縮結(jié)果。
[0057]調(diào)用GPU的Kernel進(jìn)行脈沖壓縮算法的計算,可以采用時域脈沖壓縮方法,可以采用頻域脈沖壓縮方法。
[0058]最為優(yōu)選,采用的是頻域脈沖壓縮的方法。首先對于輸入信號和匹配濾波器進(jìn)行傅里葉變換,對于典型的傅里葉變換,NVIDIA公司提供了標(biāo)準(zhǔn)的實(shí)現(xiàn)庫函數(shù),調(diào)用對應(yīng)的庫函數(shù)即可實(shí)現(xiàn)對于輸入的傅里葉變換。計算得到的SiGO和H(k)都是向量,把這兩個向量對應(yīng)項(xiàng)相乘,得到S。(k),最后再調(diào)用FFT運(yùn)算的標(biāo)準(zhǔn)庫函數(shù),通過一個傅里葉反變換就得到了 s0(η)。
[0059]S9、在GPU做前一個脈沖重復(fù)周期內(nèi)數(shù)據(jù)的脈沖壓縮算法的同時,CPU中預(yù)讀取下一個脈沖重復(fù)周期內(nèi)的數(shù)據(jù),為下次的計算做好準(zhǔn)備;
[0060]S10、把GPU的計算結(jié)果寫回內(nèi)存中,用于后續(xù)運(yùn)算。在Kernel完成一次運(yùn)算之后,需要把計算結(jié)果從GPU寫回到主機(jī)中的內(nèi)存中,以便后續(xù)處理。而cudamemcpy函數(shù)是一個異步調(diào)度的函數(shù),因此為了使數(shù)據(jù)同步,在內(nèi)存拷貝之后,需要調(diào)用一個cudaDeviceSynchronize 函數(shù)。
[0061]S11、把下一個脈沖重復(fù)周期的數(shù)據(jù)送入GPU中進(jìn)行下一輪運(yùn)算。
[0062]S12、重復(fù)S6?S10,直到進(jìn)程結(jié)束。
【權(quán)利要求】
1.一種并行雷達(dá)脈沖壓縮方法,其特征在于,包括以下步驟: 51、設(shè)置進(jìn)程的CPU親和力掩碼,即調(diào)用Iinux的系統(tǒng)調(diào)用API函數(shù); 52、屏蔽CPUO對外部中斷的響應(yīng),獲取程序調(diào)度延遲; 53、屏蔽CPUO對本地時鐘中斷的響應(yīng); 54、屏蔽CPUO對后臺進(jìn)程的響應(yīng); 55、設(shè)置進(jìn)程的優(yōu)先級:基于Linux內(nèi)核改進(jìn)的實(shí)時內(nèi)核調(diào)度策略; 56、設(shè)定定時器中斷,每隔Tus產(chǎn)生一次中斷,所述T us用一個脈沖重復(fù)周期內(nèi)的GPU計算時間決定; 57、為脈沖壓縮的計算分配GPU資源,將數(shù)據(jù)從主機(jī)中拷貝到GPU的全局存儲器中,每次拷貝的數(shù)據(jù)量是由脈沖重復(fù)周期內(nèi)的采樣點(diǎn)確定,其中,采樣點(diǎn)數(shù)=采樣時間/采樣間隔; 58、調(diào)用GPU的Kernel進(jìn)行脈沖壓縮,并輸出脈沖壓縮結(jié)果; 59、在GPU做前一個脈沖重復(fù)周期內(nèi)數(shù)據(jù)的脈沖壓縮算法的同時,CPU中預(yù)讀取下一個脈沖重復(fù)周期內(nèi)的數(shù)據(jù),為下次的計算做好準(zhǔn)備; 510、把GPU的計算結(jié)果寫回內(nèi)存中,用于后續(xù)運(yùn)算; 511、把下一個脈沖重復(fù)周期的數(shù)據(jù)送入GPU中進(jìn)行下一輪運(yùn)算; 512、重復(fù)S6?S10,直到進(jìn)程結(jié)束。
2.根據(jù)權(quán)利要求1所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:S5所述實(shí)時調(diào)度策略為:調(diào)度機(jī)制SCHED_OTHER。
3.根據(jù)權(quán)利要求1所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:S5所述實(shí)時調(diào)度策略為:先到先服務(wù)的實(shí)時調(diào)度機(jī)制SCHED_FIFO。
4.根據(jù)權(quán)利要求1所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:S5所述實(shí)時調(diào)度策略為:基于時間片輪轉(zhuǎn)的實(shí)時調(diào)度機(jī)制SCHED_RR。
5.根據(jù)權(quán)利要求1所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:S6所述定時器為ITIMER_REAL, ITIMER_VIRTUAL 和 IHMER_PROF。
6.根據(jù)權(quán)利要求1所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:S8所述調(diào)用GPU的Kernel進(jìn)行脈沖壓縮算法的計算,可以采用時域脈沖壓縮方法,可以采用頻域脈沖壓縮方法。
7.根據(jù)權(quán)利要求6所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:所述時域脈沖壓縮方法具體為:使回波信號通過一個脈沖壓縮匹配濾波器進(jìn)行卷積運(yùn)算,輸出脈沖壓縮結(jié)果S。(t) = Si (t)*h(t),所述回波信號通過脈沖壓縮匹配濾波器的時域形式為m=-ο,其中,Ss表示發(fā)射信號的時域形式,td表示從發(fā)射信號到接收信號的時間延遲,K表示一個增益系數(shù),Si (t)表示所述回波信號的時域形式,t為時間軸上的時間值,t e [0, + °° ]。
8.根據(jù)權(quán)利要求6所述的一種并行雷達(dá)脈沖壓縮方法,其特征在于:所述頻域脈沖壓縮方法具體為: 步驟1、對回波信號的時域形式進(jìn)行傅里葉變換到頻域,所述回波信號的頻域表現(xiàn)形式
V — Ikn為Si(Ii) = Y S,.㈨其中,Si(H)為所述回波信號的時域離散時間表現(xiàn)形
/7 = 0N式,N表示一個脈沖重復(fù)周期之內(nèi)的信號采樣點(diǎn)數(shù),Si(Ii)表示離散的輸入序列中的第η個值,O 彡 η 彡 N-1,0 ^ k ^ N-1 ;步驟2、對脈沖壓縮匹配濾波器的時域形式進(jìn)行傅里葉變換到頻域,所述脈沖壓縮匹配^ M-]hi濾波器的頻域表示形式為//⑷=Σ其中,h(n)是所述脈沖壓縮匹η = ON配濾波器的離散時域表示; 步驟3、輸出脈沖壓縮結(jié)果SJk) =Si(k)*H(k); 步驟4、對步驟3所述SJk)進(jìn)行傅里葉變換,將所述脈沖壓縮結(jié)果從頻域變換到時域S。(n) = IFFT (S0 (k))。
【文檔編號】G01S7/28GK104181510SQ201410453772
【公開日】2014年12月3日 申請日期:2014年9月5日 優(yōu)先權(quán)日:2014年9月5日
【發(fā)明者】沈曉峰, 邢川, 殷文昭, 杜龍飛, 王軍強(qiáng), 徐敦毅 申請人:電子科技大學(xué)