王曉平
關(guān)鍵詞:HackRF;GNU Radio;無線通信;軟件無線電;數(shù)字調(diào)制
0 引言
在這個(gè)高消耗、快節(jié)奏的時(shí)代,無線通信技術(shù)的多樣化對(duì)無線通信設(shè)備通用性的要求很高,無線通信業(yè)務(wù)的發(fā)展面臨著許多難題與挑戰(zhàn),快速高效且低成本的通信算法的開發(fā)和應(yīng)用是很重要的一項(xiàng)研究?jī)?nèi)容。正是在這些需求的推動(dòng)下,軟件無線電[1]技術(shù)應(yīng)運(yùn)而生。
軟件無線電技術(shù)[2]提升了無線設(shè)備的通用性,節(jié)約了通信系統(tǒng)的升級(jí)換代的成本,實(shí)現(xiàn)了大范圍寬帶頻譜資源的快速獲取,在許多通信領(lǐng)域都有著廣泛的應(yīng)用。在信息安全領(lǐng)域[3],軟件無線電技術(shù)能實(shí)現(xiàn)對(duì)接入的設(shè)備的識(shí)別和接入用戶的具體身份,實(shí)現(xiàn)非法入侵和設(shè)備可靠性檢測(cè),提取載波分析信號(hào)的頻率不同的地方作為特征,識(shí)別硬件的設(shè)備身份,不僅僅改善原有的安全驗(yàn)證機(jī)制,也為網(wǎng)絡(luò)安全技術(shù)發(fā)展提供新方向。在頻譜檢測(cè)方面[4],軟件無線電技術(shù)可以結(jié)合機(jī)器學(xué)習(xí)進(jìn)行無線頻譜檢測(cè)和頻譜識(shí)別,實(shí)現(xiàn)對(duì)無線電信號(hào)的檢測(cè)和信號(hào)方向的感知。
鑒于軟件無線電的優(yōu)點(diǎn),本文設(shè)計(jì)了基于HackRF 的無線通信平臺(tái),介紹了 GNU Radio 編程開發(fā)平臺(tái)和 HackRF 的硬件平臺(tái);在 HackRF 板卡上實(shí)現(xiàn)模擬和數(shù)字信號(hào)的調(diào)制解調(diào)和同步等數(shù)字信號(hào)處理技術(shù)的基礎(chǔ)上,進(jìn)一步研究音頻、序列、視頻流的傳輸,實(shí)現(xiàn)了在軟件無線電平臺(tái)上的無線通信。
1 軟硬件平臺(tái)介紹
1.1 GNU Radio 軟件
GNU Radio[5]作為一個(gè)開源的軟件無線電編程開發(fā)平臺(tái),起源于美國(guó)麻省理工學(xué)院,它為編程能力一般的軟件編制者提供了探索電磁波的機(jī)會(huì),激發(fā)開發(fā)者利用射頻電波的能力,同時(shí)也提供給專業(yè)的無線電研究人員更多開發(fā)的可能。
GNU Radio 采用 Python 和 C++ 混合編程的方式來構(gòu)建程序,C++ 用來實(shí)現(xiàn)一些底層的標(biāo)準(zhǔn)模塊庫(kù)以供 Python 調(diào)用。GNU Radio 實(shí)現(xiàn)了數(shù)字濾波器、傅里葉正反變化、快速傅里葉變換、信源信道編碼、調(diào)制解調(diào)等基本模塊,在軟件中通過流程圖就能搭建一個(gè)通信系統(tǒng)。除了引用其本身提供的庫(kù),GNU Radio 也允許用戶編寫自己的處理模塊及運(yùn)行程序。
1.2 Hack RF 開發(fā)板
HackRF 作為軟件無線電外設(shè),通過 USB 接口與PC 端相連后與 GNU Radio 配合使用,HackRF 相對(duì)其他軟件無線電板卡,其接收帶寬[6]的射頻范圍更大,支持 1 MHz ~ 6 GHz 信號(hào)頻率的發(fā)射和接收,范圍涵蓋了廣播、電視、藍(lán)牙、衛(wèi)星通信等。HackRF 硬件結(jié)構(gòu)如圖1所示,板卡用于信號(hào)接收時(shí),將天線采集到的射頻信號(hào)經(jīng)下變頻變?yōu)橹蓄l信號(hào),再將中頻信號(hào)下變頻為基帶信號(hào),經(jīng) A/D 采樣后將模擬信號(hào)轉(zhuǎn)為數(shù)字信號(hào)后通過 CPLD 和處理器將采樣信號(hào)處理和發(fā)送到 PC 端處理。HackRF 以半雙工通信形式[7]實(shí)現(xiàn)通信信號(hào)的發(fā)射與接收,其發(fā)射過程與接收過程類似。
2 系統(tǒng)原理概述
2.1 軟件無線電
軟件無線電構(gòu)造了一個(gè)在多種情況下可以通用的硬件平臺(tái),滿足將各種功能集成到一款板卡上的要求。同時(shí)為功能定制化提供了方便,以充分實(shí)現(xiàn)無線信號(hào)數(shù)字化為前提條件,提高了可編程性和可升級(jí)性。軟件無線電采用后端的處理單元對(duì)接收后的數(shù)據(jù)進(jìn)行處理,同時(shí)使寬帶以及轉(zhuǎn)換器盡量靠近天線以便減少延遲,提高系統(tǒng)性能,實(shí)現(xiàn)標(biāo)準(zhǔn)化、模塊化、開放性。
理想的軟件無線電[6]接收過程按接收信號(hào)處理順序包括天線射頻接收、AD/DA 信號(hào)采樣數(shù)字化、將數(shù)據(jù)在DSP 或者普通 PC 機(jī)上進(jìn)行處理。但理想結(jié)構(gòu)采樣率高,并且要求的動(dòng)態(tài)范圍大,多倍數(shù)的 AD/DA 轉(zhuǎn)換及高速的 DSP 芯片處理能力不夠,目前的硬件水平實(shí)現(xiàn)不了這樣的結(jié)構(gòu)。因此大部分軟件無線電采用降頻帶通采樣結(jié)構(gòu),這種結(jié)構(gòu)和超外差接收機(jī)類似,經(jīng)過一系列處理的信號(hào)波形好,不會(huì)有很多干擾,雖然射頻部分需要比較復(fù)雜,但實(shí)現(xiàn)起來不算太難。
2.2 GMSK 調(diào)制與解調(diào)
高斯最小頻移鍵控調(diào)制技術(shù)(Gaussian MinimumShift Keying, GMSK) [8]的特點(diǎn)是在將二進(jìn)制的數(shù)字向量流處理之前,將數(shù)據(jù)矢量送先通過一個(gè)高斯濾波器進(jìn)行一個(gè)前期處理濾除溢出的信號(hào)能量,頻譜不再有毛刺。這樣處理之后,信號(hào)的相位圖在碼元變化時(shí)變?yōu)槠交^渡,信號(hào)頻率切換產(chǎn)生的不平穩(wěn)能量就被減小了,主瓣之外的能量衰減快能量小,達(dá)到去除跳變能量的目的,在傳輸相同的數(shù)據(jù)速率的數(shù)據(jù)時(shí),頻率通道間距可以變得更小,聯(lián)系更加緊密。
GNU Radio 中,調(diào)制的輸入是字節(jié)流(帶壓縮位的無符號(hào)字符),輸出是基帶上的復(fù)調(diào)制信號(hào),而解調(diào)則相反。對(duì)于調(diào)制,第一步要將數(shù)據(jù)流變?yōu)?NRZ 碼,將數(shù)據(jù)包解包之后變?yōu)楸忍亓饕员氵M(jìn)行進(jìn)一步的處理;第二步是高斯濾波,由于 GMSK 調(diào)制信號(hào)的相位變化是連續(xù)的,高斯濾波使其進(jìn)入下一個(gè)碼元周期的時(shí)刻相位不發(fā)生變化,從其頻譜特性觀察出發(fā),使其頻譜特性的旁瓣降落緩慢,從而在頻帶外產(chǎn)生多余的頻譜泄漏;第三步就是調(diào)制,GMSK 調(diào)制具有較好的波形和頻譜特征,頻帶相對(duì)來說很窄,可以采用相干解調(diào)來實(shí)現(xiàn)數(shù)據(jù)提取。進(jìn)行解調(diào)時(shí),首先通過一個(gè)正交調(diào)頻解調(diào)模塊,通過計(jì)算相鄰碼元周期變化的相位差,獲得頻率變化信息;緊接著通過 M&M 算法,使符號(hào)同步,時(shí)鐘恢復(fù)塊跟蹤符號(hào)時(shí)鐘并根據(jù)需要重新采樣,該塊的輸出是軟符號(hào)流,最后進(jìn)行二元判決。
2.3 符號(hào)同步
GNU Radio 采用了改進(jìn)的 M&M 算法來實(shí)現(xiàn)符號(hào)同步。M&M 同步算法實(shí)現(xiàn)過程如圖2所示:
在一個(gè)需要實(shí)現(xiàn)解調(diào)的數(shù)字通信系統(tǒng)中,為了恢復(fù)出原始數(shù)據(jù)序列,要實(shí)現(xiàn)兩個(gè)因素:一方面是要消除符號(hào)間的串?dāng)_;另一方面是要實(shí)現(xiàn)精確采樣。因此解調(diào)器的輸出必須以碼元速率周期性地在采樣時(shí)刻采樣。M&M算法的關(guān)鍵點(diǎn)在于要對(duì)采樣時(shí)刻進(jìn)行準(zhǔn)確調(diào)整,通過采樣輸出和判決輸出來實(shí)現(xiàn)調(diào)整,對(duì)采樣和判決輸出數(shù)據(jù)進(jìn)行線性組合,利用這個(gè)線性組合來指示同步誤差的大小,這個(gè)線性組合的值同時(shí)也要反饋給采樣器,用于調(diào)整采樣時(shí)鐘,從而達(dá)到逐漸消除采樣誤差的目的。
3 無線通信平臺(tái)設(shè)計(jì)
3.1 FM 收發(fā)
基于 HackRF 搭建了一個(gè) FM 無線收發(fā)系統(tǒng),信源選取了實(shí)時(shí)錄制的語(yǔ)音信號(hào)進(jìn)行廣播,經(jīng)過重采樣和WBFM 調(diào)制將信號(hào)發(fā)射出去。由于 HackRF 為半雙工通信,實(shí)驗(yàn)使用兩塊板卡,分別用于發(fā)射和接收,實(shí)驗(yàn)發(fā)送端和接收端流程設(shè)計(jì)如圖3所示。軟件模塊包括,軟件模塊包括 osmocom Sink、QT Gui Time Sink、Rational Resampler、WBFM Transmit、WBFM Receive 和 Audio Source 等模塊,其中,osmocom Sink 用于與HackRF 進(jìn)行通信,Rational Resampler 用于平滑波形和調(diào)整采樣率。
實(shí)驗(yàn)結(jié)果如圖4和圖5所示,在 160Mhz 能夠明顯看到信號(hào)頻譜并且清晰聽到廣播。根據(jù)調(diào)制輸出的波形的變化,可以判斷語(yǔ)音信號(hào)是否輸入。當(dāng)沒有聲音時(shí),信號(hào)源波形平坦,是一條幅度為0的直線,當(dāng)聲音來臨,可以觀察到信號(hào)波形起伏、頻率發(fā)生變化。
3.2 調(diào)制解調(diào)
GNU Radio支持多種數(shù)字調(diào)制方式,仿真實(shí)驗(yàn)分別編寫了 GMSK、8PSK、16QAM 調(diào)制解調(diào)的信號(hào)傳輸通道,實(shí)驗(yàn)發(fā)送隨機(jī)序列,通過更換調(diào)制模塊實(shí)現(xiàn)不同方式的調(diào)制。圖6給出了 QAM 調(diào)制的原理框圖,信源采用了 Vector Source 來輸入隨機(jī)序列,然后使用Packet Encoder 進(jìn)行同步并加入前導(dǎo)碼、接入碼和糾錯(cuò)碼,將打包的信息塊解包變?yōu)榉菤w零碼方便判決;接收端判決解調(diào)出原始序列,并且進(jìn)行解碼和糾錯(cuò),使用 QT GUI 有關(guān)模塊畫圖。
圖7為 GMSK 隨機(jī)序列收發(fā)的星座圖和解調(diào)波形圖,可以很清楚地看到,隨機(jī)序列成功被發(fā)射和接收,星座圖四個(gè)象限清楚地分布著星座點(diǎn),GMSK 收發(fā)前后波形相同,即解調(diào)后接收端接收的數(shù)據(jù)恢復(fù)出了發(fā)送序列。
3.3 視頻流傳輸
在本實(shí)驗(yàn)中,使用了 TCP 協(xié)議,通過 socket 來實(shí)現(xiàn) TCP 協(xié)議。TCP 面向連接,進(jìn)行點(diǎn)對(duì)點(diǎn)傳輸,將數(shù)據(jù)應(yīng)該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標(biāo)準(zhǔn)化,具有四個(gè)層級(jí),實(shí)現(xiàn)不同的功能。使用了 OpenCV來操作攝像頭讀取圖像傳輸圖像資源,OpenCV 是一個(gè)計(jì)算機(jī)視覺庫(kù),支持多種語(yǔ)言,Java、python、matlab,由 C++ 編寫,實(shí)現(xiàn)了很多圖像處理和計(jì)算機(jī)視覺的算法。
為了實(shí)現(xiàn)視頻流傳輸,利用 TCP 協(xié)議將數(shù)據(jù)傳入 GNU Radio 處理,再傳到 HackRF 板卡進(jìn)行處理并發(fā)送。采用 OpenCV 來調(diào)用攝像頭、讀取顯示視頻,再通過 TCP 協(xié)議將其發(fā)送出去,經(jīng)過實(shí)際驗(yàn)證,經(jīng)過處理后的視頻流數(shù)據(jù)可以相應(yīng)地顯示出來。圖8給出了視頻流傳輸程序流程圖和視頻傳輸實(shí)驗(yàn)結(jié)果圖。
4 結(jié)束語(yǔ)
本文使用 GNU Radio 軟件和 HackRF 硬件搭建了一個(gè)無線通信平臺(tái),實(shí)現(xiàn)了 FM 捕捉和通過模塊播放音頻信號(hào)、隨機(jī)序列的調(diào)制解調(diào)和視頻流的傳輸,從而實(shí)現(xiàn)了基于軟件無線電平臺(tái)的無線通信。
GNU Radio 的模塊化和 HackRF 板卡的低成本特性,使得二者構(gòu)成的通信系統(tǒng)具有較高的開發(fā)前景。隨著軟件無線電技術(shù)研究的加深,HackRF 將在通信領(lǐng)域發(fā)揮更大的用處。