GNU Radio 流程图编程(基于 GNU Radio Companion 平台)

  • 0x00. GNU Radio 介绍
  • 0x01. 打开 GNU Radio
  • 0x02. 使用搜索功能寻找相应的模块
  • 0x03. 添加一个新的模块
  • 0x04. 修改模块的参数
  • 0x05. 建立信号流程图
  • 0x06. 对 GUI 进行设置
  • 0x07. 查看输出结果
  • 0x08. 对不同采样率的验证
  • 0x09. 瀑布图的生成

0x00. GNU Radio 介绍

GNU Radio Companion (GRC) 是一个用来产生信号流程图及流程图源代码的图形化工具,是基于模块的仿真实验工具,类似于 MATLAB 中的 SIMULINK。它提供信号运行和处理模块,可以在易制作的低成本的射频硬件和通用微处理器上实现 软件定义无线电。这套套件广泛用于业余爱好者、学术机构和商业机构研究与构建无线通信系统。GRC 目前是同 GNU Radio 源代码捆绑在一起的。如果所有的依赖关系得以满足,GRC 便会在 GNU Radio 安装的同时被安装。其基本使用方法就是先将需要的模块放到窗口,再设置各个模块的参数,然后连接各个模块,绘制信号流程图,之后生成流程图,仿真运行。

0x01. 打开 GNU Radio

首先,安装好 GNU Radio 后,在终端输入命令:gnuradio-companion 来打开GRC,如图所示:

0x02. 使用搜索功能寻找相应的模块

按下 Ctrl+F,会自动弹出一个搜索框,然后输入模块的关键字 sink,可以看到很多关于 sink 的模块,如图所示:

0x03. 添加一个新的模块

然后,选中其中的 QT GUI Time Sink 模块,并通过 双击或拖动 的方式将其添加到工作区域中:

添加的 QT GUI Time Sink 模块结构如图所示:

0x04. 修改模块的参数

工作区域中包含了各种信号处理模块和变量。双击打开模块,可以设置它的参数属性。将 Canvas Size 修改为 300,300,然后单击确定按钮,如图所示:


可以发现,整个工作区域的面积变小了,如图所示:


选择菜单栏中的 Documentation 一栏,可以查看模块的文档信息,如图所示:


文档说明了 ID 是用来确定 python 文件名字和相关类的名字,保存的 python 文件会以 (id名).py 来进行命名。

然后,删除 ID 值 top_block,可以看到最下面出现了报错信息。同时 ID 也变成了红色,这样就能够很方便地确定错误所在的位置,如图所示:


GRC 是一个图形化的界面,它是基于 python 环境的。所以在执行一个流程图时,实际上运行的是一个 python 程序。其中的 ID 用来命名 python 文件,与 GRC 文件保存在同样的路径下。默认情况下,ID 是top_block,所以它创建了一个名为 top_block.py 的文件。更改 ID 就可以更改保存的文件名,以更好地进行文件管理。

GRC 与 python 的连接还可以通过 python 来控制 GRC 的参数属性。所有的输入属性或变量在使用时都会被解释为 python。因此,可以通过调用 python 来设置属性。

接下来,取 ID 名为tutorial_two_1。同时,因为采用的是 QT GUI sink,而不是 WX GUI sink,因此还要将 Generate Options 改成 QT GUI,如图所示:

0x05. 建立信号流程图

现在,建立一个将信号输出到示波器的流程图,并添加 Throttle 模块,这个模块可以 确保流程图不会消耗 100% 的 CPU 周期。流程图如图所示:


在添加了 Throttle 模块的情况下,使用命令 htop 查看 CPU 的利用情况,可以看出,CPU 占用较小,基本保持在 10% 以下,如图所示:


然后,在流程图中删去 Throttle 模块,直接连接信号源与波形输出,如图所示:

这时,再次查看 CPU 状态,可以明显发现,流图的运行占用了 100% 的 CPU,如图所示:


因此,当流图既没有连接硬件也没有连接 Throttle 的时候,CPU 基本是 满负载 运行的。

不管有几个输入或输出,在一个流图中只需要 一个 Throttle 就可以了。它起到了限速的作用。设置高的速率,流图执行快;而设置低的速率,流图执行慢。

而当有硬件连接时,就无需添加 Throttle 模块了,因为硬件本身已经对速率进行了限制。

0x06. 对 GUI 进行设置

Generate Options 有两种常用的设置:QT GUI 和 WX GUI。最常见的错误就是实际使用的 GUI 与设置的 Generate Options 不匹配

如果 Generate Options 设置的是 QT GUI,但是构造的流程图却是 WX GUI,如下图所示:


就会得到如下的报错信息,说明类型不匹配:


如果反过来的话,也会得到类似的报错信息。

0x07. 查看输出结果

点击 Execute 按钮启动程序后,弹出图形的窗口,然后可以看到如下波形图:


