(7,4) 汉明码多算法译码性能仿真研究
项目介绍
本项目是一个基于 MATLAB 平台的通信系统仿真实验,旨在深度探究 (7,4) 汉明码在加性高斯白噪声(AWGN)信道下的纠错性能。通过对比三种经典译码算法——硬判决译码(HDD)、最大似然译码(MLD)以及基于软信息的和积算法(SPA),直观展示了不同译码策略在误比特率(BER)性能与计算复杂度之间的权衡。
功能特性
- 多算法集成:在同一个仿真框架内实现了硬判决、全局搜索最优译码和迭代软判决译码三种技术。
- 全链路模拟:完整覆盖了信息源产生、汉明编码、BPSK 调制、AWGN 信道传输及接收端译码的全过程。
- 性能上限对比:通过实现最大似然译码,为 (7,4) 码提供了该信道环境下的理论性能参考基准。
- 动态结果可视化:仿真结束后自动生成半对数坐标系下的 BER 性能曲线,并输出详细的数据比对表格。
- 蒙特卡洛仿真:支持大样本量(如万级帧数)实验,确保统计结果的准确性和平滑度。
系统架构与实现逻辑
系统的实现严格遵循通信链路的线性时序,具体逻辑如下:
- 参数初始化与矩阵定义:
- 定义码长 $n=7$,信息位 $k=4$,码率 $R=4/7$。
- 构建生成矩阵 $G$(系统码形式)和校验矩阵 $H$。
- 遍历所有 $2^4=16$ 种可能的信息序列,预先生成对应的合法码字库,并将其映射为 BPSK 符号备用。
- 信号传输模拟:
-
信源:随机生成 4 位二进制信息。
-
编码:在 GF(2) 域下完成矩阵相乘,得到 7 位码字。
-
调制:将 0 映射为 1,1 映射为 -1。
-
噪声:根据当前的 $E_b/N_0$ 和码率计算噪声标准差 $sigma$,向信号注入符合高斯分布的随机噪声。
- 译码分支处理:
-
硬判决分支:对连续信号进行门限判决取得 0/1 序列。
-
最大似然分支:直接处理接收到的原始连续值信号。
-
和积算法分支:将连续值转化为对数似然比(LLR)作为初始软信息输入。
- 统计与绘图:
- 遍历指定的信噪比范围(0-10 dB)。
- 每一帧对比各算法译码结果与原始信息位,统计误码数。
- 计算每个 SNR 点的平均误比特率,最终绘制曲线。
关键算法深入分析
1. 硬判决译码 (HDD)
该算法基于伴随式(Syndrome)纠错原理。
- 实现细节:接收信号判决为 0 或 1 后,计算 $s = r cdot H^T$。
- 纠错逻辑:如果伴随式非零,则将其与校验矩阵 $H$ 的各列进行匹配。若匹配成功,则翻转对应位置的比特位。
- 特点:其复杂度最低,仅涉及简单的取模运算,但由于忽略了信号的幅值信息,在低信噪比下性能弱于软判决。
2. 最大似然译码 (MLD)
作为线性分组码在等概率发送前提下的最优译码方案。
- 实现细节:将接收到的连续矢量与码字库中预存的所有 16 个合法 BPSK 码字进行欧氏距离计算。
- 纠错逻辑:寻找并输出与接收信号欧氏距离最小的合法码字所对应的信息位。
- 特点:该算法在仿真中表现出的误码率最低,是该码率下的性能边界,但其搜索空间随码长呈指数级增加。
3. 和积算法 (SPA/Sum-Product Algorithm)
借用了 LDPC 码的译码思想,利用因子图上的信息传递。
- 初始化:根据信道噪声方差计算初始 LLR。
- 核心逻辑:程序设定了最大 10 次的迭代过程。包含校验节点更新(利用 $tanh$ 规则处理软信息)和变量节点更新。
- 性能优化:代码中加入了精度限制防止 $atanh$ 运算溢出,并设置了“早期退出条件”——一旦判决结果满足校验方程 $c cdot H^T = 0$,即停止迭代以节省计算开销。
- 特点:针对短码(7,4)汉明码,SPA 的性能曲线极度接近 MLD,证明了软信息迭代对于纠错能力的显著提升。
使用方法
- 环境准备:确保计算机已安装 MATLAB R2016b 或更高版本。
- 参数调节:
- 如需更高精度的曲线,可调整参数区中的
max_frames 变量(增加仿真帧数)。
- 如需研究不同噪声区间,可修改
EbN0_dB 的范围。
- 执行仿真:在 MATLAB 编辑器中打开主程序脚本,点击“运行”。
- 结果查看:
- 实时查看命令行窗口打印的各信噪比下的误码分布。
- 仿真结束后查阅弹出的图像窗口,对比三种算法的性能走势。
- 参考命令行最后输出的结果汇总表格进行定量分析。
系统要求
- 软件:MATLAB 及其基本工具箱。
- 硬件:普通 PC 即可。由于 (7,4) 码规模较小,即使设置 10,000 帧仿真,运行耗时通常也在数十秒内(取决于 CPU 性能)。