初级教程(3)创建和修改 Python 块1-创建你的第一个块
1.创建你的第一个块
本教程介绍如何使用Embedded Python Block创建信号处理块。示例块根据参数将两个输入相加或相乘。
本教程使用“嵌入式 Python 块” ,它只能在创建它的流程图中使用。使用 gr-modtool 创建 Python OOT教程演示了如何将自定义 Python 块创建为树外 (OOT) 模块,它可以在任何流程图中安装和使用。
之前的教程层次块和参数描述了如何创建层次块以及如何使用参数。下一个教程Python Block with Vectors演示了如何编写带有矢量输入和输出的嵌入式 Python 块。
目录
打开代码编辑器
Embedded Python Block是一种用于在流程图中快速构建块原型的工具。搜索Python 块并将其添加到工作区:

双击块以编辑属性。嵌入式 Python 块有两个属性,
- Code,一个点击框,其中包含指向该块的 Python 代码的链接和
- Example_Param,块的输入参数。
点击Open in Editor编辑 Python 代码:

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

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

Python 块的组件
Python 块代码中包含三个重要部分:
- 导入语句为绿色
- __init__蓝色函数
- 红色功函数

导入 语句包括 NumPy 和 GNU Radio 库。
__init__语句:
- 接受默认参数为 1.0 的example_param参数
- 声明该块具有np.complex64输入和输出,这是 GNU Radio Complex Float 32数据类型
- 存储来自输入参数的self.example_param变量
工作职能:
- 具有输入input_items和输出output_items参数
- 对input_items应用数学运算并将结果存储在output_items
- 返回生成的样本数
更改参数名称
修改代码以添加自定义行为。
第一步是将example_param重命名为additionFlag以更具描述性。从编辑器菜单中选择Find and Replace:

进入:
- 查找> example_param
- 替换为> additionFlag
- 单击全部替换

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

将默认值更改为True:

保存文件:

返回 GRC 窗口。
嵌入式Python 块显示Additionflag参数而不是example_param:

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

将块名称更改为Add 或 Multiply Block:

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

编辑工作函数
功函数需要修改 。
Python 块的伪代码是:
如果(additionFlag 为真) 然后添加两个输入 别的 然后将两个输入相乘
修改功函数,使其具有以下代码:

在 Python 中开始新行时,请记住缩进 4 个空格的倍数(4、8、12 等)!
保存代码。
连接流程图
返回 GRC。双击添加或乘积块。为Additionflag属性输入True:

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

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

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

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

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

为Additionflag属性 输入False:

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

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