初级教程(2)流程图基础7-流(Streams)和向量(Vectors)
7.流(Streams)和向量(Vectors)
本教程介绍Stream和Vector之间的区别。
上一教程Packing Bits描述了如何将位流打包为byte或char数据类型,然后将它们解包回位流。下一个教程Hier Blocks and Parameters演示了如何创建Hierarchical Block和使用Parameters。
目录
流(Streams)
GNU Radio 中的块可以使用流(Streams)或向量(Vectors)连接。流为每个时间实例携带 1 个样本。流产生序列化数据。流必须具有数据类型,例如Float 32或Byte。
Signal Source模块生成Complex Float 32 流(Streams)。每个时间实例的块输出包含 1 个复数样本:

该图显示每个时间实例都有一个复杂的样本。
向量 (Vectors)
向量(Vectors)每个时间实例携带多个样本。向量(Vectors)并行表示数据。流(Streams)表示每个时间实例的标量。向量表示每个时间实例的数组。
GRC 使用较浅的颜色表示流,使用较深的颜色表示矢量输出:

Streams to Vectors 流图示例
以下示例描述了如何将流转换为向量并返回流。两个复杂的正弦曲线流被转换为一个二元向量,显示出来,然后被转换回它们的两个独立的流。
将两个Signal Source模块添加到工作区:

编辑第二个信号源 的参数,使其频率为 100,幅度为 0.1,以便在视觉上与第一个信号源区分开:

单击“确定”接受参数。
搜索Streams to Vector块,将其拖到工作区并将其连接到Signal Source块:

Streams to Vector块充当交织器。Streams to Vector块从in0端口获取样本并将其放入输出向量的第一个元素中。Streams to Vector块从in1端口获取样本并将其放入输出向量的第二个元素中。Streams to Vector块将两个串行流输入组合成一个二维矢量输出。
搜索Vector to Stream块并将三个QT GUI Time Sink块添加到流程图:

Vector to Stream块会将向量序列化为流。Vector to Stream输出的样本将被交错。
编辑三个QT GUI Time Sink块 的标题,以便彼此区分。首先,编辑连接到频率为 1000 和振幅为 1 的信号源的块,使其标题为信号源 A:


现在编辑连接到频率为 100、幅度为 0.1 的第二个信号源的QT GUI Time Sink,使其标题为Signal Source B:


最后,编辑连接到Vector to Stream块的QT GUI Time Sink,使其标题为 Interleaved Signal Sources:


运行流程图会显示三个时间接收器,Signal Source A、Signal Source B和Interleaved Signal Sources。交错信号源时间接收器显示来自信号源 A和信号源 B的交错样本:

Vector to Streams 流程图示例
以下示例对矢量化数据进行解交错(或序列化),将其转换回两个流。
搜索Vector to Streams块,将其添加到工作区,并将其连接到Streams to Vector块:

Vector to Streams块反序列化矢量样本并将它们转换为流,执行与Streams to Vector块相反的操作。
右键单击并删除将两个信号源块连接到QT GUI Time Sink块的箭头:

将两个QT GUI Time Sink块移动并重新连接到Vector to Streams输出:

运行流程图。向量化样本已被分离回两个流:

下一个教程Hier Blocks and Parameters演示了如何创建Hierarchical Block和使用Parameters