在之前的博客中,我介绍了SDR LTE平台,其中开源的有OpenAirInterface(OAI),srsLTE, OpenLTE等,不开源的有Amarisoft等。
这篇博客主要介绍SDR WiFi平台。据笔者所知,可能因为802.11协议要求的带宽较大,数据速率较大,对SDR平台的性能要求较高,所以较少实现SDR WiFi平台的项目。我接触过一个稍微完整点的SDR WiFi项目是基于GNU Radio的gr-ieee802-11项目,下面简单介绍并推广下这个项目。
一 项目简介
二 项目安装
本章节简要介绍项目的安装,详细安装方法请链接https://github.com/bastibl/gr-ieee802-11。
2.1 安装依赖库
log4cpp
用于生成log,具体安装方法如下所示
GNU Radio
项目的基本框架,目前支持v3.7.3之后的版本。GNU Radio有很多种安装方法,推荐使用源码安装,因为安装方法比较繁琐,在此不赘述,详情链接http://gnuradio.org/redmine/projects/gnuradio/wiki/InstallingGR。
2.2 安装gr-ieee802-11
安装好依赖库之后,我们可以直接安装gr-ieee802-11。安装方法如下所示:
2.3 设置共享内存大小
项目的发射机在发射帧信 之前需要完整的存储一个帧的数据,里面使用到了共享内存。所以需要保证共享内存的大小,采用如下命令设置:
三 项目运行
3.1 编译OFDM PHY模块
3.2 项目运行
项目包含以下程序,进入example文件夹后用gnuradio-companion打开相应的文件即可。
wifi_loopback.grc: 测试用程序
wifi_tx.grc: 发送wifi信
wifi_rx.grc: 接收wifi信
wifi_transceiver.grc:同时收发wifi信
四 项目应用场景
4.1 gr-ieee接收并分析路由器信
启动wifi_rx.grc,在gnuradio-companion界面调整参数,使USRP能接收路由器发射的信 。可以使用wireshark抓包分析收到的信 的信息,也可以在wifi_rx.grc里把log等级调高,观察log信息。
4.2 gr-ieee发射WiFi信 ,路由器接收信
启动wifi_tx.grc,在gnuradio-companion界面调整参数,使路由器能接收到USRP发送的信 。也可以开启无线 卡的混杂模式,使用无线 卡接收USRP发送的信 ,然后使用wireshark抓包验证。
4.3 gr-ieee与路由器通信
使用wifi_trx.grc与路由器进行双向通信。但是由于目前wifi_trx.grc功能开不是很全,所以能与路由器通信的数据包有限。
4.4 gr-ieee发射信 ,gr-ieee接收信 (单向通信)
分别启动wifi_tx.grc与wifi_rx.grc,调整两端参数,使wifi_rx.grc能接收到wifi_tx.grc发送的数据包。
4.5 gr-ieee发射信 ,gr-ieee接收信 (双向通信)
分别在两台电脑启动wifi_trx.grc。两台电脑可以通过USRP通信。wifi_trx.grc会启动一个虚拟 卡,我们可以直接在两个虚拟 卡之间使用ping命令。
五 项目测试
5.1 测试场景
我们测试应用场景5,即4.5 gr-ieee发射信 ,gr-ieee接收信 (双向通信)。并使用ping,scp等命令进行测试。
5.2 测试截图
5.2.1 QPSK
星座图
5.2.2 16QAM
星座图
scp测速
速率低的可怜。
六 总结
gr-ieee802-11 基本具备了IEEE 802.11 a/g/p协议PHY所有的功能和部分MAC层功能,但是功能还不全面。
此外,项目基于GNU Radio架构,而且协议要求带宽较大,项目的实时性处理还不是很好,运行时UHD会经常 错U(underflow),O(overflow)和L(latency)。这也进一步导致了项目吞吐率较低。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!