彭華仁,呂天志
(中電科思儀科技股份有限公司,山東青島,266555)
監測接收機是無線電監測、分析與定位等方面的專用設備,在整個無線電監測系統中承擔著信號搜索與接收等信息收集工作,是無線電管理的重要工具。無線電監測是要探測、搜索、截獲無線電管理區域內的無線電信號,通常工作方式為在設定的無線電頻段內進行快速掃描搜索,發現無線電信號并進行分析。出于信息安全的角度,現代的各種信號發射設備普遍采用突發的方式對外發射信號,這些信號大都具有突發性、瞬態性的特定,對于監測接收機而言,這些信號的頻率、功率、出現時間、持續時間都是未知的,為提高這些信號的截獲概率,就要求監測接收機必須具有寬頻段的快速掃描能力。
監測接收機的寬頻段快速掃描能力通常以其全景掃描模式的掃描速度進行衡量,全景掃描是接收機以最大FFT帶寬在設定的頻率范圍內進行連續掃描,每次掃描以最大帶寬的頻率窗口連續相接,從而橫貫整個預定義的掃描范圍。每次掃描包括參數設置、硬件采集、軟件數據處理等幾個部分,掃描花費時間越短,掃描速度越快。本文主要從掃描流程優化、多線程并行數據處理、軟件代碼優化三個方面進行重點設計,以減小監測接收機的數據處理時間,實現監測接收機寬頻段的快速掃描。
目前,監測接收機大多采用數字中頻體制,其架構如圖1所示。該架構的基本工作流程是將天線接收的無線電信號先經過預選濾波器進行預選濾波,再與本地振蕩器產生的本振信號進行混頻,生成中頻信號,再經過中頻濾波后進行采樣,然后利用FPGA進行數字中頻處理,產生所需的頻譜數據,交由嵌入式CPU進行后續處理與顯示。根據實現方式,可將監測接收機的整個掃描過程大體分為硬件參數設置、硬件采集與軟件處理等幾個部分,為提高掃描速度,需要同步減小參數設置時間、硬件采集時間以及軟件處理時間。本文主要針對與軟件有關的掃描控制流程、數據處理等進行設計,以減小軟件處理時間。

圖1 數字中頻體制的監測接收機架構
監測接收機全景掃描模式下的掃描流程一般包括硬件參數設置、FPGA測量、中斷響應、數據讀取與處理等幾個部分。啟動全景掃描后,整個掃描頻段將由多次掃描拼接完成,每個掃描由CPU首先設置硬件參數、啟動FPGA測量,然后FPGA進行采集與數字中頻處理,產生頻譜數據并通過中斷通知CPU讀取數據,CPU讀取頻譜數據,最后顯示處理并計算下一個掃描頻點的硬件控制參數。CPU軟件與監測接收機硬件之間的交互過程如圖2所示。圖中灰色虛線部分表示在整個掃描流程中需要重復執行的過程。

圖2 CPU軟件與監測接收機硬件交互過程
上述的掃描控制流程,由CPU軟件負責整個掃描流程的調度,每個掃描頻點的硬件參數設置、硬件采集、數據處理過程都是串行進行的,FPGA在完成當前掃描頻點的采集與數字中頻處理之后,需要等待CPU軟件處理完成當前頻點的頻譜數據之后,才能啟動下一掃描頻點的硬件參數設置、采集與處理。為了提高掃描速度,可對該掃描控制流程進行優化,將掃描流程的控制權交由FPGA完成,CPU軟件負責批量設置硬件控制參數、讀取頻譜數據、顯示處理等工作,優化后的CPU軟件與監測接收機硬件之間的交互過程如圖3所示。

圖3 改進后的CPU軟件與監測接收機硬件交互過程
改進后的掃描流程,其工作過程大體為:CPU軟件首先根據用戶設定的掃描頻段計算所有掃描頻點對應的硬件參數,包括測量參數、通道控制參數和本振控制參數等,并批量發送給FPGA,后續掃描流程的控制交由FPGA負責,然后啟動測量,并主動查詢是否有頻譜數據,若無繼續查詢,若有則進行頻譜數據的后續處理,處理完成后繼續查詢。在這一掃描流程中可實現硬件采集與CPU軟件數據處理的并行處理。CPU軟件的掃描流程圖如圖4所示。

