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

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

5.2 測試截圖
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層功能,但是功能還不全面。
此外,項目基于GNU Radio架構(gòu),而且協(xié)議要求帶寬較大,項目的實時性處理還不是很好,運行時UHD會經(jīng)常報錯U(underflow),O(overflow)和L(latency)。這也進(jìn)一步導(dǎo)致了項目吞吐率較低。