彭華仁,呂天志
(中電科思儀科技股份有限公司,山東青島,266555)
監(jiān)測接收機(jī)是無線電監(jiān)測、分析與定位等方面的專用設(shè)備,在整個無線電監(jiān)測系統(tǒng)中承擔(dān)著信號搜索與接收等信息收集工作,是無線電管理的重要工具。無線電監(jiān)測是要探測、搜索、截獲無線電管理區(qū)域內(nèi)的無線電信號,通常工作方式為在設(shè)定的無線電頻段內(nèi)進(jìn)行快速掃描搜索,發(fā)現(xiàn)無線電信號并進(jìn)行分析。出于信息安全的角度,現(xiàn)代的各種信號發(fā)射設(shè)備普遍采用突發(fā)的方式對外發(fā)射信號,這些信號大都具有突發(fā)性、瞬態(tài)性的特定,對于監(jiān)測接收機(jī)而言,這些信號的頻率、功率、出現(xiàn)時間、持續(xù)時間都是未知的,為提高這些信號的截獲概率,就要求監(jiān)測接收機(jī)必須具有寬頻段的快速掃描能力。
監(jiān)測接收機(jī)的寬頻段快速掃描能力通常以其全景掃描模式的掃描速度進(jìn)行衡量,全景掃描是接收機(jī)以最大FFT帶寬在設(shè)定的頻率范圍內(nèi)進(jìn)行連續(xù)掃描,每次掃描以最大帶寬的頻率窗口連續(xù)相接,從而橫貫整個預(yù)定義的掃描范圍。每次掃描包括參數(shù)設(shè)置、硬件采集、軟件數(shù)據(jù)處理等幾個部分,掃描花費(fèi)時間越短,掃描速度越快。本文主要從掃描流程優(yōu)化、多線程并行數(shù)據(jù)處理、軟件代碼優(yōu)化三個方面進(jìn)行重點(diǎn)設(shè)計(jì),以減小監(jiān)測接收機(jī)的數(shù)據(jù)處理時間,實(shí)現(xiàn)監(jiān)測接收機(jī)寬頻段的快速掃描。
目前,監(jiān)測接收機(jī)大多采用數(shù)字中頻體制,其架構(gòu)如圖1所示。該架構(gòu)的基本工作流程是將天線接收的無線電信號先經(jīng)過預(yù)選濾波器進(jìn)行預(yù)選濾波,再與本地振蕩器產(chǎn)生的本振信號進(jìn)行混頻,生成中頻信號,再經(jīng)過中頻濾波后進(jìn)行采樣,然后利用FPGA進(jìn)行數(shù)字中頻處理,產(chǎn)生所需的頻譜數(shù)據(jù),交由嵌入式CPU進(jìn)行后續(xù)處理與顯示。根據(jù)實(shí)現(xiàn)方式,可將監(jiān)測接收機(jī)的整個掃描過程大體分為硬件參數(shù)設(shè)置、硬件采集與軟件處理等幾個部分,為提高掃描速度,需要同步減小參數(shù)設(shè)置時間、硬件采集時間以及軟件處理時間。本文主要針對與軟件有關(guān)的掃描控制流程、數(shù)據(jù)處理等進(jìn)行設(shè)計(jì),以減小軟件處理時間。
監(jiān)測接收機(jī)全景掃描模式下的掃描流程一般包括硬件參數(shù)設(shè)置、FPGA測量、中斷響應(yīng)、數(shù)據(jù)讀取與處理等幾個部分。啟動全景掃描后,整個掃描頻段將由多次掃描拼接完成,每個掃描由CPU首先設(shè)置硬件參數(shù)、啟動FPGA測量,然后FPGA進(jìn)行采集與數(shù)字中頻處理,產(chǎn)生頻譜數(shù)據(jù)并通過中斷通知CPU讀取數(shù)據(jù),CPU讀取頻譜數(shù)據(jù),最后顯示處理并計(jì)算下一個掃描頻點(diǎn)的硬件控制參數(shù)。CPU軟件與監(jiān)測接收機(jī)硬件之間的交互過程如圖2所示。圖中灰色虛線部分表示在整個掃描流程中需要重復(fù)執(zhí)行的過程。
圖1 數(shù)字中頻體制的監(jiān)測接收機(jī)架構(gòu)
圖2 CPU軟件與監(jiān)測接收機(jī)硬件交互過程
圖3 改進(jìn)后的CPU軟件與監(jiān)測接收機(jī)硬件交互過程
上述的掃描控制流程,由CPU軟件負(fù)責(zé)整個掃描流程的調(diào)度,每個掃描頻點(diǎn)的硬件參數(shù)設(shè)置、硬件采集、數(shù)據(jù)處理過程都是串行進(jìn)行的,F(xiàn)PGA在完成當(dāng)前掃描頻點(diǎn)的采集與數(shù)字中頻處理之后,需要等待CPU軟件處理完成當(dāng)前頻點(diǎn)的頻譜數(shù)據(jù)之后,才能啟動下一掃描頻點(diǎn)的硬件參數(shù)設(shè)置、采集與處理。為了提高掃描速度,可對該掃描控制流程進(jìn)行優(yōu)化,將掃描流程的控制權(quán)交由FPGA完成,CPU軟件負(fù)責(zé)批量設(shè)置硬件控制參數(shù)、讀取頻譜數(shù)據(jù)、顯示處理等工作,優(yōu)化后的CPU軟件與監(jiān)測接收機(jī)硬件之間的交互過程如圖3所示。
圖4 CPU軟件掃描流程圖
改進(jìn)后的掃描流程,其工作過程大體為:CPU軟件首先根據(jù)用戶設(shè)定的掃描頻段計(jì)算所有掃描頻點(diǎn)對應(yīng)的硬件參數(shù),包括測量參數(shù)、通道控制參數(shù)和本振控制參數(shù)等,并批量發(fā)送給FPGA,后續(xù)掃描流程的控制交由FPGA負(fù)責(zé),然后啟動測量,并主動查詢是否有頻譜數(shù)據(jù),若無繼續(xù)查詢,若有則進(jìn)行頻譜數(shù)據(jù)的后續(xù)處理,處理完成后繼續(xù)查詢。在這一掃描流程中可實(shí)現(xiàn)硬件采集與CPU軟件數(shù)據(jù)處理的并行處理。CPU軟件的掃描流程圖如圖4所示。
由于FPGA不適合對數(shù)據(jù)進(jìn)行對數(shù)運(yùn)算等操作,F(xiàn)PGA產(chǎn)生的頻譜數(shù)據(jù)為線性數(shù)據(jù),而最終顯示到用戶界面的數(shù)據(jù)為對數(shù)數(shù)據(jù),為此需要進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,同時還需要將全景掃描過程中每次掃描產(chǎn)生的頻譜數(shù)據(jù)映射到顯示屏幕的像素點(diǎn)上,頻譜數(shù)據(jù)個數(shù)與顯示像素點(diǎn)數(shù)量不一致,需要進(jìn)行插值或抽取處理。這些對數(shù)據(jù)的后續(xù)處理均在CPU軟件中完成,當(dāng)用戶選擇的分辨率帶寬較小時,每次掃描產(chǎn)生的頻譜數(shù)據(jù)量會比較大,數(shù)據(jù)的處理時間就會比較長,因此需要采用多線程并行處理的方式進(jìn)行數(shù)據(jù)的并行處理,以加快數(shù)據(jù)處理速度。
圖5 多線程數(shù)據(jù)處理流程
根據(jù)功能實(shí)現(xiàn),將監(jiān)測接收機(jī)CPU軟件劃分為人機(jī)界面顯示線程(也是軟件的主線程)、掃描控制線程、數(shù)據(jù)處理線程。其中,數(shù)據(jù)處理線程根據(jù)頻譜數(shù)據(jù)量的大小劃分為多個數(shù)據(jù)處理子線程,將頻譜數(shù)據(jù)進(jìn)行分段并行處理。數(shù)據(jù)處理線程的處理流程如圖5所示。
其中,測量數(shù)據(jù)處理專用線程池中軟件處理子線程的個數(shù)n可根據(jù)軟件運(yùn)行平臺硬件性能進(jìn)行優(yōu)化配置。
CPU軟件采用C++語言進(jìn)行編碼實(shí)現(xiàn),在編碼時采用代碼優(yōu)化設(shè)計(jì),以提高程序的執(zhí)行效率,減小代碼的運(yùn)行時間。本軟件在編碼時采用了如下的優(yōu)化方法:
(1)選用合適的數(shù)據(jù)類型
由于本軟件中使用了大量的乘法運(yùn)算,為此,筆者首先在所選CPU平臺上進(jìn)行了各種數(shù)據(jù)類型的乘法運(yùn)算效率的測試,然后根據(jù)測試結(jié)果,在保證數(shù)據(jù)精度和數(shù)據(jù)范圍的前提下,選取合適的數(shù)據(jù)類型。部分測試代碼如圖6所示。
圖6 測試乘法運(yùn)算效率代碼
(2)使用內(nèi)聯(lián)函數(shù)減少函數(shù)調(diào)用
對于普通函數(shù)的調(diào)用,程序會先從主函數(shù)的調(diào)用點(diǎn)跳轉(zhuǎn)去執(zhí)行被調(diào)函數(shù),等被調(diào)函數(shù)執(zhí)行完后,再返回主函數(shù)繼續(xù)執(zhí)行,這會占用一些時間。而使用內(nèi)聯(lián)函數(shù),可以節(jié)省這部分時間。為此,編碼時對于頻繁調(diào)用的簡單函數(shù)加入inline關(guān)鍵字。
(3)使用memcpy語句代替for循環(huán)
對于循環(huán)賦值語句,使用memcpy語句代替for循環(huán)語句,可減少程序執(zhí)行時間。
(4)循環(huán)展開
循環(huán)展開指將循環(huán)計(jì)數(shù)展開,以減少循環(huán)迭代的次數(shù)。循環(huán)展開代碼示例如下所示。
展開前 展開后
for(int i=0; i<1000; i++) for(int i=0; i<1000; i+5)
{ {
a +=b; a += b;
} a += b;
a += b;
a += b;
a += b;
}
上述所示的循環(huán)展開示例,迭代次數(shù)可由1000次減少到200次,但是代碼量會相應(yīng)的增加,同時實(shí)際代碼中的循環(huán)體也不會像示例中的這么簡單,因此實(shí)際使用時需要根據(jù)實(shí)際情況進(jìn)行循環(huán)展開。
上文所述的快速掃描設(shè)計(jì)方法已在國產(chǎn)某型手持式監(jiān)測接收機(jī)上進(jìn)行了實(shí)現(xiàn),筆者按照ITU-R SM.1839-1建議書《測量無線電監(jiān)測接收機(jī)掃描速度的測試程序》中推薦的方法對該手持式監(jiān)測接收機(jī)全景掃描模式下的掃描速度進(jìn)行了實(shí)際測試。測試過程為:設(shè)置信號源為頻率掃描,掃描起始頻率3GHz,終止頻率6GHz,輸出功率-30dBm,掃描點(diǎn)數(shù)101,每個掃描頻點(diǎn)的駐留時間為150ms,設(shè)置手持式監(jiān)測接收機(jī)掃描模式為全景掃描,起始頻率3GHz,終止頻率6GHz,顯示最大保持為開,啟動掃描,若監(jiān)測接收機(jī)能夠全部捕獲信號源每個頻點(diǎn)的輸出信號,即可根據(jù)上述設(shè)置參數(shù)計(jì)算得出監(jiān)測接收機(jī)的掃描速度,若不能全部捕獲則需要增大信號源的駐留時間,直至監(jiān)測接收機(jī)能夠捕獲到全部信號。監(jiān)測接收機(jī)的測試過程圖如圖7所示。
圖7 掃描速度測試圖
通過測試圖可以看出,當(dāng)信號源每個頻點(diǎn)的駐留時間為150ms時,監(jiān)測接收機(jī)能夠全部捕獲信號源每個頻點(diǎn)的信號,為此,可以通過計(jì)算得出監(jiān)測接收機(jī)的掃描速度為3GHz/150ms,即20GHz/s,使用同樣測試方法對應(yīng)用該快速掃描設(shè)計(jì)技術(shù)之前的手持式監(jiān)測接收機(jī)全景掃描速度進(jìn)行測試,當(dāng)信號源駐留時間提高到1200ms左右時,接收機(jī)才能夠全部捕獲每個駐留頻點(diǎn)的輸出信號,由此可見使用該快速掃描設(shè)計(jì)技術(shù)后,掃描速度相比之前提高了近8倍,該設(shè)計(jì)技術(shù)行之有效。
本文針對監(jiān)測接收機(jī)快速掃描的測試需求,研究了掃描流程優(yōu)化設(shè)計(jì)、軟件多線程并行處理設(shè)計(jì)以及軟件代碼優(yōu)化設(shè)計(jì)技術(shù),并將這些設(shè)計(jì)技術(shù)應(yīng)用到了國產(chǎn)某手持式監(jiān)測接收機(jī)上,實(shí)現(xiàn)了該監(jiān)測接收機(jī)的寬頻段快速掃描。同時,這些設(shè)計(jì)技術(shù)還可以應(yīng)用到其他同類型的監(jiān)測接收機(jī)類產(chǎn)品中。