MATLAB 卷积码编译与维特比译码仿真系统
项目介绍
本系统是一个基于 MATLAB 开发的完整数字通信链路仿真工具,专门用于研究和分析卷积码的编码及其维特比(Viterbi)译码性能。系统模拟了从原始信息生成、卷积编码、信道传输到端到端译码的全过程。通过该系统,用户可以深入理解卷积码的格型图(Trellis Diagram)结构、路径度量计算、状态转移逻辑以及维特比算法中的加比选(ACS)过程。系统不仅提供了标准的卷积码实现方案,还通过误码率(BER)曲线直观展示了在不同信噪比(Eb/No)环境下信道编码对通信质量的改善作用。
功能特性
- 标准编码方案:默认采用 NASA 标准的 (2,1,7) 卷积码,支持自定义生成多项式和约束长度。
- 全自动表驱动逻辑:系统在仿真开始前自动生成状态转移表和输出表,大幅提高编码和译码的执行效率。
- 硬判决维特比译码:核心译码器实现了经典的硬判决维特比算法,通过计算汉明距离进行路径选择。
- 路径度量管理:包含路径度量(PM)的初始化、累加、比较及自动归一化功能,防止在大数据处理时发生数值溢出。
- 完整的信道模拟:实现了 BPSK 调制、加性高斯白噪声(AWGN)信道以及硬判决量化过程。
- 性能可视化:自动统计误码率并绘制 BER 随 Eb/No 变化的对数坐标曲线。
系统要求- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:无需特殊第三方工具箱,核心算法均采用原生代码实现。
实现逻辑说明系统的实现流程严格遵循数字通信理论,主要分为以下四个核心阶段:
- 预处理阶段
* 系统根据输入的约束长度 K 计算出共 2^(K-1) 个状态。
* 将八进制生成多项式转换为二进制逻辑。
* 遍历所有可能的状态和输入比特,预先计算并存储“下一状态表”和“编码输出表”。这种表驱动的方法避免了在循环中重复进行比特移位运算,显著优化了性能。
- 卷积编码阶段
* 模拟移位寄存器的工作原理,根据当前状态和输入比特,从输出表中直接提取对应的编码序列。
* 更新当前状态,处理完所有输入比特后,生成具有纠错冗余的码字序列。
- 信道传输阶段
*
调制:将 0/1 序列映射为 -1/1 的 BPSK 信号。
*
噪声添加:根据设定的 Eb/No 计算噪声标准差 sigma。计算时考虑了码率(R=1/n)对信号能量的影响。
*
判决:接收端将混有噪声的连续信号通过零电平平判决,还原为 0/1 硬判决比特流。
- 维特比译码阶段(核心)
*
分支度量(BM)计算:计算当前时刻接收比特与状态转移线上的期望输出之间的汉明距离。
*
加比选(ACS):对于格型图中的每个状态,计算所有前驱路径累加后的总度量,选择度量最小(即概率最大)的路径作为幸存路径。
*
存活历史记录:利用专门的矩阵记录每个时刻每个状态的最优前驱状态和产生该状态的输入比特。
*
回溯:在完成所有时刻的计算后,从最终时刻度量最小的状态开始,沿着存活路径反向追踪,最终提取出原始信息序列。
关键函数与算法细节分析
- 状态转移逻辑:在预处理阶段,系统通过位操作模拟了寄存器的右移过程。新状态由旧状态去掉最低位并在最高位补入输入比特构成,确保了格型图结构的准确性。
- 路径度量归一化:在维特比译码的循环中,由于路径度量是持续累加的数值,长期运行会导致数值过大。代码每隔 20 个时间步长执行一次归一化(减去当前各状态中的最小度量),确保了算法的数值稳定性。
- 译码深度与对齐:回溯深度被设定为 35(约 5 倍约束长度),这是保证维特比译码收敛的典型经验值。在最后的 BER 统计中,系统考虑到寄存器初始清零和处理延迟,通过截断受影响的边界位来保证对比的公正性。
- 向量化处理:编码函数和判决逻辑均采用了 MATLAB 的向量化操作,减少了显式循环,提高了仿真大规模数据的速度。