基于MATLAB的卷积编码与维特比译码通信模拟系统
项目介绍
本项目是一个基于MATLAB开发的数字通信系统仿真平台,完整演练了从信源编码到信道译码的全过程。系统专注于卷积码(Convolutional Codes)在加性高斯白噪声(AWGN)信道下的性能表现,通过实现经典的维特比(Viterbi)译码算法,直观展示了纠错编码对通信质量的提升作用。该系统适用于通信工程专业的教学演示、算法预研以及不同译码策略(硬判决与软判决)的性能对比分析。
功能特性
- 全链路仿真:涵盖了信源比特生成、卷积编码、BPSK调制、AWGN信道模拟、维特比译码及误码率(BER)统计分析。
- 参数高度可调:支持自定义约束长度(K)、生成多项式(八进制表示)以及回溯深度。
- 双模式译码:内置硬判决(基于汉明距离)和软判决(基于欧氏距离平方)两种维特比译码模式。
- 自动化网格构建:系统能够根据生成多项式自动预计算状态转移表(Trellis)和输出比特表,无需手动输入网格结构。
- 性能可视化:自动生成误码率曲线图,并将仿真结果与理论未编码的BPSK性能进行实时对比。
- 数值稳定性设计:在软判决译码中引入了路径度量归一化机制,有效防止累加过程中的数值溢出。
系统逻辑实现
程序运行遵循标准的数字通信物理层处理流程,具体逻辑如下:
- 参数初始化与网格预计算
系统首先定义编码参数(默认为K=3, R=1/2, 生成多项式[7, 5])。为了提高运行效率,系统遍历所有可能的当前状态和输入比特,预先计算并存储
下一个状态 以及对应的
输出编码位。这一过程模拟了卷积编码器的状态机行为。
- 信号处理链路
*
信源产生:生成随机的二进制比特流。
*
卷积编码:利用预计算的状态转移表,根据输入比特流逐位驱动状态机跳转,输出相应的冗余编码位。
*
BPSK调制:将编码后的0/1比特映射为单极性不归零信号(-1和1)。
*
信道模拟:根据设定的Eb/No值计算噪声标准差,在信号中加入高斯白噪声。
- 维特比译码核心流程
*
前向计算(加比选 - ACS):在每个时间步,遍历所有状态。对于每个状态,计算从前一时刻不同状态转移而来的路径度量。
*
分支度量计算:
* 硬判决:计算接收比特与期望比特之间的汉明距离。
* 软判决:计算接收连续信号与期望星座点之间的欧氏距离平方。
*
路径更新:选择具有最小累积度量的路径作为存活路径,并在存活路径矩阵中记录父状态。
*
路径回溯:在处理完所有数据块后,从最终时刻具有最小度量的状态开始,根据存活路径矩阵逆向追溯,反推原始输入比特。
- 性能评估
通过循环改变信噪比(Eb/No),统计译码后的比特错误数,计算误码率,并绘制半对数坐标曲线。
关键函数与算法说明
- 卷积编码模块:该功能通过状态机逻辑实现。它维护一个当前状态变量,根据当前输入查表获得输出比特并更新状态,确保了编码过程的正向连续性。
- 维特比译码模块:
*
路径度量存储:使用动态更新的向量记录到达每个状态的最小代价。
*
状态转移逆推:在回溯阶段,利用公式
input = floor(bestState / 2^(K-2)) 从状态序列中提取原始信息位,这要求编码器的状态定义与译码器的逆推逻辑精确匹配。
*
度量归一化:每隔固定步长对所有路径度量减去当前的最小值,确保在长序列仿真中软判决度量值保持在数值安全范围内。
- 性能分析工具:利用
erfc 函数计算理论未编码BPSK的误码率,作为基准参考线(Baseline),用于量化卷积码带来的编码增益。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 工具箱需求:基础MATLAB环境即可运行,不依赖额外的通信工具箱(Communication Toolbox),所有核心算法均为手写实现。
使用方法
- 启动MATLAB软件。
- 将程序代码保存为扩展名为
.m 的主脚本文件。 - 在命令行窗口或编辑器中直接运行该脚本。
- 程序将在命令行实时显示不同信噪比下的误码率统计。
- 运行结束后将自动弹出仿真曲线图。
- 若需切换硬/软判决,可修改代码中的
decisionType 变量。