基于GNU Radio和HackRF/LimeSDR的802.11收发机

SDR WiFi平台 gr-ieee802-11 软件无线电实现802.11协议 SDR WiFi平台 gr-ieee802-11 软件无线电实现802.11协议。这篇博客主要介绍SDR WiFi平台gr-ieee802-11。据笔者所知,可能因为802.11协议要求的带宽较大,数据速率较大,对SDR平台的性能要求较高,所以较少实现SDR WiFi平台的项目。 阅读详情
AI摘要

本文详细介绍了一种基于GNU Radio的802.11a/g/p OFDM接收机实现方案,包括所需硬件如HackRF One或LimeSDR,以及软件环境搭建过程。文章提供了gr-foo和gr-ieee802-11模块的编译安装指导,调整最大共享内存的方法,和几个关键测试案例。

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

目录

一、实验硬件软件

二、编译安装

1、gr-foo安装

2、gr-ieee802-11安装

3、调整最大共享内存

4、编译和运行wifi_phy_hier.grc

5、可能碰到的问题及解决方法

三、测试例子

1、wifi_loopback.grc

2、wifi_rx.grc

四、有用的链接


本文介绍的内容来自SRIF 2013中的一篇论文:An IEEE 802.11a/g/p OFDM Receiver for GNU Radio。正如题目所示,本论文实现了一个符合802.11a/g/p规范的接收机,当然作者也做了发射机。

SRIF '13: Proceedings of the second workshop on Software radio implementation forum 2013

Second Workshop of Software Radio Implementation Forum (SRIF 2013) - ACM SIGCOMM 2013

802.11大家都非常熟悉了,具体内容可以参见:

IEEE 802.11, The Working Group Setting the Standards for Wireless LANs

IEEE 802.11_百度百科

一、实验硬件软件

硬件---HackRF One或者LimeSDR都可以,拉杆天线或者专门的2.4G/5G/5.8G天线,具体信息参见:

https://item.taobao.com/item.htm?spm=a230r.1.14.231.380979baTZfPmA&id=526187854860&ns=1&abbucket=20#detail

https://item.taobao.com/item.htm?spm=a230r.1.14.27.22b977ffORpxg7&id=555064600966&ns=1&abbucket=8#detail

淘宝网 - 淘!我喜欢

软件---Ubuntu运行支持HackRF、Limesdr的环境,gr-foo和gr-ieee802-11模块。

二、编译安装

1、gr-foo安装

如果你用git clone下载最新的gr-foo,可能会由于你电脑中的cmake版本低,导致出现cmake编译不通过的问题。

(1)更新cmake

我之前的cmake是apt-get install的,版本是3.5.1,版本有点老了,然而gr-foo需要至少是3.8的版本。

参照Installing | CMake,更新方法如下:

从Download | CMake下载你需要的cmake源码,这里我下载的是3.17版本的。

./bootstrap
make
sudo make install

注意:当你执行./bootstrap的时候,可能会碰到提示信息,例如<Could Not find OpenSSL>OpenSSL之类的。你就根据提示信息,关闭openssl的选项就行了。具体操作例如

./bootstrap -- -DCMAKE_USE_OPENSSL=OFF

执行完./bootstrap -- -DCMAKE_USE_OPENSSL=OFF之后,

执行完make之后

执行完sudo make install之后,

更新完cmake之后,你再执行cmake --version,就会发现,你的cmake版本已经更新完成了。

(2)gr-foo安装

因为gr-foo针对gnuradio的不同版本(如gnuradio3.7,gnuradio3.8)实现了相应的版本。由于我Ubuntu中的gnuradio版本是3.7的,如果用最新版本的gr-foo,会提示如下<Could not find a configuration file for package “Gnuradio” that is compatible with requested version “3.8”>信息。

关于如何下载github上指定版本代码的方法,请参见:git选择源代码版本的三种方法_cc13949459188的博客-优快云博客_git 选择版本

这里我们使用第一种方法,到gr-foo的github主页https://github.com/bastibl/gr-foo,在Branch这里,我们选择3.7的版本,然后点击“Clone or download”进行下载,下载解压后的文件夹名字是gr-foo-maint-3.7

依次执行以下编译安装命令:

cd gr-foo-maint-3.7
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

