1-2.2带向量的 Python 块
本教程描述了如何修改Python Embedded Block以接受向量输入和输出,以及向量和流之间的input_items向量索引有何不同。
首先,如图所示,创建模块并修改属性
由图可知,Python Embedded Block需要向量输入和输出。
1.使Python Embedded Block接受向量输入和输出
要求有三点:
向量输入;
向量输出;
输入输出的数据类型需改为float(根据模块的输入输出颜色可知)。
双击模块并编辑源代码,
保存之后,将Max Hold Block接入流程图。
2. 向量长度不匹配的警告
Embedded Python Block有一个区别于其他Out of Tree 模块(OOT)的特点。在运行流程图之前,GRC 检查以确保所有连接的数据类型和向量大小匹配。
在这个过程中__init()__函数 中vectorSize的默认值为16,
vectorSize用于定义输入输出向量的大小
在判断流程图是否正确时。在这种情况下vectorSize=16。GRC 假设输入和输出端口是长度为 16 的向量,即使传入了不同的参数!(也就是说GRC判断时以默认参数为准) 下图显示了如何将大小为 128 的向量作为参数传入(传入参数与默认参数不一致),GRC 不会将其捕获为错误,但流程图一旦运行就会崩溃:
或者,如果默认参数与其他块的向量大小不匹配,GRC 将显示错误。在这种情况下,代码中的默认向量长度为 128,但传入的参数为 16:
3. Indexing Streams
对于一个流,可以使用port number和sample index来索引输入和输出。
只基于端口号的索引,返回所有的输入样本,例如:
返回端口 0 上的所有输入样本。
返回0端口的第四个样本。
流的索引可被概括为:
4.Indexing Vectors
索引向量时,输入input_items和输出output_items包含一个额外的维度。
基于portIndex的索引返回所有向量和样本的二维数组,例如:
基于portIndex和vectorIndex的索引返回样本的一维数组,例如:
基于portIndex、vectorIndex和sampleIndex的索引返回单个样本。
5.Creating Max Hold Function
修改work()函数,时期包含Creating Max Hold()函数。
首先,在所有input_items[0]的向量上添加一个循环:
计算向量的最大值:
在每一个输入样本上添加循环:
分配输出样本maxValue:
保存代码 (CTRL + S)。运行流程图。输出将显示两个正弦曲线,每 16 个样本应用一次最大保持:
6.多个输入输出向量端口
修改Max Hold Block模块来添加新的输入输出向量端口。
首先,按下图所示创建模块并修改属性。
编辑Max Hold Block的源代码,来增加新的输入输出向量端口。
将work()函数修改为在两个输入端口上输出max hold function:
添加一个外循环:
遍历所有端口;
保存代码并连接流程图:
运行流程图。现在将生成两个最大保持输出,一个用于噪声源,一个用于正弦波: