初级教程(3)创建和修改 Python 块1-创建你的第一个块

1.创建你的第一个块

本教程介绍如何使用Embedded Python Block创建信号处理块。示例块根据参数将两个输入相加或相乘。

本教程使用“嵌入式 Python 块” ,它只能在创建它的流程图中使用。使用 gr-modtool 创建 Python OOT教程演示了如何将自定义 Python 块创建为树外 (OOT) 模块,它可以在任何流程图中安装和使用。

之前的教程层次块和参数描述了如何创建层次块以及如何使用参数。下一个教程Python Block with Vectors演示了如何编写带有矢量输入和输出的嵌入式 Python 块

目录

打开代码编辑器

Embedded Python Block是一种用于在流程图中快速构建块原型的工具。搜索Python 块并将其添加到工作区:

AddPythonBlockToWorkspace.png


双击块以编辑属性。嵌入式 Python 块有两个属性,

  1. Code,一个点击框,其中包含指向该块的 Python 代码的链接和
  2. Example_Param,块的输入参数。


点击Open in Editor编辑 Python 代码:

EmbeddedPythonBlockProperties.png


将显示一个提示,可以选择使用哪个文本编辑器来编写 Python 代码。单击使用默认值

点击使用默认.png


编辑器窗口显示嵌入式 Python 块 的 Python 代码:

PythonCodeGedit.png

Python 块的组件

Python 块代码中包含三个重要部分:

  1. 导入语句为绿色
  2. __init__蓝色函数
  3. 红色函数
PythonBlockCodeFunctions.png


导入 语句包括 NumPy 和 GNU Radio 库。

__init__语句:

  1. 接受默认参数为 1.0 的example_param参数
  2. 声明该块具有np.complex64输入和输出,这是 GNU Radio Complex Float 32数据类型
  3. 存储来自输入参数的self.example_param变量

工作职能

  1. 具有输入input_items和输出output_items参数
  2. 对input_items应用数学运算并将结果存储在output_items
  3. 返回生成的样本数

更改参数名称

修改代码以添加自定义行为。

第一步是将example_param重命名为additionFlag以更具描述性。从编辑器菜单中选择Find and Replace

选择查找和替换.png

进入:

  • 查找example_param
  • 替换为additionFlag
  • 单击全部替换
FindReplaceExampleParam.png


参数已更改。Python 代码已更新:

PythonBlockAdditionFlag.png


将默认值更改为True

AdditionFlagDefaultParam.png


保存文件:

保存按钮Gedit.png


返回 GRC 窗口。

嵌入式Python 块显示Additionflag参数而不是example_param

AdditionFlagUpdatedBlock.png

编辑块输入

默认块有一个输入和一个输出,但是我们需要块的两个输入。要添加输入,请将第二个np.complex64添加到in_sig列表:

添加第二个输入.png


将块名称更改为Add 或 Multiply Block

编辑方块名称.png


保存文件。GRC 显示带有第二个输入的块并更新块名称:

SecondInputOnBlockGRC.png

编辑工作函数

功函数需要修改 

Python 块的伪代码是:

如果(additionFlag 为真)
    然后添加两个输入
别的
    然后将两个输入相乘

修改函数,使其具有以下代码:

编辑工作函数.png


在 Python 中开始新行时,请记住缩进 4 个空格的倍数(4、8、12 等)!

保存代码。

连接流程图

返回 GRC。双击添加或乘积块。为Additionflag属性输入True

SetAdditionFlagProperty.png

单击“确定”保存。

将两个信号源块、一个Throttle块、一个QT GUI Time Sink和一个QT GUI Frequency Sink块拖放到 GRC 工作区中,并根据以下流程图连接它们。将第二个信号源的频率设置为 3000:

ConnectAddMultiplyFlowgraph.png

运行流程图

Add 或 Multiply 块中选择True执行两个Signal Sources的加法。运行流程图会给出以下两个图:

正弦加法.png


这些图显示了两个正弦曲线的总和,一个频率为 1,000,另一个频率为 3,000。QT GUI Time Sink图中的 y 轴部分切断了正弦曲线的幅度。单击滚轮按钮调出显示菜单并选择自动缩放

选择AutoScaleTimeSink.png


然后可以看到两个正弦波的完整振幅:

TimeSinkFullAmplitude.png

通过关闭QT GUI Time Sink或按 GRC 中的方形按钮 停止流程图:

停止流图按钮.png


Additionflag属性 输入False

SetFalseAdditionFlag.png

单击“确定”保存。

根据定义,两个复数正弦波的乘积会在两个频率的总和处产生一个正弦波。因此,频率为 1,000 的信号源与频率为 3,000 的相乘是频率为 4,000 的复数正弦波。运行流程图时可以看到这个复杂的正弦波:

乘法正弦曲线.png


下一个教程Python Block With Vectors介绍了如何修改Python Embedded Block以接受向量输入和输出,以及input_items向量索引在向量和流之间有何不同。

发表回复 0

Your email address will not be published. Required fields are marked *