【注意】:这里的foo他默认安装到了/usr/lical/lib/python2.7/dist-packages/foo文件夹中,后边会提到,这可能会导致GRC Python找不到这个foo,导致出现ImportError信息。解决办法请看本文后边。

正确安装完之后,你的GRC中会出现这个foo模块。

2、gr-ieee802-11安装

在编译安装gr-ieee802-11的时候,同样需要注意选择3.7版本的。否则,如果直接git最新的3.8版本,如果你电脑的gnuradio版本是3.7的话,也会出现以下的<Could not find a configuration file for package “Gnuradio” that is compatible with requested version “3.8”>信息。

同样,到gr-ieee802-11的github主页https://github.com/bastibl/gr-ieee802-11,在Branch这里,我们选择3.7的版本,然后点击“Clone or download”进行下载,

依次执行以下编译安装命令:

cd gr-ieee802-11-maint-3.7
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

3、调整最大共享内存

由于transmitter使用Tagged Stream模块,因此它在处理之前必须将完整的frame存储在缓冲区中。由于ubuntu默认的缓冲区空间太小,应用如下命令进行设置:

sudo sysctl -w kernel.shmmax=2147483648

4、编译和运行wifi_phy_hier.grc

这是运行本项目其他grc文件的前置步骤。但是,我在第二个电脑上重新按照本博客的方法来安装后,没有碰到这个问题,所以,暂时先留在这里吧。

【注意】如果不先运行本程序,其它grc(例如gr-ieee802-11-maint-3.7/examples/wifi_rx.grc)会出现missing block。

OFDM PHY:物理层被封装在一个分层块中,以便在GNU Radio Companion中获得更清晰的收发器结构。

用GNU Radio Companion打开/examples/wifi_phy_hier.grc 点击build进行创建,该模块将会安装加载到GRC中。

5、可能碰到的问题及解决方法

我在第二个电脑上重新按照本博客的方法来安装后,没有碰到以下两个问题,所以,暂时先留在这里吧,大家根据自己的实际情况来看,如果你安装完了gr-ieee802-11之后,运行不会碰到以下两个问题,那么就可以暂时忽略不用看这部分。

(1)import foo ImportError No module named foo

这是由于我按照上述cmake make make install的时候,把foo安装到了/usr/local/lib/python2.7/dist-packages/foo中,导致这时候Python找不到foo,因为Python默认的是从/usr/lib中来寻找的。所以,通过将/usr/local/lib/python2.7/dist-packages/foo复制到/usr/lib来解决。

解决方法:

sudo cp -r  /usr/local/lib/python2.7/dist-packages/foo /usr/lib

(2)ImportError:libgnuradio-foo.so: cannot open shared object file: No such file or directory

根据提示信息,定位到是可能找不到libgnuradio-foo.so,从电脑这种查找要一下这个libgnuradio-foo.so的位置,得知它是在/usr/local/lib/文件夹中,把它复制到/usr/lib文件夹中。

解决方法:

sudo cp /usr/local/lib/libgnuradio-foo.so /usr/lib

(3)Xterm executable is missing

暂时可以忽略不管他。

三、测试例子

1、wifi_loopback.grc

在已打开的GRC(在打开的终端中,输入gnuradio-companion来打开GRC,)中运行wifi_loopback.grc,依次点击build和运行按钮后,你会看到类似的结果。

2、wifi_rx.grc

打开wifi_rx.grc,该文件的作者用的是USRP,这里由于我们使用的是HackRF或者LimeSDR,所以需要将UHD Source修改为osmocom source或者LimeSuite Source(Rx)模块。

我这个最近新安装的ubuntu电脑,用hackrf的时候,碰到一个小插曲问题,就是osmocom source模块中的device如果默认什么都不填写的话,会碰到如下问题:

解决方法:在osmocom source模块的Device Arguments栏中,输入:hackrf=0,这是根据osmocom source模块的documentation选项卡中提示的来确定的。【也请大家各自验证一下是否会存在此问题。我记得之前我用osmocom source模块是不会碰到此类问题的。】

我的手机热点名字是:HUAWEI nova 2s,其MAC地址是b8:94:36:cf:3b:90,以下是我手机的截图和捕获到的数据包的截图。

可以看到捕获到的数据包中,热点的SSID名称和MAC地址与我手机的信息是一致的。