圖4 CPU軟件掃描流程圖
由于FPGA不適合對數據進行對數運算等操作,FPGA產生的頻譜數據為線性數據,而最終顯示到用戶界面的數據為對數數據,為此需要進行數據的轉換,同時還需要將全景掃描過程中每次掃描產生的頻譜數據映射到顯示屏幕的像素點上,頻譜數據個數與顯示像素點數量不一致,需要進行插值或抽取處理。這些對數據的后續處理均在CPU軟件中完成,當用戶選擇的分辨率帶寬較小時,每次掃描產生的頻譜數據量會比較大,數據的處理時間就會比較長,因此需要采用多線程并行處理的方式進行數據的并行處理,以加快數據處理速度。
根據功能實現,將監測接收機CPU軟件劃分為人機界面顯示線程(也是軟件的主線程)、掃描控制線程、數據處理線程。其中,數據處理線程根據頻譜數據量的大小劃分為多個數據處理子線程,將頻譜數據進行分段并行處理。數據處理線程的處理流程如圖5所示。

圖5 多線程數據處理流程
其中,測量數據處理專用線程池中軟件處理子線程的個數n可根據軟件運行平臺硬件性能進行優化配置。
CPU軟件采用C++語言進行編碼實現,在編碼時采用代碼優化設計,以提高程序的執行效率,減小代碼的運行時間。本軟件在編碼時采用了如下的優化方法:
(1)選用合適的數據類型
由于本軟件中使用了大量的乘法運算,為此,筆者首先在所選CPU平臺上進行了各種數據類型的乘法運算效率的測試,然后根據測試結果,在保證數據精度和數據范圍的前提下,選取合適的數據類型。部分測試代碼如圖6所示。

圖6 測試乘法運算效率代碼
(2)使用內聯函數減少函數調用
對于普通函數的調用,程序會先從主函數的調用點跳轉去執行被調函數,等被調函數執行完后,再返回主函數繼續執行,這會占用一些時間。而使用內聯函數,可以節省這部分時間。為此,編碼時對于頻繁調用的簡單函數加入inline關鍵字。
(3)使用memcpy語句代替for循環
對于循環賦值語句,使用memcpy語句代替for循環語句,可減少程序執行時間。
(4)循環展開
循環展開指將循環計數展開,以減少循環迭代的次數。循環展開代碼示例如下所示。

上述所示的循環展開示例,迭代次數可由1000次減少到200次,但是代碼量會相應的增加,同時實際代碼中的循環體也不會像示例中的這么簡單,因此實際使用時需要根據實際情況進行循環展開。
上文所述的快速掃描設計方法已在國產某型手持式監測接收機上進行了實現,筆者按照ITU-R SM.1839-1建議書《測量無線電監測接收機掃描速度的測試程序》中推薦的方法對該手持式監測接收機全景掃描模式下的掃描速度進行了實際測試。測試過程為:設置信號源為頻率掃描,掃描起始頻率3GHz,終止頻率6GHz,輸出功率-30dBm,掃描點數101,每個掃描頻點的駐留時間為150ms,設置手持式監測接收機掃描模式為全景掃描,起始頻率3GHz,終止頻率6GHz,顯示最大保持為開,啟動掃描,若監測接收機能夠全部捕獲信號源每個頻點的輸出信號,即可根據上述設置參數計算得出監測接收機的掃描速度,若不能全部捕獲則需要增大信號源的駐留時間,直至監測接收機能夠捕獲到全部信號。監測接收機的測試過程圖如圖7所示。

圖7 掃描速度測試圖
通過測試圖可以看出,當信號源每個頻點的駐留時間為150ms時,監測接收機能夠全部捕獲信號源每個頻點的信號,為此,可以通過計算得出監測接收機的掃描速度為3GHz/150ms,即20GHz/s,使用同樣測試方法對應用該快速掃描設計技術之前的手持式監測接收機全景掃描速度進行測試,當信號源駐留時間提高到1200ms左右時,接收機才能夠全部捕獲每個駐留頻點的輸出信號,由此可見使用該快速掃描設計技術后,掃描速度相比之前提高了近8倍,該設計技術行之有效。
本文針對監測接收機快速掃描的測試需求,研究了掃描流程優化設計、軟件多線程并行處理設計以及軟件代碼優化設計技術,并將這些設計技術應用到了國產某手持式監測接收機上,實現了該監測接收機的寬頻段快速掃描。同時,這些設計技術還可以應用到其他同類型的監測接收機類產品中。