# poly2trellis
将卷积码多项式转换为 trellis 描述形式
函数库: TyCommunication
# 语法
trellis = poly2trellis(ConstraintLength, CodeGenerator)
trellis = poly2trellis(ConstraintLength, CodeGenerator, FeedbackConnection)
# 说明
trellis = poly2trellis(ConstraintLength, CodeGenerator) 返回与码率
ConstraintLength 指定编码器输入位流的延迟。CodeGenerator 指定输入比特流到编码器的输出连接。 示例
poly2trellis 函数接受卷积编码器的多项式描述,并返回相应的 trellis 结构描述。其输出可用作 convenc 和 vitdec 函数的输入。
提示
当与反馈多项式一起使用时,poly2trellis 与 trellis 的输入建立反馈连接。
trellis = poly2trellis(ConstraintLength, CodeGenerator, FeedbackConnection) 返回与速率 K/N 反馈编码器的转换相对应的 trellis 结构描述。K 是编码器的输入比特流的数量,N 是输出连接的数量。
ConstraintLength 指定编码器输入位流的延迟。CodeGenerator 指定输入比特流到编码器的输出连接。FeedbackConnection 为编码器的 K 个输入比特流中的每一个指定反馈连接。
# 示例
将 trellis 结构体应用于码率为 1/2 的前馈卷积编码器
利用 poly2trellis 生成 trellis 结构体;生成随机信源。
调用 convenc 函数进行编码,编码过程中使用上述 trellis 结构体。利用 vitdec 进行解码,对比误差。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
t = poly2trellis(3, [6 7])
data = rand(rng, 0:1, 70)
codedData, = convenc(data, t)
tbdepth = 34
decodedData = vitdec(codedData, t, tbdepth, "trunc", "hard")
biterr(data, decodedData)[1]
ans = 0
2/3 前馈卷积编码器的 trellis 结构
创建一个速率为 2/3 的前馈卷积编码的 trellis 结构,并显示部分下一个状态的 trellis 。有关使用此编码器的示例,请参阅 convenc。
该图显示了一个速率为 2/3 的编码器,具有两个输入流、三个输出流和七个移位寄存器。
创建 trellis 结构。将上路径的约束长度设置为 5,将下路径的约束长度设置为 4。代码生成矩阵的八进制表示对应于来自上移位寄存器和下移位寄存器的触发点。
using TyCommunication
trellis = poly2trellis([5 4], [23 35 0; 0 5 13])
trellis = TyCommunication.__Internal__.trellis(4, 8, 128, [0 64 8 72; 0 64 8 72; … ; 55 119 63 127; 55 119 63 127], [0 1 6 7; 6 7 0 1; … ; 4 5 2 3; 2 3 4 5])
结构字段 numInputSymbols 等于 4,因为两个比特流可以产生四种不同的输入符号。结构字段 numOutputSymbols 等于 8,因为三个比特流可以产生八种不同的输出符号。由于编码器共有七个移位寄存器,可能的状态数为 2^7=128,如下一个状态字段所示。
显示 128x4 trellis.nextStates 矩阵的前五行。
trellis.nextStates[1:5, :]
5×4 Matrix{Int64}:
0 64 8 72
0 64 8 72
1 65 9 73
1 65 9 73
2 66 10 74
将 trellis 结构体应用于码率为 1/2 的反馈卷积编码器
创建一个 trellis 结构以表示图中所示的速率 1/2 系统卷积编码器,该编码器具有反馈。
该编码器的约束长度为 5,生成多项式矩阵为 [37 33],反馈连接多项式为 37。
第一个生成多项式是八进制 37。第二个生成多项式是八进制 33。反馈多项式是八进制 37。第一个生成多项式与反馈连接多项式匹配,因为第一个输出对应系统比特。
二进制向量 [1 1 1 1 1] 表示八进制 37,并对应于图中二进制数字的上行。二进制向量 [1 1 0 1 1] 表示八进制 33,并对应于图中二进制数字的下行。这些二进制数字指示从寄存器输出到图中两个加法器的连接。初始的 1 对应输入比特。
通过使用 poly2trellis 函数将多项式转换为 trellis 结构。当与反馈多项式一起使用时,poly2trellis 会在 trellis 的输入处建立反馈连接。
using TyCommunication
using TyMath
rng = MT19937ar(5489)
trellis = poly2trellis(5, [37 33], 37)
trellis = TyCommunication.__Internal__.trellis(2, 4, 16, [0 8; 8 0; … ; 15 7; 7 15], [0 3; 0 3; … ; 1 2; 1 2])
生成随机二进制数据。使用指定的 trellis 结构对数据进行卷积编码。使用 Viterbi 算法解码编码数据,指定 trellis 结构,回溯深度为 34,截断操作模式,做出硬决策。
data = randi(rng, [0 1], 70, 1)
codedData, = convenc(data, trellis)
#维特比解码器的回溯深度
tbdepth = 34
decodedData = vitdec(codedData, trellis, tbdepth, "trunc", "hard")
验证解码后的数据没有比特错误。
biterr(data, decodedData)[1]
0
# 输入参数
ConstraintLength - 约束长度标量 | 向量
约束长度,指定为标量或者向量。
数据类型: Int64
CodeGenerator - 码生成器矩阵
码生成器,指定为八进制数的 K×N 矩阵。CodeGenerator 为编码器的 K 个输入比特流中的每一个指定 N 个输出连接。
数据类型: Int64
FeedbackConnection - 反馈连接向量
反馈连接,指定为八进制数的向量,定义了编码器 K 个输入比特流中每个比特流的反馈连接。
数据类型: Int64
# 输出参数
trellis - trellis 描述结构体
trellis 描述,以结构体的方式返回。有关此结构的更多信息,请参阅 istrellis 函数。
| 码率 K/N 的 trellis 结构体: | 数据类型 | 意思 |
|---|---|---|
| numInputSymbols | 标量 | 输入符号数,以标量形式返回,值为 |
| numOutputSymbols | 标量 | 输出符号数,以标量形式返回,值为 |
| numStates | 标量 | 编码器中作为标量返回的状态数。 |
| nextStates | 矩阵 | 当前状态和当前输入的所有组合的下一个状态,作为 numStates x |
| outputs | 矩阵 | 当前状态和当前输入的所有组合的输出,作为 numStates x |
数据类型: 结构体