四、有用的链接

Second Workshop of Software Radio Implementation Forum (SRIF 2013) - ACM SIGCOMM 2013

Installing | CMake

https://github.com/bastibl/gr-ieee802-11

使用过程中,如果碰到什么问题,欢迎联系反馈!

https://item.taobao.com/item.htm?spm=a230r.1.14.231.380979baTZfPmA&id=526187854860&ns=1&abbucket=20#detail

GNU RADIO软件无线电发送接收文件测试笔记 GNU RADIO软件无线电benchmark程序发送接收文件测试笔记 GNU RADIO软件无线电benchmark程序发送接收文件测试笔记 在GNU RADIO软件无线电程序中,benchmark程序可以发射900MHZ,接收900MHZ的无线电信号。具体做法是,把两台装有Basic子板的USRP1母板分别连上两台电脑的USB端口上,接通电源,在ubuntu操作系统下,在其中一台电脑的终端提示符下键入: “ cd /usr/local/share/gnuradio/example/digital/" 进 阅读详情

相关推荐

WiFi 802.11b/g/p Gnuradio实现

基于开源Gnuradio项目实现的IEEE802.11b/g/p transceiver. C++/Python代码。

gr-ieee802-11 项目常见问题解决方案

`gr-ieee802-11` 是一个用于 GNU Radio 的开源项目,专注于实现 IEEE 802.11 a/g/p 无线通信标准的收发器。该项目旨在与 Ettus N210 和 B210 设备兼容,并经过测试与多种市售 WiFi 卡和 IEEE 802.11p 原型设备互通。此外,该项目还支持在仿真环境中使用。 主要的编程语言是 C++ 和 Python。C++ 用于底层信号处理和硬件接...

gitblog_00788的博客 1148

gr-ieee802-11:IEEE 802.11 agp收发器

你好! 这是一种适用于GNU Radio的IEEE 802.11 a / g / p收发器,适合与Ettus N210s和B210s一起使用。 互操作性已通过许多现成的WiFi卡和IEEE 802.11p原型进行了测试。 该代码也可以用于仿真中。 目录 发展 与GNU Radio一样,此模块使用master和maint分支进行开发。 这些分支应该与相应的GNU Radio分支一起使用。 这意味着: maint-3.7分支与GNU Radio 3.7兼容, maint-3.8与GNU Radio 3.8兼容, master与GNU Radio master兼容,后者跟踪向GNU Radio 3.9的发展。 安装 依存关系 GNU电台 有几种安装GNU Radio的方法。 您可以使用 gr-foo 我的gr-foo存储库中有一些非项目特定的GNU Radio块是需要的。 例如,Wiresh

Gnu Radio抓取WiFi信号,流程图中模块功能

GNURadio中抓取WiFi信号的流程图中各个模块的功能:

qq_53732840的博客 2596

802.11n 基于gnuradio实现

802.11n 基于gnuradio实现 开源软件无线电(Gnuradio)或 开源软件定义无线电,是一个对学习、构建和部署软件定义无线电系统的免费软件工具包。发起于2001年,Gnuradio 现在成为GNU 的正式项目之一。慈善家John Gilmore 发起并捐助$320,000.00 (US) 给Eric Blossom 用来构建代码和维护。

Windows 24H2下eNSP AR_40启动失败的终极修复指南

本文针对Windows 11 24H2更新后eNSP AR_40路由器启动失败的问题,提供了终极修复方案。核心在于解决系统强制虚拟化安全(VBS/Hyper-V)与老版模拟软件的兼容性冲突。指南详细介绍了安装关键系统更新KB5053656、精细调整Windows虚拟化功能以及后续排错步骤,帮助用户在24H2系统上稳定运行eNSP进行网络实验。

weixin_29233333的博客 507

安装gr_ieee802.11

1、安装配置好gnuradio 2、安装log4cpp:sudo apt-get install liblog4cpp5-dev 3、安装IT++库:sudo apt-get install libitpp-dev 4、下载、编译、安装ieee802.11: git clone git://github.com/bastibl/gr-ieee8...

weixin_34418883的博客 471

AVEVA PDMS 二次开发之PML实战:从宏到自定义窗体的效率提升

