基于MATLAB的LDPC信道编译码仿真系统
项目简介
本项目是一个基于MATLAB开发的完整LDPC(低密度奇偶校验码)通信链路仿真系统。该系统实现了从码构造、编码、信道传输到迭代译码的全过程。项目旨在模拟和验证LDPC码在加性高斯白噪声(AWGN)信道下的纠错性能,特别关注规则LDPC码的构造与对数域和积算法(Log-SPA)的译码实现。
该仿真系统不仅展示了信道编码的理论流程,还通过具体的算法实现解决了短环消除、系统码转换及数值溢出保护等工程问题,适合通信工程领域的科研人员及学生用于理解LDPC码的核心原理及迭代收敛特性。
主要功能特性
- 规则LDPC码构造:实现了避免长为4的短环(Cycle-4)的规则校验矩阵构造算法。
- 系统码转换:通过高斯消元法将稀疏校验矩阵转换为系统形式,并由此生成生成矩阵,确保编码的高效性。
- 完整通信链路:包含随机信源产生、BPSK调制、AWGN信道模拟及接收端解调。
- Log-SPA迭代译码:实现了基于对数似然比(LLR)的和积译码算法,包含数值稳定性处理。
- 性能可视化:实时仿真并绘制误比特率(BER)随信噪比(SNR)变化的曲线图。
- 蒙特卡洛仿真:支持自定义帧数和错误门限,确保统计结果的准确性。
系统要求
- MATLAB R2016a 或更高版本(因使用基本矩阵运算,兼容性较好)。
- 无需额外的工具箱(Toolbox),所有算法均为原生代码实现。
使用方法
直接运行主程序即可启动仿真。程序会自动清空工作区,依次执行矩阵构造、编码、信道传输与译码过程,并在控制台输出当前信噪比下的误码统计信息,同时在图形窗口绘制BER曲线。
详细功能与实现逻辑
本项目的主程序逻辑严密,涵盖了以下核心步骤:
1. 系统参数初始化
程序首先定义了仿真的关键参数,设定码长为1000,变量节点度为3,校验节点度为6,从而确定码率为0.5。信噪比(Eb/N0)扫描范围设定为0dB至4dB,步长0.5dB。同时设置了最大仿真帧数、最少错误帧数门限以及译码器的最大迭代次数。
2. LDPC码的构造与生成
- H矩阵构造:采用半随机构造法生成规则LDPC校验矩阵。算法在填充列重时,不仅检查行重限制,还通过点积运算严格检查新加入的节点是否会与既有节点构成长度为4的环(Cycle-4),以保证译码性能。
- G矩阵生成:利用高斯消元法及列置换策略,将稀疏校验矩阵H转化为系统形式
[P | I],进而根据线性分组码性质导出生成矩阵 G = [I | P']。程序会自动验证 G * H' = 0 的正交性以确保构造正确。
3. 信道仿真循环
仿真采用蒙特卡洛方法,对每个信噪比点进行多次独立实验:
- 信源产生:根据计算出的信息位长度,随机生成二进制信息序列。
- 编码:使用生成的生成矩阵G对信息位进行线性分组编码。
- 调制与传输:采用BPSK调制(0映射为+1,1映射为-1),并根据当前信噪比计算噪声功率,叠加高斯白噪声。
- 译码:接收端使用系统形式的校验矩阵H对接收信号进行迭代译码。
- 误码统计:比对译码输出的信息位与原始发送位,统计总误比特数和误帧数。
4. 结果可视化
在仿真过程中,系统会动态计算并更新BER曲线,能够直观地观察到随着信噪比增加,误码率呈瀑布状下降的趋势。
关键算法实现细节
Log-SPA 译码算法 implementation
译码模块实现了标准的对数域和积算法(Log-SPA),具体细节如下:
- 初始化:根据接收到的含噪信号计算初始对数似然比(LLR),公式为
2 * rx / sigma^2。 - 校验节点更新(水平步):利用
tanh 函数计算校验信息。代码中增加了数值截断保护(限制在 +/- 30 以内)和极值保护(防止 log(0)),以避免迭代过程中出现 NaN 或 Inf。 - 变量节点更新(垂直步):通过累加来自校验节点的外信息和信道初始信息来更新变量节点的LLR。
- 判决与校验:根据总LLR符号进行硬判决,并计算伴随式(Syndrome)。如果伴随式全为零,则提前终止迭代,提高了仿真效率。
避免4环的构造算法
在构造校验矩阵的辅助函数中,实现了一种贪婪搜索策略。在为每一列放置“1”时,算法会遍历该列已有的行索引,检查当前候选行是否与这些已知行在其他列存在共同的“1”。如果存在共同的“1”,则意味着构成了4环,算法会跳过该位置重新尝试,从而保证了生成的稀疏矩阵具有较好的围长特性。
鲁棒的高斯消元
为了从满秩或亏秩的H矩阵中提取系统形式,代码实现了带有全选主元(Full Pivoting)逻辑的高斯消元。它能够动态寻找非零主元并进行行/列交换,最终提取出线性无关的行构成系统矩阵,这对于LDPC码的实际编码至关重要。