GNU Radio教程1

GNU Radio教程1_第1张图片

一、介绍GNU radio

3.你的第一个流程图(Flowgraph)

3.1开始GNU Radio图形化界面GRC

    GRC是一个创建流程图的可视化编辑器(visual editor),GRC中形成.grc文件,该文件随后被翻译为python文件。

通过CRTL+ALT+T或者在桌面右击鼠标打开终端。

GNU Radio教程1_第2张图片

在终端输入:gnuradio-companion

GNU Radio教程1_第3张图片

双击Options块并通过编辑Id和Title来命名流程图:

GNU Radio教程1_第4张图片

Id是 Python 流程图的文件名。将其命名为sineWaveFlowgraph.py。Title是对流程图的描述。单击确定以保存更改。

单击文件:保存GRC 流程图。

GNU Radio教程1_第5张图片

输入sineWaveGRC.grc作为.grc文件的名称,以将其与.py流程图区分开来。

信号源块文本从红色变为黑色。红色文本表示一个块仍有一个输入或输出需要连接,然后才能运行流程图。

打开文件浏览器。有两个文件。第一个文件是sineWaveGRC.grc,包含在 GRC 中显示流程图的信息。第二个文件是sineWaveFlowgraph.py,包含实际的 Python 流程图代码。

要点:

1. Options块并通过编辑Id和Title来命名流程图,ID是python文件名称,title描述该流程图特点。

2. 信号源模块文本从红色变为黑色。红色文本表示一个块仍有一个输入或输出需要连接,然后才能运行流程图。

3.run之后保存有两个文件.grc文件描述GRC里的流程图信息;.py文件是实际运行的python代码。

二、流程图基础

1.GRC中的python变量

本节描述了如何在GRC中使用python数据类型,和这些如何显示。

1.1CRC中的浮点数和整数

GRC使用python数据类型表示数字,在python中数字可以被表示为整数或浮点数:

整数可以被转换为浮点数通过float();同理,浮点数也可以被转换为整数int()。

GRC中数据类型转换可以在variable块中完成:

GNU Radio教程1_第6张图片

数字被转换为整数:

GRC 显示数字的方式与 Python 不同。例如,将samp_rate块添加到新流程图中。

GNU Radio教程1_第7张图片

samp_rate的值为32000但GRC 显示的值为32k。GRC 将所有数字转换为 SI 单位(国际单位制)。请注意,GRC可能以不同于 Python 中表示的格式显示数字。

再举一个例子,将一个新变量拖放到工作区中。双击编辑属性:

GNU Radio教程1_第8张图片

1.2GRC中的字符串

Python 使用单引号 ' 和双引号 " 来包含字符串:

GNU Radio教程1_第9张图片

1.3GRC中的列表和元组:

GRC 中的变量可以使用 Python 列表:

GNU Radio教程1_第10张图片

GRC 中的变量可以使用 Python 元组:

GNU Radio教程1_第11张图片

1.3list comprehension

list comprehension可以被用来在variable块中写函数,list comprehension用来遍历一个list。

GNU Radio教程1_第12张图片

1.4GRC中块的属性颜色

在编辑一个块的属性时GRC使用一个颜色方案来代表不同的数据类型,QT Frequency Sink块的属性如下:

GNU Radio教程1_第13张图片

属性中有橙色,绿色和紫色,每个颜色代表一种数据类型:

浮点数:橙色

整数:绿色

字符串:紫色

变量块的属性中没有颜色,因为它们可以代表任何一种数据类型。

2.流程图中的变量

要点:1.块的属性设置时可以设置为variable块,

      2.variable块的value可以是变量表达式;

总的来说,GRC中的块是一个函数,且GRC中块的value的选取服从python语法规则。

3.GRC运行时更新变量的值

3.1QT GUI Range

Gnu radio模块库中附带QT GUI组件,这些组件允许在GRC流图运行时进行变量的修改,QT GUI Range创建一个银条用来拖动去更新一个变量

GNU Radio教程1_第14张图片

QT GUI Range像一个变量块一样工作,需要设置QT GUI Range的默认参数。双击QT GUI Range块以编辑属性。QT GUI Range块将替换频率变量,因此首先将Id字段更改为frequency。

默认值是流程图启动时的值。将默认值设置为 0。开始和停止是滑块的开始和停止值。输入-samp_rate/2作为起始值,输入 samp_rate/ 2作为停止值。Step值是滑块的分辨率。在本例中,步长设置为 100 Hz:

3.2 QT GUI Chooser

QT GUI选择器为变量创建一个选项下拉菜单。导航块库:Core、GUI Widgets、QT ,然后将QT GUI Chooser拖放到工作区中。

GNU Radio教程1_第15张图片

GNU Radio教程1_第16张图片

4.信号数据类型

要点:1.每个模块的输入输出端口都有特点的颜色标记,不同的颜色表示不同的数据类型,可以通过点击GRC工具栏中的help-types来查看每种颜色代表的数据类型;

2.复数:以32位复浮点数为例,用32比特浮点数表示实部,32比特浮点数表示虚部

sign1实部,sign2虚部

GNU Radio教程1_第17张图片

3.整个数据流的数据类型需要一致(如果不同需要加入转换模块);

5.数据类型转换

要点:1.char\byte数据类型是另一种常用的,byte用紫色表示,并标记为integer 8

      2.convert模块支持数据类型转换。

6.比特打包

6.1

将bit打包为byte数据在表示二进制数据或一些场景下很常用,比如星座调制,GFSK调制以及OFDM发射器

点击随机信号源模块,按up或down键可以选择输出数据类型,当输出颜色位紫色时,为byte数据类型。

GNU Radio教程1_第18张图片

随机信号源输出的最小数为Minimum,最大值为Maximum-1,所以此例中输出0,1。

Pack k bits用来将数据平行化或者比特打包为单个byte表示更大的二进制数字。

GNU Radio教程1_第19张图片

6.2解释packing K bits Block

GNU Radio教程1_第20张图片

随机源输出byte类型数据,且有效值为0和1所以有效位为最低位LSB,pack k bits模块按输入的先后顺序(从最低有效位开始)存储并打包,因为该模块输出类型为byte且打包4位,所以最高4位补零,低四位是有效位。

6.3解包

解包过程为反过程。

将QT GUI直方图的输入数据数量改为2

GNU Radio教程1_第21张图片

可以看到两个数据完全重合。

7.streams和vectors

GNU Radio 中的块可以使用流或向量连接。一个流为每个时间点携带 1 个样本。流产生序列化数据。流必须具有数据类型,例如Float 32或Byte。

向量在每个时间点中携带多个样本。并行表示数据的向量。流表示每个时间实例的标量。一个向量表示每个时间实例的一个数组。

GRC 使用较浅的颜色来表示流,使用较深的颜色来表示向量输出:

GNU Radio教程1_第22张图片

流转换为向量:

GNU Radio教程1_第23张图片

向量转换为流:

GNU Radio教程1_第24张图片

注意块的名称,streams 、stream

8.hier 块和参数

本节介绍如何创建封装块hier blocks(或者说,层次块hierarchical block)

8.1创建最初的流图

GNU Radio教程1_第25张图片

更新QT GUI RANGE 和低通滤波器的属性;

8.2创建封装块(频移块)

GNU Radio教程1_第26张图片

点击并选中上述两个模块且包括连线;

在选择的区域单击右键选择more-creat hier

GNU Radio教程1_第27张图片

然后便会自动创建一个新GRC界面

GNU Radio教程1_第28张图片

双击options块编辑属性:

GNU Radio教程1_第29张图片Generate Options函数的输出类型选项

GNU Radio教程1_第30张图片Category会自动改变;

类别是可以在 GRC 右侧的模块库中找到块的位置。hier 块将位于GRC Hier Blocks下,而不是其余 GNU Radio 块所在的 Core 。
8.3参数VS变量

变量是函数内部的值,参数用以接收传入函数的值;以hier块为例,变量只存在于函数内部,可在函数内部修改其值,参数用于接受外部源的数据。

GNU Radio教程1_第31张图片

在这个例子中,只有将samp_rate由变量转换为参数才能够在别的GRC流程图中调用这个模块时改变输入参数值。

8.4输入输出端口

Pad被用来指定hier模块的输入输出端口,所以在流程图中需要添加一个pad source和一个pad sink用来指定输入输出端口。

GNU Radio教程1_第32张图片

8.5生成hier模块代码

做完上述的工作之后就可以生成hier模块代码了,点击generate the flow graph来生成代码;

对于 GNU Radio v3.8,将在您的主目录中生成一个 Python .py文件和 YAML .yml文件

GNU Radio教程1_第33张图片

对于 GNU Radio v3.10,文件将在保存.grc文件的目录中创建。请创建.grc_gnuradio目录并在那里复制.py和.yml文件:

GNU Radio教程1_第34张图片

8.6使用hier模块

现在可以在流程图中使用hier块。返回起始流程图并删除Signal Source和Multiply块:

将移频器模块添加到工作区并将其连接到流程图的其余部分:

GNU Radio教程1_第35张图片

GNU Radio教程1_第36张图片

GNU Radio教程1_第37张图片

8.7删除hier块

GNU Radio教程1_第38张图片

你可能感兴趣的:(GNU,Radio,python,编辑器,开发语言)