基于BF与WBF算法的LDPC码仿真系统
项目介绍
本项目是一个基于MATLAB开发的低密度奇偶校验码(LDPC)仿真环境。该项目旨在深入研究和对比两种经典的硬判决解码算法——标准位翻转(Bit-Flipping, BF)算法与加权位翻转(Weighted Bit-Flipping, WBF)算法在不同信噪比条件下的性能表现。
系统实现了端到端的数字通信链路仿真,涵盖了从正则LDPC码的校验矩阵构造、生成矩阵推导、随机数据编码、BPSK调制、AWGN信道传输到接收端解码及性能统计的全过程。通过这一系统,用户可以直观地观察到引入幅度信息(WBF)相比于纯硬判决(BF)带来的纠错性能提升以及收敛速度的变化。
功能特性
- 正则LDPC码构建:支持生成指定码长和码率的正则LDPC矩阵,采用MacKay-Neal构造法确保列重(d_v)和行重(d_c)固定。
- 系统码转换:内置GF(2)域下的高斯消元算法,自动将随机生成的稀疏校验矩阵H转化为系统形式的生成矩阵G,确保编码过程直接包含原始信息位。
- 双算法并行解码:在相同的噪声环境和码字下,同时运行BF和WBF两种解码器,确保性能对比的公平性。
- 自适应蒙特卡洛仿真:采用动态停止机制,当收集到足够数量的错误帧(默认为50)或达到最大帧数时自动结束当前信噪比点的仿真,在保证精度的同时提高仿真效率。
- 多维度性能评估:自动计算并记录误码率(BER)和平均迭代次数,反映算法的可靠性与计算复杂度。
- 可视化结果输出:仿真结束后自动生成双子图图表,分别展示BER曲线对比和平均迭代次数收敛曲线对比。
系统要求
- MATLAB R2016a 或更高版本。
- 不需要额外的工具箱(代码通过基础矩阵运算及
randn、randi等标准函数实现)。
使用方法
- 将所有代码文件放置于MATLAB的当前工作目录下。
- 直接运行
main 函数。 - 控制台将输出初始化过程、LDPC矩阵构建状态以及每个信噪比(SNR)点下的实时仿真数据(帧数、误码率、耗时)。
- 运行结束后,系统将自动弹出一个图形窗口展示仿真结果。
核心算法与实现逻辑
本项目的主程序 main.m 严格按照通信系统仿真流程编写,具体实现逻辑如下:
1. 系统参数配置
代码首先定义了LDPC码的关键参数:
- 码长 N = 256
- 校验位 M = 128
- 信息位 K = 128 (码率 R = 0.5)
- 列重 d_v = 3,行重 d_c = 6
- 信噪比范围设定为 0dB 至 8dB。
2. 矩阵构造模块
- H矩阵生成:利用
make_regular_ldpc 函数,通过随机排列列索引的方式,构造满足行列权重约束的稀疏矩阵。 - 系统化与G矩阵生成:
get_systematic_matrix 函数通过GF(2)域的矩阵求逆操作,将H矩阵转化为系统形式,并通过公式 $G = [I | P]$ 导出生成矩阵,同时通过校验 $G cdot H^T = 0$ 确保构造正确。 - 邻接表构建:为了加速后续解码过程中的节点查找,
build_adjacency 函数预先计算并存储了校验节点与变量节点的连接关系。
3. 通信链路主循环
仿真采用蒙特卡洛方法,对每个信噪比点进行独立测试:
- 编码:生成随机二进制信息流 $u$,通过 $c = u cdot G pmod 2$ 生成码字。
- 调制:采用BPSK调制方案,将逻辑0映射为+1,逻辑1映射为-1。这一步对于WBF不仅是传输手段,也为其提供了所需的幅度信息。
- 信道:模拟加性高斯白噪声(AWGN)信道,根据当前SNR计算噪声标准差 $sigma$,并叠加到发送信号上。
4. 解码策略
系统在接收端对同一接收信号 $rx$ 分别应用两种算法:
* 首先对接收信号进行硬判决(大于0判为0,小于0判为1)。
* 计算伴随式 $s = z cdot H^T$。
* 统计每个比特参与的不满足校验方程的个数。
* 选择不满足数最多的比特进行翻转,直到校验成功或达到最大迭代次数。
* 逻辑结构与BF类似,但在选择翻转比特时利用了接收信号的模拟幅度值。
* 根据接收信号幅度为每个校验方程计算可靠性权重,加权计算每个比特的翻转度量值,从而更精准地定位错误位。
5. 统计与可视化
- 仿真仅统计信息位(前K位)的误码情况,符合系统码的实际应用场景。
- 通过
semilogy 绘制误码率随SNR变化的对数曲线,清晰展示并在高信噪比区域区分两种算法的性能差异。 - 通过
plot 绘制平均迭代次数,展示算法收敛所需的计算开销。
关键函数说明
- main: 程序入口,负责参数定义、流程控制、数据统计及绘图。
- make_regular_ldpc: 实现正则LDPC校验矩阵的随机构造,包含基本的环路和权重检查。
- get_systematic_matrix: 执行高斯若尔当消元法(Gauss-Jordan elimination)求解GF(2)逆矩阵,用于系统码转换。
- gf2_inv: 辅助函数,专门用于处理二进制域下的矩阵求逆。
- build_adjacency: 将稀疏矩阵转换为邻接列表形式,优化解码器内的索引查找速度。
- decode_bf: 标准硬判决解码器实现,核心逻辑为"计算伴随式 -> 计数不满足校验 -> 翻转最大值"。
- decode_wbf: (项目中集成) 加权硬判决解码器,利用信道软信息提升翻转决策的准确性。