当前位置: 首页 > 工具软件 > GNU ed > 使用案例 >

GNU Radio入门

公良云
2023-12-01

相关资料记录
https://www.cnblogs.com/WindyZ/p/10284473.html
https://www.cnblogs.com/WindyZ/p/10403342.html

https://blog.csdn.net/opensourcesdr/category_6321468.html

http://gnuradio.microembedded.com/
https://www.cnblogs.com/WindyZ/p/11215967.html

通信相关 https://wiki.gnuradio.org/index.php/Tutorials
hackrf
** https://greatscottgadgets.com/sdr/
http://bobao.360.cn/learning/detail/405.html
https://www.bilibili.com/video/BV1us411W7xN?p=1
HACKRF 硬件及软件介绍 https://github.com/mossmann/hackrf/wiki/HackRF-One

相关书籍: GNU Radio软件无线电技术 白勇,胡祝华
https://book.sciencereading.cn/shop/book/Booksimple/show.do?id=BAD0696C1C5D04ED2804CF04BA6979B98000
无线电安全攻防大揭秘 360独角兽安全团队

进度

GNU Radio 中文教程(http://gnuradio.microembedded.com/tutorials)

入门程度的讲义教程
  1. 什么是 GNU Radio?
    GNU Radio 是一个通过最小程度地结合硬件,用软件来定义无线电波发射和接受的方式来搭建无线电通信系统的开源软件系统 。也即是说, 当今那些高性能的无线电设备中所用到的数字调制问题将变成软件问题。
  2. 想揣摩明白其机理: 阅读例程
    开始使用 GNU Radio 貌似令人生畏。GNU Radio 是很强大也很吓人,学习它会有一个陡峭的学习曲线。
    在源码构架中,其相应的子目录下都有例程代码。诸如,在 ‘gr-digital/examples’ 下,包含所有的数字调制的例程;在 ‘gr-filter/examples’ 下,包含了所有滤波器相关(也包含重采样 - resampling 等)的例程等等。GNU Radio 提供了关联 Python、GNU Radio Companion(GRC) 及 C++ 类丰富的例程。
    学习 GNU Radio (如同学习其它任何的新技术一样)的最佳途径便是揣摩例程。在 Linux 环境中,它通常被安装在 /usr/local/share/gnuradio/examples 下。理论上,基于论题对其进行检索,大概会有好几百个例程。
  3. GNU Radio 是什么它有什么用途?
    GNU Radio 是免费开源的软件开发工具套件。它提供构建软件无线电所需的信号运行和处理的模块,用它可以在唾手可得的低成本的外部射频(RF)硬件和通用微处理器上、或无硬件的模拟环境中实现软件定义无线电。这套套件广泛用于业余爱好者,学术机构和商业机构用来研究和构建无线通信系统。
    GNU Radio 可以进行各类信号处理。可以使用它编写应用程序从数据流中获取数据或将数据传输到数据流中,然后使用硬件将其发射出去。GNU Radio 具有滤波器、通道编码、同步单元、均衡单元(equalizer)、解调器、声音合成机(vocoder)、解码器(decoder)等很多单元(使用 GNU Radio 术语,这些被称作功能块 - blocks),这些单元也都是无线电系统中的常见部件单元。更重要的是,它还具有连接这些功能模块的方法及管理在这些功能块间传输数据的策略。对 GNU Radio 进行扩充也十分容易;如若发现所缺失的特定功能块,便可快速生成并将其添加到系统中。
  4. 什么是软件无线电?
    维基百科(Wikipedia page)对此给予了一个满意的答案。一句话,软件无线电是将所有的信号处理的工作交由软件来处理,而非传统方法那样由专职硬件承担。这样做的明显优点是软件构建的部件在系统中很容易被替换,同一(软件)部件可被用以构建众多无线系统,也可被用在各种传输标准中;也就是说,一套软件无线电系统可用于各种不同的应用中!
  5. 在GNU Radio中使用QT GUI功能块
complex sink: qtgui.sink_c
float sink: qtgui.sink_f

如下所示,接收器位于模块gnuradio.qtgui中,并通过以下方式导入到Python中:
from gnuradio.qtgui import qtgui
使用以下类构造函数,接收器的复杂版本和浮点版本都采用相同的参数:

 qtgui_make_sink_X (int fftsize, int wintype, double fc=0, 
                   double bandwidth=1.0, const std::string &name="Spectrum Display",
                    bool plotfreq=true, bool plotwaterfall=true, bool plotwaterfall3d=true,
                    bool plottime=true, bool plotconst=true, bool use_openGL=true,
                    QWidget *parent=NULL)

(fftsize:初始FFT大小 ;wintype:初始FFT窗口类型。;fc:x轴显示的中心频率;带宽:设置fc的x轴范围;name:标题栏中的GUI对象的标题;plotfreq:显示频率窗口;plotwaterfall:显示瀑布窗口;plotwaterfall3d:显示3D瀑布窗口;plottime:显示时间窗口;plotconst:显示星座图窗口吗;parent:此对象作为子对象放入的父窗口小部件)
6. GUI例程: http://gnuradio.microembedded.com/tutorialsqtgui
以下列表是一些最常用GNU Radio的模块:
gr GNU Radio 主要库函数。 这是总要被用到的库。
usrp USRP “源”和“漏”及控制。
audio 声卡控制(“源”、“漏”)。 使用它给声卡来发送或接受音频,但是配合外部射频前端声卡只能用作窄带接收机。
blks2 该模块包含额外使用 Python 编写的模块,诸如常用的调制、解调、一些额外的滤波代码、重新采样、压缩等等。
optfir 用于设计最佳 FIR 滤波器的例行程序。
plot_data 一些使用 Matplotlib 来绘制数的函数。
wxgui 此模块实际上是个子模块,它包含能够快速地构建图形化的同流程图相连接的用户接口的功能。使用命令 from gnuradio.wxgui
import * *来导入此子模块的一切,或使用命令 from gnuradio.wxgui import stdgui2, fftsink2 来导入特定的部分。
eng_notation 添加用来处理工程标记的诸如:‘100M’ for 100 * 10^6’ 的函数。
eng_options 使用命令 from gnuradio.eng_options import eng_options 来导入功能。
gru 功用杂类,算术和其它。

HackRF.net

  1. gMFSK是一个非常强大的Linux平台下的业余无线电调制解调软件。
    需要注意的是,由于最近的Linux发行版都使用ALSA做为声卡驱动,而gMFSK目前还只能使用旧的OSS声卡驱动。
    但是我们可以使用alsa-oss这个软件包提供的aoss脚本,来为gMFSK伪造出一个/dev/dsp接口出来。
sudo apt-get install alsa-oss
aoss gmfsk
  1. DTMF(Dual-Tone Multi-Frequency, 双音多频)的原理是键盘上的所有按键由高音部分(1209Hz, 1336Hz, 1477Hz, 1633Hz)和低音部分(697Hz, 770Hz, 852Hz, 941Hz)
sudo apt-get install multimon
aoss multimon -a DTMF

然后拿起手机,打开拨号键盘,按下几个声音,然后multimon便可以解析出DTMF。

  • 有一点需要明确,任何发射到空中的信号或者说真实信号都是不存在虚部的。
 类似资料: