第六周工作总结——Gnuradio的属性窗口

1. 总述

gnuradio为使用者提供了图形界面,允许使用者编辑可视化的流图。而本质上,可执行的gnuradio应用是一段python脚本。从图形化界面(GRC)到python的翻译是由gnuradio自动实现的,而为其翻译提供关于流图中block的信息的即是block的属性窗口。本文将对常用的属性窗口内容进行简单的介绍,官方介绍详见http://gnuradio.org/redmine/projects/gnuradio/wiki/GNURadioCompanion。

2. 属性介绍

我们给出一个block属性窗口图形界面的例子,该例子包含了属性窗口的大部分元素:


第六周工作总结——Gnuradio的属性窗口_第1张图片

这是一个gfsk调制block的属性窗口,可以看到它有6个属性,其中ID是block实例的名字,verbose和log属性是和调试相关的属性。而剩下的三个属性则是具体的调制参数。其对应的xml文件内容如下:


	GFSK Mod
	digital_gfsk_mod
	from gnuradio import digital
	digital.gfsk_mod(
	samples_per_symbol=$samples_per_symbol,
	sensitivity=$sensitivity,
	bt=$bt,
	verbose=$verbose,
	log=$log,
)
	
		Samples/Symbol
		samples_per_symbol
		2
		int
	
	
		Sensitivity
		sensitivity
		1.0
		real
	
	
		BT
		bt
		0.35
		real
	
	
		Verbose
		verbose
		False
		bool
		#if str($verbose) == 'False' then 'part' else 'none'#
		
		
	
	
		Log
		log
		False
		bool
		#if str($log) == 'False' then 'part' else 'none'#
		
		
	
	
		in
		byte
	
	
		out
		complex
	

在这里,我们对上述代码片中出现的标签逐一介绍,读者可以将上文中图形化模块,图形化属性窗口以及xml的内容互相对照:

: 定义了图形化界面中的一个block。

: 定义了图形化界面中block的名称。

: 定义了block实例在python代码中的名称。

: 翻译该block时需要在import的python module。这是一个很重要的功能,以为除了gnuradio的python module外,有时我们可能需要一些普通module提供的功能,如math、re等,这些在后文中会进行介绍。

: 定义了python中生成block实例的函数(构造函数)。

上述标签是不需要用户编写的,当使用gr_modtool创建一个block时,包含上述标签的xml文件也会被自动创建。而剩下的三个标签,则需要根据实际模块的功能手动编写了。

定义了生成block实例时所需的参数,一个参数往往具有以下几个属性:

: 定义了图形化模块和属性窗口中属性的名称。

: 定义了属性的标识符。

: 定义了属性的默认值。

: 定义了属性的类型。常见的类型包括int、real、complex、int_vector、real_vector、complex_vector、enum、bool、string和raw。其中raw代表任意类型。

: 定义了参数在图形化模块中的显示方式,其取值为none, part, all,分别对应不同程度的显示。

定义了block输入流的类型,而定义了输出流的类型,这两类标签具有相同的子结构:

: 定义了图形化模块的输入输出端的显示名称。

: 定义了输入输出流的类型,包括complex、float、int、short、byte

: 定义了输入输出流中一个item包含基础类型数据的个数。

: 定义了图形化模块和属性窗口中属性的名称。

: 定义了属性的标识符。

: 定义了属性的默认值。

: 定义了属性的类型。常见的类型包括int、real、complex、int_vector、real_vector、complex_vector、enum、string和raw。其中raw代表任意类型。

此外,还有一些上述xml中没有出现的标签:

: 定义了block在图形化界面中的路径。

: 定义block的回调函数,当block参数在运行时发生变化时,可以调用相应的回调函数对block作出相应调整。

: 定义参数约束,例如检查某参数值是否在指定范围以内,或者某字符串是否符合某个格式:

ibeacon_source模块中定义参数major并检查major值是否是0~65535范围的整数(注意由于小于号 < 是关键字,因此在xml中需要使用转义符号<):


    Major
    major
    1
    int
  
0 <= $major <= 65535

ibeacon_source模块中定义参数uuid并检查uuid的格式是否合法,这里,导入python的re包可以简化约束条件的实现:

import re

    UUID
    uuid
    "152FD58B-F3B1-4FA9-A403-CC897B8A17A3"
    string
  
re.match("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", $uuid)

当在实际使用时对这些参数赋值错误时,gnuradio会报错,并禁止用户编译程序:

第六周工作总结——Gnuradio的属性窗口_第2张图片

你可能感兴趣的:(开源夏令营)