FPGA实战:从零构建217卷积码的维特比译码器
在数字通信系统中,错误控制编码是确保数据传输可靠性的关键技术。卷积码作为一种经典的前向纠错编码方案,因其优异的纠错性能和适中的实现复杂度,被广泛应用于卫星通信、移动通信和深空通信等领域。本文将带领读者从硬件实现角度,深入探讨(2,1,7)卷积码的维特比译码器设计。
1. 卷积码与维特比译码基础
卷积码是一种具有记忆特性的纠错编码,其编码输出不仅与当前输入信息位有关,还与之前若干时刻的输入信息位相关。(2,1,7)卷积码表示编码器每输入1个信息比特,输出2个编码比特,约束长度为7。这种编码结构可以通过简单的移位寄存器和模2加法器实现。
维特比译码算法由Andrew Viterbi于1967年提出,是一种基于网格图的最大似然序列估计算法。其核心思想是通过动态规划方法,在网格图中寻找与接收序列最接近的编码序列。算法执行过程可概括为三个关键步骤:
- 分支度量计算:计算接收码字与所有可能分支输出之间的汉明距离
- 加-比-选(ACS):累计路径度量,比较并选择最优路径
- 回溯:从最优终止状态反向追踪幸存路径,输出译码结果
在FPGA实现中,我们需要特别关注以下几个关键参数:
| 参数名称 | 符号表示 | (2,1,7)卷积码取值 | 说明 |
|---|---|---|---|
| 状态数 | 2^(L-1) | 64 | L为约束长度 |
| 回溯深度 | D | 35-70 | 通常取5-10倍约束长度 |
| 分支度量位宽 | BM_WIDTH | 4-6 bits | 取决于量化方式 |
| 路径度量位宽 | PM_WIDTH | 8-10 bits | 需防止累加溢出 |
2. 维特比译码器的硬件架构设计
完整的维特比译码器通常包含以下功能模块:
2.1 分支度量计算模块(BMG)
分支度量模块负责计算接收码字与所有可能分支输出之间的汉明距离。对于(2,1,7)卷积码,每个状态有两个输入分支,因此共有128个分支需要计算。硬件实现时可采用并行计算结构:
module BMG (
input [1:0] received_code,
input [1:0] expected_code_0, // 上支路预期输出
input [1:0] expected_code_1, // 下支路预期输出
output reg [3:0] bm_0, // 上支路分支度量
output reg [3:0] bm_1 // 下支路分支度量
);
// 计算汉明距离
always @(*) begin
bm_0 = (received_code[0]^expected_code_0[0]) +
(received_code[1]^expected_code_0[1]);
bm_1 = (received_code[0]^expected_code_1[0]) +
(received_code[1]^expected_code_1[1]);
end
endmodule
2.2 加-比-选模块(ACS)
ACS模块是维特比译码器的核心,负责路径度量的更新和幸存路径的选择。每个ACS单元需要


被折叠的 条评论
为什么被折叠?