通过观察,能够明显看出,这是一个 复数 类型的波形。

然后,打开 Help 下的 Types 菜单,可以看到不同数据类型所代表的颜色图例,如图所示:

这里基本上可以找到所有的数据类型。可以看到,上面流程图的接口是蓝色的,说明这是 32 位浮点型组成的复数形式,因此上面的输出产生两个波形。Time Sink 输入一个复数,并输出它的实部和虚部图形

接下来,选用其它数据类型来修改信号源。选择 Float 以将其修改为浮点型,然后可以看到它的接口变成了橘黄色。

但是在将信号源和 Throttle Block 连接时,会出现红色的报错图标。

点击工具栏上的红色报错图标,可以看到具体的报错信息,如图所示:

报错信息显示,数据长度不匹配。这是由于 GNU Radio 不允许不同的数据类型之间直接连接。

因此,需要把所有的模块都改成浮点类型,如图所示:


然后再次点击运行,可以看到如下的波形图:


现在可以看到,只有一个波形输出,因为所有的数据类型都变为了 Float,即只有一个 实部。

下面更改之前选择的 GUI。将 QT GUI Time Sink 模块变为 WX GUI Scope Sink 模块,并将 Options 模块设置为 WX GUI,如图所示:


然后重新运行流程图,会打开一个 Scope Plot 窗口,如图所示:


改变 Channel Options,将 Marker 改为 Dot Large,可以看到真实采样点的值,信号频率是 1KHz,采样频率是 32KHz,如图所示:


可以发现,在一个周期内,共有 32 个采样点。

然后关闭 Scope Plot,将采样频率降到 10KHz ,如图所示:


重新产生并执行流图。可以观察到一个周期内新的采样点数变为 10 点,如图所示:


逐渐降低采样频率,首先将采样率降低为 5000,如图所示:


重新产生并执行流图。可以观察到一个周期内新的采样点数变为 5 点,如图所示:


然后,再将采样率降为 2kHz,即一个周期内采样 2 点,由于原信号频率为 1kHz,因此 2kHz 的采样率是保证基本波形的 最低采样率。


采样所产生的波形如图所示:


由上图可以看出,显然 2kHz 是仅仅能够保证基本波形的最低采样率。

然后,再次减小采样率至 1.5kHz,执行流图如下所示:


由波形图可以看出,小于最低采样率 2kHz 的波形已经失真,不能恢复出原始信号的形式

进一步地,再次减小采样率至 1kHz。显然,此波形已经 完全失真,无法表征出任何关于原始信号的信息。

0x08. 对不同采样率的验证

首先,创建一个 GRC 流图,以验证不同的采样率之间的区别,配置各个部件的参数如下:

  1. 为 QT GUI Chooser 模块设置3个采样速率,并将 ID 改为 samp_rate;
  2. 将所有 source 模块的 Sampling Rate 改为 samp_rate;
  3. 对 Variable 模块设置音频模块采样率为 48k;
  4. 将所有 sink 模块的 Sampling Rate 改为 audio_rate;
  5. 因为这里已经有了音频硬件,因此无需添加 Throttle 模块

配置好参数的流图如下图所示:


点击运行,设置 sample rate 为 48k,可以听到熟悉的 电话拨号音,产生的时域波形如图所示:


再观察 fft 的频域波形图,确实分别为两个 440Hz 和 350Hz 的频段,如图所示:


尝试调节改变信号源的 sampling rate 至 24k,可以听到声音的 频率变高,变得较为尖锐,产生的时域波形如图所示:


再观察 fft 的频域波形图,变成了两个 880Hz 和 700Hz 的频段,如图所示:

再次改变 sampling rate 至 16k,发出的声音更加 尖锐,产生的时域波形如图所示:


再观察 fft 的频域波形图,变成了两个 1320Hz 和 1050Hz 的频段,如图所示:


再次尝试改变信号源的 sampling rate ,使其比 audio sampling 高。

将其调整至 100kHz,如图所示:


这时,声音消失,产生的时域波形如图所示:


继续观察 fft 的频域波形图,可以明显发现,产生了频谱混叠,因此无法恢复出原始信号,没有声音产生,如图所示:

0x09. 瀑布图的生成

利用 Signal Source、Add 组件和 Waterfall Sink 模块,按照下图所示新建一个信号流图:


点击运行,可以看到,生成了下图所示的瀑布图:


下面,将第一个 Signal Source 的波形改为 三角波,如图所示:


更改为三角波后,再次运行流程图,此时瀑布图的频率分布发生了变化,如图所示:


其中,瀑布图发生变化的原因是:

由于在第一个流图中,两个信号源均为正弦波,而 正弦波的频率为一个固定的常量,因此在第一个瀑布图中只在 1kHz 与 5kHz 的两个信号源对应的频率点处有较大的信号强度。

