GNU Radio 流程图编程(基于 GNU Radio Companion 平台)
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 流图,以验证不同的采样率之间的区别,配置各个部件的参数如下:
- 为 QT GUI Chooser 模块设置3个采样速率,并将 ID 改为 samp_rate;
- 将所有 source 模块的 Sampling Rate 改为 samp_rate;
- 对 Variable 模块设置音频模块采样率为 48k;
- 将所有 sink 模块的 Sampling Rate 改为 audio_rate;
- 因为这里已经有了音频硬件,因此无需添加 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 平台)相关推荐
- 基于GNU radio + HackRF One 实现信号发射与FM接收
基于GNU radio + HackRF One 实现信号发射与FM接收 实验环境 一.搭建简易信号发射器 二.搭建简易WBFM接收器 实验环境 硬件平台-HackRF One.天线(40-860MH ...
- 【评论】GNU/Linux下有多少是GNU的?
导读:一个葡萄牙的学生写了一篇文章 <How much GNU is there in GNU/Linux?>由酷壳网的陈皓整理编译为<GNU/Linux下有多少是GNU的>. ...
- GNU/Linux下有多少是GNU的?
导读:一个葡萄牙的学生写了一篇文章 <How much GNU is there in GNU/Linux?>由酷壳网的陈皓整理编译为<GNU/Linux下有多少是GNU的>. ...
- raptor流程图编程
RAPTOR程序设计教程 55页 免费 Raptor使用顺序程序设计- 24页 2下载券 RAPTOR程序设计基础(B) 43页 3下载券 RAPTOR流程图编程 17页 免费 - RAPTOR 程序 ...
- raptor流程图赋值语句_raptor流程图编程
RAPTOR程序设计教程 55页 免费 Raptor使用顺序程序设计... 24页 2下载券 RAPTOR程序设计基础(B) 43页 3下载券 RAPTOR流程图编程 17页 免费 ...... RA ...
- radio 事件_nRF52832/51822系列RADIO外设介绍/使用
nRF52/51系列 以nRF52832的RADIO外设(下文简称RADIO)为例,操作寄存器的方式介绍和使用该外设: 目的在于充分认识RADIO外设,和记录自己走过的坑: 全为自己理解,可能有不对的 ...
- 前端radio单选框默认选中_「radio选中」单选框radio总结(获取值、设置默认选中值、样式) - seo实验室...
radio选中 单选框 radio 是 否 1.获取值 $("input[name='killOrder']:checked").val(); $('input:radio:che ...
- matlab与vc混合编程指导书.doc,vc与matlab混合编程—基于com.doc
vc与matlab混合编程-基于com.doc VC与MATLAB混合编程基于COM2010年03月21日星期日1118注意旨在提供一份VC调用MATLAB的快速试验参考和一些实际经验,不保证所有内容 ...
- r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总
我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...
最新文章
- XML,JOSN,YAML三种文件类型的区别
- 你绝对能懂的“机器学习”(五)
- Best Time to Buy and Sell Stock(动态规划)
- 信息学奥赛一本通(1163:阿克曼(Ackmann)函数)
- 前端系统化学习【JS篇】:(四-3)基本数据类型之Boolean篇
- 【JavaEE】第零章(2020.03.06)模式 表 索引
- Java试题库(含答案)
- 超市便利店批发行业企业仓库,使用盘点机PDA扫描商品条码高效盘点,库存管不准怎么办
- excel游戏_Excel 20190912的娱乐和游戏
- 有多少程序员干到35岁,那么其他人去干什么了?
- [已授权] 互联网定位技术小谈
- DARKHOLE_1攻略
- php 2016 大麦户源码,2018最新大麦户源码刷客源码信誉源码完美运营带实时到账接口...
- Freefilesync自动同步
- html个人新闻网站,html,js,css实现
- PHP preg_match()函数
- 二手15年13寸MacBook Pro性价比有多高?网友表示值得买
- 解析dwg文件圆弧段被直线化解决方案及相关可能出现的问题(AutomationException: 0x800401f5和AutomationException: 0x80040228)
- Sparrow项目疑问解答
- 攻防世界web新手- fileinclude宜州网信办
热门文章
- 5G省电技术-UE辅助信息 UAI(UE Assistance Information)介绍
- 用DW(html+css+js)做自我介绍还带有登录页面
- X58老平台华硕P6T SE安装NVME SSD折腾记录和简单教程
- 前端面试题 —— 飞机加油问题
- 打印机显示另一台计算机正在使用,惠普打印机显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”怎么办?...
- docker selenium: Message: unknown error: unable to discover open pages
- C++模拟实现位图和布隆过滤器
- 解决子元素浮动造成父元素高度塌陷的问题学习总结
- Kotlin学习(9)→类基础
- CSIG图像图形技术挑战赛重磅来袭!人体目标检测分赛道正式开放注册!