郭霞,張永輝,陳真佳,劉偉
(海南大學(xué) 信息科學(xué)技術(shù)學(xué)院,海南 ???570228)
當(dāng)前,無線通信業(yè)務(wù)的迅猛發(fā)展使得對頻譜資源的需求日益增加,但可用的頻譜資源卻越來越少。由此衍生的非法占用授權(quán)頻段的事件頻繁發(fā)生,已經(jīng)嚴(yán)重?fù)p害到授權(quán)用戶的正常通信。現(xiàn)如今的頻譜檢測設(shè)備雖然可以實時檢測到某些頻段有異常信號,但往往受限于有限的存儲空間,不能將所有頻譜數(shù)據(jù)實時保存下來,用于后續(xù)的數(shù)據(jù)分析和處理。
文獻[1-4]對多種頻譜檢測的算法進行了研究,實現(xiàn)了對無線電信號的實時檢測,但是都未對頻譜數(shù)據(jù)進行有效的存儲與管理。能量檢測和循環(huán)平穩(wěn)特征檢測是目前最常用的有效頻譜檢測技術(shù)。文獻[5]對能量檢測和循環(huán)平穩(wěn)特征檢測兩種方法進行了性能比較,循環(huán)平穩(wěn)特征檢測雖然檢測準(zhǔn)確性高但存在著計算復(fù)雜度大、檢測時間長的問題,不適用于長期的實時檢測;能量檢測雖然受噪聲影響較大,但是實現(xiàn)簡單、計算復(fù)雜度低、速度較快,被廣泛應(yīng)用于認(rèn)知無線電網(wǎng)絡(luò)中。文獻[6]分析了無線電管理的現(xiàn)狀和存在問題,闡述了大數(shù)據(jù)在無線電頻譜資源管理中的應(yīng)用,但是僅對無線電頻譜大數(shù)據(jù)應(yīng)用的關(guān)鍵技術(shù)進行了理論分析,并未具體實現(xiàn)。文獻[7]探討了如何實現(xiàn)對頻譜資源的直觀展示和深入探索,并提出如何在龐大的數(shù)據(jù)庫中更高效地甄別和挖掘頻譜數(shù)據(jù)有效信息這一問題。
基于上述問題,提出一種電磁信號檢測系統(tǒng),建立多個節(jié)點進行頻譜檢測,將每個節(jié)點的數(shù)據(jù)匯總分析,實現(xiàn)對無線電頻譜資源的性能分析,挖掘有價值頻譜數(shù)據(jù)信息,實現(xiàn)頻譜可視化[8],從而指導(dǎo)認(rèn)知用戶更加有效的利用頻譜資源?;陂L期的實時檢測這一需求,該系統(tǒng)選用能量檢測方法[9]。通過軟件無線電對頻譜資源的數(shù)據(jù)進行采集,實現(xiàn)對無線電信號的實時檢測;并將實時的頻譜數(shù)據(jù)存儲在數(shù)據(jù)庫中,用戶根據(jù)檢測需求通過上位機來發(fā)送頻譜檢測指令,同時完成對數(shù)據(jù)的分析處理。
系統(tǒng)實現(xiàn)了實時的頻譜檢測、數(shù)據(jù)存儲、數(shù)據(jù)分析處理等多種功能,用戶可以通過上位機向主控設(shè)備發(fā)送指令,主控設(shè)備解析指令后,按照上位機的要求完成對頻譜數(shù)據(jù)庫的操作以及對頻譜數(shù)據(jù)的分析和處理,并將結(jié)果反饋給上位機。
系統(tǒng)由信號采集模塊、主控模塊、數(shù)據(jù)庫、上位機四部分組成,選用Linux平臺作為主控模塊和服務(wù)端,軟件無線電作為射頻模塊,Android平臺終端如手機、平板作為客戶端,并在Linux平臺上搭建頻譜數(shù)據(jù)庫,用于數(shù)據(jù)的存儲,主控模塊和上位機通過套接字建立通信,主控模塊通過USB驅(qū)動射頻模塊。總體設(shè)計框圖如圖1所示。
圖1 總體設(shè)計框圖Fig.1 Diagram of overall design
本系統(tǒng)的整體架構(gòu)以及各個模塊設(shè)計,對比現(xiàn)有的頻譜檢測系統(tǒng),具有下列幾點優(yōu)勢:
1)現(xiàn)階段使用的頻譜檢測設(shè)備價格較高,體積較大,本系統(tǒng)使用了靈活性強、開源程度高、性價比高的軟件無線電作為通信系統(tǒng)的信號采集模塊,頻段、帶寬、調(diào)制方式等參數(shù)可調(diào),更便于應(yīng)用拓展。
2)建立頻譜數(shù)據(jù)庫,可以存儲大量歷史數(shù)據(jù),便于頻譜數(shù)據(jù)有效信息的挖掘,實現(xiàn)對無線電信號的特性分析。
3)選用Android控制端作為上位機進行頻譜數(shù)據(jù)的檢測和處理,方便快捷。
4)采用TCP/IP協(xié)議作為主控模塊和控制端的通信協(xié)議,使得主控模塊控制腳本和上位機應(yīng)用得以并行開發(fā)。使用軟件工程思想提高主控模塊和控制端的獨立性,使用TCP/IP協(xié)議降低設(shè)備之間的通信壁壘。上位機不直接接觸硬件結(jié)構(gòu),移植性較強;設(shè)備不區(qū)分網(wǎng)絡(luò)硬件,擁有極高的可靠性,可以為用戶提供可靠的服務(wù)。
系統(tǒng)的信號采集模塊選用的是Software Defined Radio(SDR),SDR主要由天線、射頻端、高速模/數(shù)和數(shù)/模轉(zhuǎn)換器,以及高速數(shù)字信號處理器(DSP或FPGA)等組成[10]。軟件無線電的軟、硬件開源性較高,有很強的靈活性,便于用戶自行開發(fā)。軟件無線電結(jié)構(gòu)示意圖如圖2所示[11]。
選用搭建Linux系統(tǒng)的設(shè)備作為主控模塊,主控模塊通過USB串口與信號采集模塊連接向信號采集模塊發(fā)送控制指令。主控模塊具有Ad Hoc功能,Android控制端可以通過連接主控設(shè)備的熱點接入系統(tǒng)。主控模塊作為服務(wù)端,上位機作為客戶端通過TCP/IP協(xié)議訪問主控模塊向主控模塊發(fā)送控制指令。主控模塊接收到指令后,通過USB驅(qū)動軟件無線電模塊進行頻譜檢測,將獲取的頻譜數(shù)據(jù)存儲到本地數(shù)據(jù)庫,并將數(shù)據(jù)反饋給上位機處理。
為了實現(xiàn)多任務(wù)信號采集,主控模塊提供多進程驅(qū)動多個SDR進行頻譜檢測,檢測的同時將頻譜數(shù)據(jù)存儲到數(shù)據(jù)庫,保證頻譜檢測數(shù)據(jù)訪問的實時性和頻譜數(shù)據(jù)庫的完整性。檢測數(shù)據(jù)以SDR的序列號作為唯一識別碼,用戶可以根據(jù)相應(yīng)的識別碼訪問SDR頻譜數(shù)據(jù)。主控模塊的控制流程圖如圖3所示。多進程同時訪問同一檢測腳本會出現(xiàn)函數(shù)重入問題,導(dǎo)致數(shù)據(jù)不同步或者運行程序出錯。為了避免這一現(xiàn)象,在進程間加入了信號量實現(xiàn)操作鎖,保證同一時刻只有一個進程占用程序。當(dāng)信號量值大于0時,則進程可以調(diào)用頻譜檢測腳本,否則進程進入阻塞狀態(tài)。系統(tǒng)中使用信號量實現(xiàn)進程間通信的流程圖如圖4所示。
圖3 主控模塊控制流程圖Fig.3 Control flow of master control module
圖4 信號量實現(xiàn)進程間通信流程圖Fig.4 Flow chart of realizing inter-process communication by means of signal amount
2.3.1 數(shù)據(jù)庫
數(shù)據(jù)庫是存儲在計算機內(nèi)、有組織的、可為各種用戶所共享的大量數(shù)據(jù)的集合。頻譜數(shù)據(jù)包含豐富的數(shù)字特征,在完成基礎(chǔ)的頻譜檢測功能后,應(yīng)該將收集到的頻譜數(shù)據(jù)保存起來,用于后續(xù)的數(shù)據(jù)分析和處理。頻譜數(shù)據(jù)庫包含各種常用信號樣本,如模擬調(diào)制、數(shù)字調(diào)制,以及常用的無線電信號的時頻特征和相關(guān)信息[12];可根據(jù)多種條件及其組合對信號進行篩選和搜索,支持模糊查找,快速匹配信號特征;數(shù)據(jù)庫易于擴展,用戶可方便地添加新的樣本信號和相關(guān)信息,可將歷次記錄到的干擾信號和排查方法存檔,便于對照參考。
為了使數(shù)據(jù)更好的保存,在主控設(shè)備上搭建了MySQL數(shù)據(jù)庫。MySQL數(shù)據(jù)庫使用C/C++語言編寫,源代碼具有很好的移植性;支持多線程,充分利用CPU資源;而且它為多種編程語言提供了API,方便用戶編寫自己的程序。MySQL提供了管理和優(yōu)化數(shù)據(jù)庫操作的工具,可以處理擁有上千萬條記錄的數(shù)據(jù)庫。本系統(tǒng)設(shè)計的頻譜數(shù)據(jù)庫選用C語言作為應(yīng)用程序接口,移植性較好。
2.3.2 頻譜數(shù)據(jù)庫設(shè)計
系統(tǒng)中頻譜數(shù)據(jù)庫的設(shè)計至關(guān)重要,設(shè)計的好壞關(guān)系到后期數(shù)據(jù)查找和數(shù)據(jù)處理的難易程度。根據(jù)頻譜數(shù)據(jù)的特征和后期處理的需求,將頻譜數(shù)據(jù)庫分為3個功能模塊:數(shù)據(jù)管理、數(shù)據(jù)篩選和數(shù)據(jù)處理。頻譜數(shù)據(jù)庫整體設(shè)計示意圖如圖5所示。為了方便后期數(shù)據(jù)的篩選和處理,數(shù)據(jù)庫中創(chuàng)建兩種類型的表:存儲頻譜檢測任務(wù)的任務(wù)表和存儲頻譜檢測數(shù)據(jù)的數(shù)據(jù)表。任務(wù)表存儲每次上位機發(fā)送的頻譜檢測指令,包括時間、起始頻率、采樣間隔、終止頻率,以及指令所對應(yīng)的SDR的序列號。系統(tǒng)斷電后,且上位機沒有發(fā)送指令時,系統(tǒng)可以從數(shù)據(jù)庫的任務(wù)表中讀取上一次頻譜檢測的指令繼續(xù)工作。
圖5 頻譜數(shù)據(jù)庫整體設(shè)計示意圖Fig.5 Schematic diagram for overall design of frequency spectrum database
為了確保頻譜數(shù)據(jù)的同步性,每個數(shù)據(jù)表均由時間、溫度、濕度、頻點等屬性描述,數(shù)據(jù)庫中定義表的基本語句為:
CREATE TABLE IF NOT EXISTS Spectrum(time varchar(25)primary key,temp varchar(25),humidity varchar(25),freq_point decimal(6,3));
系統(tǒng)測試時,選用的頻譜檢測的頻段為10 MHz~1 GHz,采樣間隔為100 kHz,數(shù)據(jù)表中存儲的是每個頻點的能量值。通過計算可知,大概有10 000個頻點,即需要建立的表格應(yīng)有10 000列,但MySQL數(shù)據(jù)庫對表格的列數(shù)有限制,需要對表格進行縱向擴展。系統(tǒng)根據(jù)上位機發(fā)送的頻譜檢測命令的起始頻率、終止頻率以及采樣間隔,計算頻譜檢測頻點的個數(shù)和所需要創(chuàng)建的數(shù)據(jù)表的個數(shù)。為了簡化計算,設(shè)定每個表格中存放1 000個頻點,每個表格中均有時間、溫度、濕度三個屬性,便于后期數(shù)據(jù)的篩選和處理。
軟件無線電進行頻譜檢測時,會將數(shù)據(jù)寫入到名為“scan_freq”的文件中,需要在文件中逐行讀取數(shù)據(jù),將獲得的每幀頻譜數(shù)據(jù)添加到數(shù)據(jù)庫中。數(shù)據(jù)庫向表中添加數(shù)據(jù)的基本語句為:
INSERT INTO Spectrum(time ,temp,humidity,power)VALUES(‘2017’,‘NULL’,‘NULL’,‘-120’);
為了更好地觀察數(shù)據(jù)庫中的數(shù)據(jù),安裝數(shù)據(jù)庫可視化工具MySQL Workbench,任務(wù)表和數(shù)據(jù)表的格式見圖6。
圖6 數(shù)據(jù)庫創(chuàng)建表格式Fig.6 Formats of tables created in database
系統(tǒng)選用Android設(shè)備作為上位機,采用Client/Server(C/S)架構(gòu),實現(xiàn)和主控模塊之間的交互。C/S架構(gòu),即客戶端和服務(wù)端的通信連接模式,充分利用客戶端和服務(wù)器端的環(huán)境,在客戶端進行具體的運算和數(shù)據(jù)的處理,服務(wù)器端任務(wù)較輕,為客戶端提供篩選數(shù)據(jù)的接口,將任務(wù)合理分配到Client端和Server端,降低了系統(tǒng)的通信開銷。套接字(Socket)是一個通用的網(wǎng)絡(luò)編程接口,使用套接字通信協(xié)議進行通信的設(shè)備,均被劃分為服務(wù)器端和客戶端。本系統(tǒng)中主控模塊作為服務(wù)器端首先通過組播發(fā)布自己的IP地址,本地開啟端口進行監(jiān)聽,此時該監(jiān)聽進程從運行狀態(tài)轉(zhuǎn)換成阻塞狀態(tài),實時等待客戶端發(fā)送連接請求。上位機作為客戶端,向服務(wù)器端發(fā)出創(chuàng)建Socket連接請求。服務(wù)器端接收到請求,響應(yīng)狀態(tài)從阻塞狀態(tài)轉(zhuǎn)換成運行狀態(tài)。服務(wù)器端反饋Socket描述,客戶端接收到描述后發(fā)送確認(rèn)信息,服務(wù)器端收到確認(rèn)信息則標(biāo)志創(chuàng)建連接成功[13]。具體流程如圖7所示。
圖7 Socket通信流程圖Fig.7 Flow chart of Socket communication
主控模塊和Android控制端采用套接字進行通信,Android控制端向主控模塊詢問SDR的序列號信息,用戶可以根據(jù)主控模塊返回的SDR信息,向?qū)?yīng)的SDR發(fā)送相應(yīng)的頻譜檢測指令,或者查看相對應(yīng)的SDR返回的頻譜數(shù)據(jù)制成的折線圖。同時用戶可以在上位機查看頻譜數(shù)據(jù)庫中存放的數(shù)據(jù)表格的目錄,篩選所需的數(shù)據(jù)進行分析處理。Android控制端界面如圖8所示。
圖8 Android控制端界面Fig.8 Interface of Android control terminal
頻譜數(shù)據(jù)庫中包含大量的歷史數(shù)據(jù),可以利用這些數(shù)據(jù)回放之前任一時刻某一頻段的能量瀑布圖,分析電磁信號的時頻特征,計算頻道占用度和頻段占用度。為了驗證本系統(tǒng)采集的頻譜數(shù)據(jù)的準(zhǔn)確性,在數(shù)據(jù)庫中利用select語句選取某一時刻某一頻段的數(shù)據(jù),采用Matlab工具進行數(shù)據(jù)仿真,將仿真結(jié)果和頻譜儀的數(shù)據(jù)進行對比。圖9為Matlab仿真得到的700~780 MHz的瀑布圖,圖10為專業(yè)頻譜儀檢測到的同頻段的瀑布圖。
圖9 系統(tǒng)仿真獲得的瀑布圖Fig.9 Waterfall map obtained by system simulation
圖10 專業(yè)頻譜儀檢測的瀑布圖Fig.10 Waterfall map of detection by professional frequency spectrum analyzer
由于SDR和專業(yè)頻譜儀過濾噪聲的能力不同,SDR對噪聲的閾值較低,可以檢測到更多的微弱信號,因此兩幅瀑布圖稍有差異。但是對比信號強度較強的信號,本系統(tǒng)和專業(yè)頻譜設(shè)備檢測到的無線電信號基本一致。
驗證了數(shù)據(jù)的準(zhǔn)確性后,可以利用頻譜數(shù)據(jù)庫中的數(shù)據(jù)計算某一頻點的頻道占用度。信號強度大于H時(H為用戶自己設(shè)定的頻點被占用的閾值),認(rèn)為該時刻該頻點被占用。計算頻道占用度的核心代碼如下:
測試時,設(shè)置閾值H=-100 dB,得到時間2017年11月21日12:25—17:20,頻點763.5 MHz的頻道占用度為10.36%。運行結(jié)果如圖11所示。
圖11 運行結(jié)果Fig.11 Running result
本文提出的基于頻譜數(shù)據(jù)庫的電磁信號檢測系統(tǒng),選用開源程度高、靈活性強的軟件無線電作為信號采集模塊,同時采用C/S架構(gòu)實現(xiàn)客戶端和服務(wù)器端的交互。不但實現(xiàn)了對無線電信號的實時檢測,而且能將頻譜數(shù)據(jù)實時保存到數(shù)據(jù)庫中,便于后續(xù)實現(xiàn)對無線電信號的特性分析和有效信息的挖掘。但由于選用了實現(xiàn)相對簡單的能量檢測算法,使得在噪聲復(fù)雜的環(huán)境下,可能會造成數(shù)據(jù)誤差過大。今后將對這一算法加以優(yōu)化,確保采集的頻譜數(shù)據(jù)更為準(zhǔn)確。后期將加強對無線電信號的時頻特性分析,以更好地挖掘頻譜數(shù)據(jù)中的有用信息,實現(xiàn)對有限頻譜資源更加高效合理的利用。