而在第二个流图中,由于其中的一个信号源变为了三角波,而结合信号的基本知识可以得知,周期性三角波的傅里叶变换是由离散的频谱点组成的,因此可以分解为许多不同频率的正(余)弦信号,所以在第二个瀑布图的显示中,可以看到许多不同频率的地方均显示较强的信号强度。

GNU Radio 流程图编程(基于 GNU Radio Companion 平台)相关推荐

  1. 基于GNU radio + HackRF One 实现信号发射与FM接收

    基于GNU radio + HackRF One 实现信号发射与FM接收 实验环境 一.搭建简易信号发射器 二.搭建简易WBFM接收器 实验环境 硬件平台-HackRF One.天线(40-860MH ...

  2. 【评论】GNU/Linux下有多少是GNU的?

    导读:一个葡萄牙的学生写了一篇文章 <How much GNU is there in GNU/Linux?>由酷壳网的陈皓整理编译为<GNU/Linux下有多少是GNU的>. ...

  3. GNU/Linux下有多少是GNU的?

    导读:一个葡萄牙的学生写了一篇文章 <How much GNU is there in GNU/Linux?>由酷壳网的陈皓整理编译为<GNU/Linux下有多少是GNU的>. ...

  4. raptor流程图编程

    RAPTOR程序设计教程 55页 免费 Raptor使用顺序程序设计- 24页 2下载券 RAPTOR程序设计基础(B) 43页 3下载券 RAPTOR流程图编程 17页 免费 - RAPTOR 程序 ...

  5. raptor流程图赋值语句_raptor流程图编程

    RAPTOR程序设计教程 55页 免费 Raptor使用顺序程序设计... 24页 2下载券 RAPTOR程序设计基础(B) 43页 3下载券 RAPTOR流程图编程 17页 免费 ...... RA ...

  6. radio 事件_nRF52832/51822系列RADIO外设介绍/使用

    nRF52/51系列 以nRF52832的RADIO外设(下文简称RADIO)为例,操作寄存器的方式介绍和使用该外设: 目的在于充分认识RADIO外设,和记录自己走过的坑: 全为自己理解,可能有不对的 ...

  7. 前端radio单选框默认选中_「radio选中」单选框radio总结(获取值、设置默认选中值、样式) - seo实验室...

    radio选中 单选框 radio 是 否 1.获取值 $("input[name='killOrder']:checked").val(); $('input:radio:che ...

  8. matlab与vc混合编程指导书.doc,vc与matlab混合编程—基于com.doc

    vc与matlab混合编程-基于com.doc VC与MATLAB混合编程基于COM2010年03月21日星期日1118注意旨在提供一份VC调用MATLAB的快速试验参考和一些实际经验,不保证所有内容 ...

  9. r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总

    我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...

最新文章

  1. XML,JOSN,YAML三种文件类型的区别
  2. 你绝对能懂的“机器学习”(五)
  3. Best Time to Buy and Sell Stock(动态规划)
  4. 信息学奥赛一本通(1163:阿克曼(Ackmann)函数)
  5. 前端系统化学习【JS篇】:(四-3)基本数据类型之Boolean篇
  6. 【JavaEE】第零章(2020.03.06)模式 表 索引
  7. Java试题库(含答案)
  8. 超市便利店批发行业企业仓库,使用盘点机PDA扫描商品条码高效盘点,库存管不准怎么办
  9. excel游戏_Excel 20190912的娱乐和游戏
  10. 有多少程序员干到35岁,那么其他人去干什么了?
  11. [已授权] 互联网定位技术小谈
  12. DARKHOLE_1攻略
  13. php 2016 大麦户源码,2018最新大麦户源码刷客源码信誉源码完美运营带实时到账接口...
  14. Freefilesync自动同步
  15. html个人新闻网站,html,js,css实现
  16. PHP preg_match()函数
  17. 二手15年13寸MacBook Pro性价比有多高?网友表示值得买
  18. 解析dwg文件圆弧段被直线化解决方案及相关可能出现的问题(AutomationException: 0x800401f5和AutomationException: 0x80040228)
  19. Sparrow项目疑问解答
  20. 攻防世界web新手- fileinclude宜州网信办

热门文章

  1. 5G省电技术-UE辅助信息 UAI(UE Assistance Information)介绍
  2. 用DW(html+css+js)做自我介绍还带有登录页面
  3. X58老平台华硕P6T SE安装NVME SSD折腾记录和简单教程
  4. 前端面试题 —— 飞机加油问题
  5. 打印机显示另一台计算机正在使用,惠普打印机显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”怎么办?...
  6. docker selenium: Message: unknown error: unable to discover open pages
  7. C++模拟实现位图和布隆过滤器
  8. 解决子元素浮动造成父元素高度塌陷的问题学习总结
  9. Kotlin学习(9)→类基础
  10. CSIG图像图形技术挑战赛重磅来袭!人体目标检测分赛道正式开放注册!