本文的目标:
(1)使用GNU Radio的标准模块来创建流图GRC程序
(2)学习如何在GRC的模块之间调试、解决问题
(3)理解GRC中的采样模块和限流模块的作用
(4)学习如何使用GNU Radio的文档来理解模块的功能
需要具备的基础知识:
(1)关于git的一些基础知识
(2)安装好GNU Radio 3.7或3.8或更新的版本
(3)GNU Radio系列教程(二):初级篇之GNU Radio介绍
目录
一、开始理解什么是GRC
二、GRC的基本操作方法
1、搜索模块
2、修改模块的属性
3、搭建第一个GRC流图
三、有用链接和联系方式
本文讲解视频:/video/BV1z5411H7ZT
一、开始理解什么是GRC
在/OpenSourceSDR/article/details/107509776中,我们已经看到与通用的射频前端配合,GNU Radio包含了许多通信组件模块,是一个可以用来研发无线通信系统的集成工具库。在本文中,我们将介绍如何使用GRC(gnuradio-companion的简写,GNU Radio的图形化界面编程工具,类似于simulink)来创建不同的通信程序。简单来说,GRC是一种帮助我们用图形化的形式来创建python脚本程序的工具。
首先,看一下GRC的主界面。主界面包括五个部分:
(1)界面右侧的GNU Radio的模块库,用于调用已集成到GRC中的模块
(2)GRC的工具栏,用于GRC程序的打开、创建、编译、执行等操作
(3)GRC的终端,用于显示GRC程序,将模块拖拽到此处,用线将不同的模块连接起来,形成通信程序。
(4)工作空间,用于显示GRC程序运行过程中的调试信息
(5)变量,用于显示GRC程序中的变量名称及其数值
本文为了手把手教你如何使用GRC,建议你可以在阅读的同时,能够停下来做一些实践,例如新建一个文档、拖拽模块,不同模块之间连线,等等。学习GNU Radio的最好的方法就是多动手、多实践。碰到问题,在“工作空间”中查看错误信息,寻找解决方法去尝试解决问题。首先,最简单的,就是如何打开GNU Radio的GRC,你需要在Ubuntu中打开一个终端(快捷键是同时按下,ctrl、alt和字母t三个按键),然后输入以下命令后点击回车键,
gnuradio-companion
如果这样操作,你无法正常打开GRC,那么可能你的GNU Radio安装有些问题。
二、GRC的基本操作方法
1、搜索模块
GNU Radio中已包含了通信系统中的常见模块,如何我们要搜索我们想要的模块,我们可以同时按下ctrl和f按键,然后输入你要找的模块的关键字(当然,前提是你知道你要找的模块的名字,例如你是要找一个信号源source,还是一个调制模块modulation),
例如,上图是搜索一个QT GUI Time Sink模块,我们在搜索栏输入sink即可。然后找到你需要的模块,双击该模块或者拖住这个模块到终端界面中松开,都可以把模块添加到终端界面中。
2、修改模块的属性
要想修改模块的属性参数,我们双击这个模块,就会弹出来该模块的属性界面。在每一个新建的GRC程序中,都会有一个默认的模块,叫做“Option”模块,其双属性参数如下图所示。
这里的参数,当你修改了参数的值之后,在你未保存之前,参数栏的颜色会变成蓝色。关于该模块的解释说明,可以查看”Documentation”选项卡。
为了更好的区分不同程序,你可以把每个程序的“Option”模块的ID参数,修改为不同的值,例如“tutorial_two_1”,你可以根据自己的需要来命名。这个ID的参数,会决定你生成的python脚本的名称。即如果你的ID是“tutorial_two_1”,那么生成的Python脚本的名字就是“tutorial_two_1.py”。在GNU Radio 3.8中,如果你不修改ID的默认值,当你运行GRC流图的时候,则会提示错误。
注意“Generate Options”参数的取值,例如,如果你选择的是QT GUI,那么你的界面就应该用“QT GUI Time Sink”,不能用“WX Time Sink”,否则就会提示错误。
3、搭建第一个GRC流图
根据上图搭建一个最简单的信号频域展示的流图,其中“Signal Source”模块是信号源模块,在本例子中用于生成频率为1kHz、幅度为1、相位偏差为0的余弦信号,“Throttle”模块用于在纯仿真流图中是为了避免这个流图消耗过多的电脑CPU,“QT GUI Time Sink”模块是用于展示信号的时域波形的模块。编译上述流图,会在你的流图所在路径下生成一个python脚本文件,点击运行按钮,则会执行该流图,出现以下的波形界面。
点击GRC界面菜单栏中的“Help”菜单下的“Type”,你会打开以下界面,
该界面给出了在GRC流图中常用的数据类型,例如在本例流图中使用的“Complex Float 32”,是指一个复数(包括实部和虚部)的浮点型32位的数据类型,且在不同的模块之间的数据共享(Out和In)中,是用蓝色表示的。在流图运行之后的界面中,我们也发现存在两条线,分别表示实部和虚部数据。
如果我们把“Signal Source”模块的数据类型从“Complex Float 32”修改为“Float 32”(具体修改方法为,你双击这个模块,然后找到“Output Type”,选择“Float 32”),修改后,你会发现“Signal Source”模块的“Out”这里变成了橙色的。并且会看到提示错误信息,提醒你两个模块之间的数据类型不一致。
解决方法就是,你需要将“Throttle”和“QT GUI Time Sink”模块的数据类型都统一修改为“Float 32”类型的。修改完只有,再重新编译运行流图,就可以得到如下的图形,你会发现这时只有一条曲线,这是实部的曲线。
4、一个稍微复杂一点的GRC流图
上述简单的流图构建之后,我们搭建一个稍微复杂一点的GRC流图,
这个流图中,多出来了三个模块,“QT GUI Tab Wdget”、“QT GUI Range”和“QT GUI Frequency Sink”,“QT GUI Tab Wdget”和“QT GUI Range”这两个模块结合起来可以让采样率在一定的范围内调整。在显示界面中可以通过拖动滑动条来调整。“QT GUI Frequency Sink”模块用于显示信号的频域波形。
三、有用链接和联系方式
/index.php/Guided_Tutorial_GRC
淘宝店铺、QQ技术交流群、CSDN账号联系方式如下: