初级教程(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块添加到工作区:

AddRandomSourceToWorkspace.png


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

选择随机源块.png


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

ChangeRandomSourceToByte.png


随机源生成最小值为Minimum到最大值为Maximum-1的字节。在这种情况下,Minimum = 0和Maximum = 2,因此它将创建二进制0和1。Pack K Bits块用于将多个位并行化或打包为单个字节以表示更大的二进制值。

将Throttle、Pack K Bits、Char to Float和QT GUI Histogram Sink块添加到流程图并连接它们:

PackBitsStartingFlowgraph.png

解释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 ]

下图演示了该块的工作原理:

PackingBitsExample.png


由于已打包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
Pack4Bits.png


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

  • 标题:4位
  • 箱数:1024
  • 最大 x 轴:16
HistogramSink4Bits.png

四位产生从2 0 =1到2 4 -1=15 的数字。编辑底部QT GUI Histogram Sink属性并更改以下内容:

  • 标题:1位
  • 箱数:1024
  • 最大 x 轴:16
HistogramSink1Bit.png

流程图应如下所示:

PackBitsFinalFlowgraph.png


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

直方图4Bits1Bit.png

Unpacking Bits

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

UnpackBitsFlowgraph.png


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

直方图UnpackBits.png


解包首先从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块来验证:

TwoInputsTimeSink.png


连接块:

PackUnpackFlowgraph.png


QT QUI Time Sink显示输出:

PackUnpackTimeSink.png


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

ClickAndDragTimeSink.png


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

PackUnpackTimeSinkZoom.png

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

发表回复 0

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