初级教程(2)流程图基础6-打包位 (Packing Bits)
6.打包位 (Packing Bits)
本教程介绍如何使用Pack K Bits模块将位打包为字节,以及如何使用Unpack K Bits模块将字节解包为位。
之前的教程, 转换数据类型,描述了char或byte数据类型以及如何在数据类型之间进行转换。下一个教程Streams and Vectors描述了流和向量之间的区别以及如何在流程图中使用它们。
目录
启动Packing Bits流程图
将位打包成一个字节对于表示二进制数据(与数字化 RF 样本相反)以及使用调制器块时很有用:Constellation Modulator、GFSK Mod和OFDM Transmitter。创建一个新的流程图并将Random Source块添加到工作区:

单击随机源。当以浅蓝色勾勒出轮廓时,它被选中:

按UP或DOWN键循环选择不同的数据类型,直到选择字节数据类型,用紫色输出端口颜色表示:

随机源生成最小值为Minimum到最大值为Maximum-1的字节。在这种情况下,Minimum = 0和Maximum = 2,因此它将创建二进制0和1。Pack K Bits块用于将多个位并行化或打包为单个字节以表示更大的二进制值。
将Throttle、Pack K Bits、Char to Float和QT GUI Histogram Sink块添加到流程图并连接它们:

解释Packing k Bits块
Pack K Bits块获取K位并通过首先填充最低有效位 (LSB) 将它们放入一个字节中。
对于这个例子K=4。随机源将首先生成位B 0。这将由Pack K Bits接收,然后存储在 LSB 中:[0 0 0 0 0 0 0 B 0 ]
Pack K Bits生成的第二个比特是B 1,然后由Pack K Bits根据:[0 0 0 0 0 0 B 1 B 0 ]
按照这种趋势,接下来的位B 2和B 3将存储为:[0 0 0 0 B 3 B 2 B 1 B 0 ]
下图演示了该块的工作原理:

由于已打包K=4位,字节0000B 3 B 2 B 1 B 0将作为输出产生,并开始一个新字节。字节的十进制输出值(基数为 10)为:= (B 3 *2 3 ) + (B 2 *2 2 ) + (B 1 *2 1 ) + (B 0 *2 0 )= (B 3 *8) + (B 2 *4) + (B 1 *2) + (B 0 )
例如,如果:
- B 0 = 0
- B 1 = 1
- B 2 =0
- B 3 = 1
该字节将由00001010表示,十进制值为:
8 + 0 + 2 + 0 = 10
完成Pack K Bits 流程图
编辑Pack K Bits的属性:
- 克:4

四位产生从2 0 =1到2 4 -1=15 的数字。编辑顶部QT GUI 直方图接收器属性并更改以下内容:
- 标题:4位
- 箱数:1024
- 最大 x 轴:16

四位产生从2 0 =1到2 4 -1=15 的数字。编辑底部QT GUI Histogram Sink属性并更改以下内容:
- 标题:1位
- 箱数:1024
- 最大 x 轴:16

流程图应如下所示:

运行流程图。1位直方图显示0和1的值,而4 位直方图显示0到15的值:

Unpacking Bits
解包将一个字节序列化为一串位。将Unpack K Bits模块添加到工作区并将其连接在Pack K Bits模块和Char to Float模块之间。编辑Unpack K Bits块属性并输入K: 4。

运行流程图。1 位直方图显示打包的 4 位被解包(序列化)回值0和1:

解包首先从LSB开始,然后进行到最高有效位 (MSB)。从前面的示例中,Pack K Bits产生了一个字节,其位为0000B 3 B 2 B 1 B 0。Unpack K Bits块首先产生一个带有位B 0的输出,然后是B 1、B 2和B 3,字节中剩下的 4 个 4 个零被忽略。
Unpack K Bits块完美地反转了Pack K Bits输入流的操作。这可以通过添加带有两个输入的QT GUI Time Sink块来验证:

连接块:

QT QUI Time Sink显示输出:

鼠标左键单击并拖动较小的部分以放大:

这两个图完全重叠。Pack K Bits块的输入与Unpack K Bits块的输出完全相同。这演示了Pack K Bits和Unpack Bits如何执行完美的逆运算。

下一个教程Streams and Vectors描述了流和向量之间的区别以及如何在流程图中使用它们。