基于MATLAB的卷积码Viterbi硬判决译码仿真系统
项目介绍
本项目提供了一个完整的数字通信仿真框架,专门用于研究和验证卷积码(Convolutional Codes)在加性高斯白噪声(AWGN)信道下的性能。系统聚焦于标准的(2,1,7)卷积码,通过实现完整的编码过程、BPSK调制、硬判决解调以及基于动态规划的Viterbi译码算法,为用户展示了信道编码如何有效降低数字通信系统中的比特误码率(BER)。该仿真系统不仅包含了核心的算法逻辑,还集成了一套自动化实验工具,能够通过蒙特卡罗方法生成不同信噪比下的性能曲线。
核心功能特性
- 参数化设计:系统采用了经典的(2,1,7)卷积码标准,约束长度为7,生成多项式为八进制形式的171和133,码率为1/2。
- 完整的信号链模拟:实现了从随机信息生成、卷积编码、零比特填充、BPSK调制、AWGN信道模拟到接收端判决的完整物理层链路。
- 硬判决Viterbi译码:实现了高效的Viterbi译码器,包含格图生成、分支度量计算(汉明距离)、加比选(ACS)算子以及路径回溯逻辑。
- 自动化统计分析:内置蒙特卡罗实验循环,能够设定最大仿真比特数和最小错误计数,确保在低信噪比和高信噪比下均能获得统计学意义上的误码率数据。
- 性能直观展示:仿真完成后自动绘制Eb/No与BER的半对数坐标图,方便分析编码增益。
系统要求- 软件环境:MATLAB R2016a 或更高版本。
- 硬件要求:无特殊要求,标准的个人电脑即可运行,但在高信噪比下由于误码触发减少,仿真耗时可能会增加。
系统实现逻辑说明整个仿真流程严格按照以下逻辑步骤执行:
- 参数初始化:设置仿真所需的关键参数,包括约束长度7、八进制生成多项式、回溯深度35(约为约束长度的5倍)以及信噪比扫描范围(0到7dB)。
- 格图(Trellis)构建:在正式译码前,系统会根据生成多项式通过逻辑运算预先计算并存储所有的状态转移关系和对应的输出码字。该过程将八进制多项式转换为二进制,并遍历所有64个可能的状态,记录每个状态在输入0或1时跳转的下一状态及产生的2位编码结果。
- 蒙特卡罗循环仿真:
- 信号产生:生成1000位随机二进制序列,并在每组序列末尾添加6个零(L-1个),以确保编码器在结束时能回归到全零状态。
- 卷积编码:通过移位寄存器模型对序列进行编码,每输入1位信息生成2位编码数据。
- 信道处理:将0/1序列映射为-1/1进行BPSK调制,根据当前设定的信噪比叠加符合Gaussian分布的噪声。
- 接收判决:接收端直接对带噪信号进行大于0的硬判决,将其还原为0或1的离散序列。
- Viterbi 译码实现:
- 前向计算:逐时刻接收两个比特,计算其与格图中各分支输出的汉明距离。
- ACS操作:对于每个状态,比较两条到达路径的累计度量,选择并保留度量值最小的路径,同时记录存活路径的输入比特。
- 路径回溯:编码序列处理完毕后,从最终累计度量最小的状态开始,利用存活路径信息逆向搜索,提取出最可能的原始信息序列。
- 数据对比与绘图:对比原始信息位与译码出的比特位,累计错误总数。循环结束后,计算每个信噪比下的平均误码率,并调用图形工具绘制性能曲线。
关键函数与算法分析
- 生成多项式转换逻辑:系统包含一个专门的辅助逻辑,负责将八进制形式的多项式(如1718)转换为二进制掩码,这是实现特定标准卷积码的基础。
- 自动化格图生成器:该模块计算从当前状态出发,输入不同比特时对应的下一状态索引(0-63)和输出标签。通过十进制表示法存储状态和输出,极大地提高了后续搜索过程的计算效率。
- 卷积编码器:采用状态寄存器模拟方式实现。通过对寄存器中的特定位进行模2加法运算,模拟硬件移位寄存器的工作原理。
- Viterbi核心算子:
- 分支度量:在硬判决模式下,采用接收码字与预测码字之间的汉明距离作为度量指标。
- 路径管理:使用一个多维矩阵记录存活路径,并利用无穷大(inf)初始化非起始状态的度量值,强制译码器从初始零状态开始搜索。
- 逆向回溯表:为了加速回溯过程,系统在译码器内部构建了状态前驱查找逻辑,保证了寻找最优路径时的准确性。
使用方法
- 启动MATLAB软件。
- 将仿真系统的函数代码放入当前工作目录。
- 在命令行窗口直接输入主函数的名称并回车。
- 观察命令行打印的信噪比进度信息。
- 仿真结束后,系统将自动弹出误码率曲线图,并根据打印出的数值分析系统性能。