本文详细介绍了AVEVA PDMS二次开发中PML语言的应用,从基础宏编写到高级窗体开发,全面提升工程设计效率。通过实战案例展示如何利用PML实现批量操作、流程自动化和交互优化,帮助工程师快速掌握这一强大工具。

weixin_42549451的博客 339

gr-ieee802-11 项目推荐

gr-ieee802-11 是一个基于 GNU Radio 的开源项目,专注于实现 IEEE 802.11 a/g/p 标准的无线通信系统。该项目主要使用 C++ 和 Python 进行开发,充分利用了 GNU Radio 的模块化设计,使得开发者可以轻松地集成和扩展无线通信功能。 ## 项目核心功能 gr-ieee802-11 项目的主要功能包括: 1. **IEEE 802.11 a/g...

gitblog_00261的博客 491

从开通VPS到搭建宝塔面板全教程

你在输入域名(此时我们可能没有类似aaa.com这样的域名,所以要输入VPS的IP地址)的时候,下面的根目录也会跟着变动,等输入完成后,你可以把根目录再改回成/www/wwwroot/dq。这时,在你的浏览器中,输入外网面板地址的URL,输入username和password,即可登陆宝塔面板。第一次登陆,需要绑定你的宝塔账号,你可以到宝塔的注册界面,用手机注册一个,然后绑定,首先看一下你的VPS操作系统是什么类型的(其实你在选择VPS的时候,就已经选定了,我选择的事Centos系统)。

kxltsuperr的专栏 3734

从零构建高精度温控系统:ADN8835的单电感拓扑与0.01℃稳定性实战解析

本文深入解析了如何利用ADN8835构建高精度温控系统,重点介绍了其创新的单电感拓扑架构如何实现0.01℃的长期稳定性。内容涵盖精密PCB布局、电源滤波设计,并详细阐述了针对不同热容负载的数字PID控制参数整定策略,为开发精密仪器和医疗设备提供了实战指南。

r2s3t4的博客 238

探索无线通信的新境界:gr-ieee802-11项目介绍

在无线通信的世界里,每一个技术进步都可能引领一场革命。今天,我们要介绍的是一个开源项目——gr-ieee802-11,这是一个专为GNU Radio设计的IEEE 802.11 a/g/p收发器,特别适用于Ettus N210s和B210s设备。这个项目不仅经过了与市售WiFi卡和IEEE 802.11p原型的互操作性测试,还能在模拟环境中使用,为无线通信技术的发展提供了新的可能性。 ## 项目...

gitblog_00227的博客 720

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4588

gr-ieee802-11 源码分析

文章目录 源码地址: https://github.com/bastibl/gr-ieee802-11 类结构图

sundaygeek的专栏 1779

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5714

CVAEGAN实现锂离子电池EIS数据增强:基于健康状态的阻抗谱生成

本文提出了一种基于CVAEGAN的锂离子电池EIS数据增强方法。该方法结合了变分自编码器和生成对抗网络的优点,能够根据指定的健康状态(SoH)生成高质量的EIS阻抗谱数据。文章详细介绍了数据预处理流程、模型架构设计(包括编码器、解码器和判别器),并提供了完整的PyTorch实现代码。通过条件生成的方式,该方法可以有效解决电池健康评估中标注数据不足的问题,为基于数据驱动的电池诊断提供更丰富的训练样本。实验结果表明,生成的EIS数据具有良好的真实性和多样性,可用于增强电池健康状态评估模型的性能。

huanghm88的专栏 498

LimeSDR实验教程(5) WiFi解调

这个wifi解调安装起来很简单,没什么坑,就是老外按照gnuradio不同版本也分了几个版本,我下载的是3.7版本。 先安装3.7版本的gr-foo再安装gr-ieee802-11就行。 下面的安装脚本下载的是主分支的,如果要针对3.7或者3.8的,可以在网页里直接选择对应版本下载。 或者从这里下载: 链接:https://pan.baidu.com/s/1sBmPa1X2IInwJ...

老邵的开源世界 5156

北斗导航 | 接收机自主完好性监测(RAIM)算法近三年研究现状总结(2022-2025)

近三年RAIM算法已从传统的单故障检测演进为多星座协同、智能融合的复杂系统,在航空、自动驾驶等安全关键领域实现规模化应用。未来需重点突破城市复杂环境适应性和标准化体系建设,推动技术从"可用"向"可信"跨越。

