SDR WiFi平臺(tái) gr-ieee802-11 軟件無(wú)線電實(shí)現(xiàn)802.11協(xié)議
更多關(guān)于SDR LTE的CSDN博客請(qǐng)點(diǎn)擊http://blog.csdn.net/jxwxg
在之前的博客中,我介紹了SDR LTE平臺(tái),其中開源的有OpenAirInterface(OAI),srsLTE, OpenLTE等,不開源的有Amarisoft等。這篇博客主要介紹SDR WiFi平臺(tái)。據(jù)筆者所知,可能因?yàn)?/span>802.11協(xié)議要求的帶寬較大,數(shù)據(jù)速率較大,對(duì)SDR平臺(tái)的性能要求較高,所以較少實(shí)現(xiàn)SDR WiFi平臺(tái)的項(xiàng)目。我接觸過(guò)一個(gè)稍微完整點(diǎn)的SDR WiFi項(xiàng)目是基于GNU Radio的gr-ieee項(xiàng)目,下面簡(jiǎn)單介紹并推廣下這個(gè)項(xiàng)目。
一 項(xiàng)目簡(jiǎn)介
項(xiàng)目名稱:gr-ieee802-11
項(xiàng)目作者:Bastian Bloessl, Paderborn University
源碼地址:https://github.com/bastibl/gr-ieee802-11
支持硬件: Ettus N210s and B210s
支持協(xié)議:IEEE 802.11 a/g/p
項(xiàng)目框架:GNU Radio
二 項(xiàng)目安裝
本章節(jié)簡(jiǎn)要介紹項(xiàng)目的安裝,詳細(xì)安裝方法請(qǐng)鏈接https://github.com/bastibl/gr-ieee802-11。
2.1 安裝依賴庫(kù)
log4cpp
用于生成log,具體安裝方法如下所示
sudo apt-get install liblog4cpp5-dev
sudo port install log4cpp
GNU Radio
項(xiàng)目的基本框架,目前支持v3.7.3之后的版本。GNU Radio有很多種安裝方法,推薦使用源碼安裝,因?yàn)榘惭b方法比較繁瑣,在此不贅述,詳情鏈接http://gnuradio.org/redmine/projects/gnuradio/wiki/InstallingGR。
gr-foo
作者自己寫的一個(gè)GNU Radio模塊,項(xiàng)目里需要使用。安裝方法如下:
git clone https://github.com/bastibl/gr-foo.git
cd gr-foo
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
2.2 安裝gr-ieee802-11
安裝好依賴庫(kù)之后,我們可以直接安裝gr-ieee802-11。安裝方法如下所示:
git clone git://github.com/bastibl/gr-ieee802-11.git
cd gr-ieee802-11
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
2.3 設(shè)置共享內(nèi)存大小
項(xiàng)目的發(fā)射機(jī)在發(fā)射幀信號(hào)之前需要完整的存儲(chǔ)一個(gè)幀的數(shù)據(jù),里面使用到了共享內(nèi)存。所以需要保證共享內(nèi)存的大小,采用如下命令設(shè)置:
sudo sysctl -w kernel.shmmax=2147483648
三 項(xiàng)目運(yùn)行
3.1 編譯OFDM PHY模塊
作者自己寫了一個(gè)OFDM PHY模塊,在發(fā)射機(jī)和接收機(jī)里面都有使用,需要提前用gnuradio-companion打開并編譯 ./examples/wifi_phy_hier.grc
3.2 項(xiàng)目運(yùn)行
項(xiàng)目包含以下程序,進(jìn)入example文件夾后用gnuradio-companion打開相應(yīng)的文件即可。
wifi_loopback.grc: 測(cè)試用程序
wifi_tx.grc: 發(fā)送wifi信號(hào)
wifi_rx.grc: 接收wifi信號(hào)
wifi_transceiver.grc:同時(shí)收發(fā)wifi信號(hào)
四 項(xiàng)目應(yīng)用場(chǎng)景
4.1 gr-ieee接收并分析路由器信號(hào)
啟動(dòng)wifi_rx.grc,在gnuradio-companion界面調(diào)整參數(shù),使USRP能接收路由器發(fā)射的信號(hào)?梢允褂wireshark抓包分析收到的信號(hào)的信息,也可以在wifi_rx.grc里把log等級(jí)調(diào)高,觀察log信息。
4.2 gr-ieee發(fā)射WiFi信號(hào),路由器接收信號(hào)
啟動(dòng)wifi_tx.grc,在gnuradio-companion界面調(diào)整參數(shù),使路由器能接收到USRP發(fā)送的信號(hào)。也可以開啟無(wú)線網(wǎng)卡的混雜模式,使用無(wú)線網(wǎng)卡接收USRP發(fā)送的信號(hào),然后使用wireshark抓包驗(yàn)證。
4.3 gr-ieee與路由器通信
使用wifi_trx.grc與路由器進(jìn)行雙向通信。但是由于目前wifi_trx.grc功能開不是很全,所以能與路由器通信的數(shù)據(jù)包有限。
4.4 gr-ieee發(fā)射信號(hào),gr-ieee接收信號(hào)(單向通信)
分別啟動(dòng)wifi_tx.grc與wifi_rx.grc,調(diào)整兩端參數(shù),使wifi_rx.grc能接收到wifi_tx.grc發(fā)送的數(shù)據(jù)包。
4.5 gr-ieee發(fā)射信號(hào),gr-ieee接收信號(hào)(雙向通信)
分別在兩臺(tái)電腦啟動(dòng)wifi_trx.grc。兩臺(tái)電腦可以通過(guò)USRP通信。wifi_trx.grc會(huì)啟動(dòng)一個(gè)虛擬網(wǎng)卡,我們可以直接在兩個(gè)虛擬網(wǎng)卡之間使用ping命令。
五 項(xiàng)目測(cè)試
5.1 測(cè)試場(chǎng)景
我們測(cè)試應(yīng)用場(chǎng)景5,即4.5 gr-ieee發(fā)射信號(hào),gr-ieee接收信號(hào)(雙向通信)。并使用ping,scp等命令進(jìn)行測(cè)試。

wifi_transceiver程序界面如下圖所示,可以配置的參數(shù)主要包括收發(fā)增益,帶寬,信道,調(diào)制方式,信道估計(jì)算法等。我們能從界面圖中看到我們測(cè)試時(shí)設(shè)置的參數(shù)。

5.2 測(cè)試截圖
5.2.1 QPSK


5.2.2 16QAM



5.2.3 64QAM

六 總結(jié)
gr-ieee802-11 基本具備了IEEE 802.11 a/g/p協(xié)議PHY所有的功能和部分MAC層功能,但是功能還不全面。
此外,項(xiàng)目基于GNU Radio架構(gòu),而且協(xié)議要求帶寬較大,項(xiàng)目的實(shí)時(shí)性處理還不是很好,運(yùn)行時(shí)UHD會(huì)經(jīng)常報(bào)錯(cuò)U(underflow),O(overflow)和L(latency)。這也進(jìn)一步導(dǎo)致了項(xiàng)目吞吐率較低。