GNU Radio官方教程系列(八):打包位(比特)
本教程介绍了如何使用 Pack K Bits 模块将位打包成一个字节,以及如何使用 Unpack K Bits 模块将一个字节解包成位。
上一篇教程 “数据类型转换 ”介绍了 字符型 和 字节型 数据类型以及如何在数据类型之间进行转换。下一篇教程“ 流和向量 ”介绍了流和向量之间的区别以及如何在流程图中使用它们。
开始打包位流程图
将 比特 打包成一个字节对于表示二进制数据(而非数字化射频采样)以及使用调制器模块(例如 星座调制器 、 GFSK 调制器 和 OFDM 发射机 )都非常有用。创建一个新的流程图,并将 随机源 模块添加到工作区:
![]()

点击 “随机源” 。选中时会显示 浅蓝色 边框:
![]()

按 向上 或 向下 键循环切换不同的数据类型,直到选中 字节 数据类型(以 紫色 输出端口颜色表示):
![]()

随机源生成的字节最小值为 Minimum ,最大值为 Maximum-1 。在本例中, Minimum = 0 , Maximum = 2 ,因此它将生成二进制 0 和 1。Pack K Bits 模块用于将多个比特并行化(或 打包 )到单个字节中,以表示更大的二进制值。
将 Throttle 、 Pack K Bits 、 Char to Float 和 QT GUI Histogram Sink 模块添加到流程图中并连接它们:
![]()

解释 K 位块的打包
Pack K Bits 块接收 K 位,并通过先填充最低有效位 (LSB) 将它们放入一个字节中。
在本例中, K=4 。 随机源 首先生成比特 B 0 。该比特将被 数据包 K 位 接收,然后存储在最低有效位 (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 ]
下图展示了该模块的工作原理:
![]()

由于 0000B K=4 位已被打包,因此将输出字节 3 B 2 B 1 B 0 ,并开始一个新的字节。该字节的输出值(十进制)为:
= (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 的属性:
- K: 4
![]()

四位二进制数可以生成 0 到 QT GUI 顶部直方图接收器 4 2 之间的数字 -1=15 。编辑 属性,并更改以下内容:
- 标题: 4 位
- 垃圾箱数量: 1024
- x 轴最大值: 16
![]()

四位二进制数可以生成 0 到 2 之间的数字 4 -1=15 。编辑 QT GUI 底部直方图接收器 属性,并更改以下内容:
- 标题: 1 比特
- 垃圾箱数量: 1024
- x 轴最大值: 16
![]()

流程图应如下所示:
![]()

运行流程图。1 0 位 1 直方图显示值 4 位 和 0 ,而 15 直方图显示值从 到 :
![]()

解包比特
解包操作会将一个 字节 序列化为一串比特。将 “解包 K 位” 模块添加到工作区,并将其连接在 “打包 K 位” 模块和 “字符转浮点数 ”模块之间。编辑 “解包 K 位” 模块的属性,并输入 K: 4 。
![]()

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

解包过程从最低有效位 ( 最高有效位 (MSB) LSB) “打包 K 位” 开始,然后依次进行到 0000B 。在前面的示例中, “解包 K 位” 3 模块生成了一个字节,其位为 2 B 1 B 0 B B 。 B 0 模块的输出结果首先是位 B 1 ,然后是位 B 2 、 和 3 ,字节中剩余的 4 个零位将被忽略。
![]()

连接模块:
![]()
![]()
QT QUI 时间接收器显示输出:

单击鼠标左键并拖动鼠标,即可放大查看:
![]()

这两个图完全重合。 “解包 K 位” “打包 K 位” “打包 K 位” 模块的输入与 “解包 K 位”模块 模块的输出完全相同。这表明解包和打包 执行的是完全相反的操作。
![]()
下一个教程 “流和向量 ”介绍了流和向量之间的区别,以及如何在流程图中使用它们。
全部回复 (0)
lium
社区创作者