尘世冰封的专栏 439

IEEE802.11标准概述

 1.IEEE802.11标准概述 IEEE802.11标准的逻辑结构如图1所示,每个站点所应用的802.11标准的逻辑结构包括一个单一MAC层和多个PHY中的一个。 图1 802.11MAC层支持三个分离的PHYMAC层在LLC层的支持下为共享介质PHY提供访问控制功能(如寻址方式、访问协调、帧校验序列生成的检查,以及LLC PDU定界等)。MAC层在LLC层的支持下执行寻址方式和帧识别功能。8

小九的专栏 7968

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

gr-ieee802-11:构建高性能无线通信系统的终极指南

想要掌握IEEE 802.11无线通信技术的核心实现吗?gr-ieee802-11正是你需要的开源项目!这个基于GNU Radio的IEEE 802.11 a/g/p收发器提供了完整的无线通信解决方案,支持与商用WiFi卡和IEEE 802.11p原型设备的互操作性测试。 ## 🚀 什么是gr-ieee802-11? gr-ieee802-11是一个专业的**IEEE 802.11无线通信收

gitblog_01094的博客 1126

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

gnuradio学习计划

gnuradio学习计划起点安装 起点 原以为国内的gnuradio的圈子会慢慢壮大,越来越多玩法,降低学习难度,结果还是一样的小众,而且由于这玩意学习门槛高,一般玩家完全不知所云,本人心血来潮买了块hackrf-one 放了1年半了,连backpack都买了,也还是吃灰,还是要静下心来好好学习才行,正好这几年在做wifi协议栈相关的工作,如果能用hackrf-one分析2.4G/5G无线数据包的调制方式,那也算是从软到硬精通了,就抱着这个目标坚持gnuradio的学习吧 本着自身方便原则,我就使用个人工作

duckPower 392

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Ubuntu 18.04 、16.04下 uhd+gnuradio 安装指南(含gr-ieee802.11+gr-foo安装)

Ubuntu16.04 uhd+Gnuradio 安装指南 更新源 sudo apt-get update sudo apt-get upgrade 安装依赖 不同的UBUNTU版本选择不同的依赖,以下为16.04版本: sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool l...

qq_37924079的博客 8402

gr-ieee802-11:无线通信开发者的终极实战指南

gr-ieee802-11是一个专为GNU Radio设计的IEEE 802.11 a/g/p transceiver项目,适用于Ettus N210s和B210s设备,可与多种现成WiFi卡和IEEE 802.11p原型实现互操作,同时支持仿真环境使用。 ## 🚀 快速了解gr-ieee802-11 ### 核心功能 该项目提供完整的IEEE 802.11物理层和MAC层实现,主要特点包

gitblog_00466的博客 843

GNU Radio教程 5.同步消息传递机制tag

同步消息传递机制

m0_43430630的博客 1074

多个hackrf one可以做什么科研

使用5个HackRF分布在城市不同区域,测试和分析当地WIFI信号强度,为部署提供依据。用4个HackRF作为基站,1个作为标签,通过TDoA算法在室内进行米级定位实验。多个HackRF同时工作,模拟5G网络,测试小区覆盖范围与优化交叉点部署方式。各放置一个HackRF与不同天线组合,检测不同极化情况下的信号收发性能。采集交通纵横路网项目多地HackRF数据,评估信号质量与通过能力指标。通信网络优化与评估:在不同场景下评估网络性能,为部署与优化提供依据。

caoyongsheng的博客 1072

WiFi 802.11b/g/p Gnuradio实现:探索无线通信的奥秘

WiFi 802.11b/g/p Gnuradio实现:探索无线通信的奥秘 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在无线通信领域,WiFi技术已经成为了日常生活中不可或缺的一部分。今天,我们将为大家介绍一个开源项目——WiFi 802.11b/g/p Gnuradio实现。该项目基于Gnuradio开源框架,为开发者提供了一个深入理解IEEE 802.11b/...

gitblog_06737的博客 467
上一篇: LimeSDR LoRa发送和接收
下一篇: Ubuntu 16.04 引导修复 boot repair
无线通信实验室
博客等级 码龄11年 2705粉丝 77原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值