基于MATLAB的Polar码编译码系统性能仿真平台
项目介绍
本项目是一个集成化的Polar码(极化码)性能仿真环境,完全基于MATLAB开发。平台实现了从信道构造、极化编码、AWGN信道模拟到复杂译码算法的完整通信链路。通过该平台,用户能直观观察极化码在不同信道环境下的误块率(BLER)与误码率(BER)性能,并验证不同译码策略(如SC与CA-SCL)对系统增益的影响。
功能特性
- 高斯近似构造(GA):利用高斯近似算法计算子信道可靠性,确定信息位与冻结位的分布。
- 灵活的编码框架:支持自定义码长(2的幂次方)、码率以及CRC校验位的灵活配置。
- 多算法译码器:集成经典的串行抵消(SC)译码算法与高性能的循环冗余校验辅助串行抵消列表(CA-SCL)译码算法。
- CRC循环冗余校验:内置CRC-24A多项式编码与校验功能,用于提升SCL译码的路径选择准确性。
- 仿真自动化:支持指定信噪比(Eb/No)范围的自动遍历,并具备最大误帧数限制和最大仿真帧数双重停止准则。
- 结果可视化:自动生成BLER性能曲线图以及信道极化可靠性度量分布图。
仿真系统实现逻辑
系统仿真遵循标准通信链路流程,核心逻辑按以下阶段执行:
- 参数初始化
设定码长 $N$、信息长度 $K$、信噪比范围、SCL列表宽度 $L$ 以及CRC多项式。计算码率和有效载荷长度。
- 信道构造(离线阶段)
调用基于高斯近似(GA)的算法,以预设的设计信噪比计算 $N$ 个子信道的可靠性指标。根据指标从大到小选取 $K$(或包含CRC后的有效长度)个子信道作为信息位,其余作为冻结位(默认为0)。
- 蒙特卡洛仿真循环
针对每一个Eb/No值执行以下操作:
*
生成数据:产生随机原始信息序列。
*
CRC加码:根据配置对原始信息添加CRC校验位。
*
Polar编码:根据冻结位分布,通过蝶形变换(递归异或运算)生成编码后的发送比特。
*
信道映射:对比特进行BPSK调制,并叠加根据当前信噪比计算得到的AWGN噪声。
*
译码处理:
* 接收端计算初始对数似然比(LLR)。
* 运行SC译码器得到单一估计路径。
* 运行SCL译码器维护 $L$ 条备选路径,并计算路径度量值(PM)。
*
路径决策:
* 若启用CRC,在SCL的 $L$ 条路径中选择通过CRC且PM值最优的路径。
* 若未通过CRC或未启用CRC,则直接选择PM值最小的路径。
*
统计误差:对比原始序列与译码结果,累计误码和误帧数。
- 性能产出
汇总所有信噪比下的结果,计算平均误码率和误块率,绘制性能对比图表。
关键算法与实现细节分析
1. 编码构造逻辑
代码实现了
高斯近似(Gaussian Approximation)算法。其核心在于递归计算子信道的均值 $mu$。通过定义的 $phi(x)$ 近似函数及其反函数,模拟LLR在极化单元中的传递特性。
- 左分支(更差信道):通过 $phi^{-1}(1-(1-phi(mu))^2)$ 更新均值。
- 右分支(更好信道):通过 $2mu$ 进行均值线性增长更新。
最终根据计算出的均值大小对子信道进行升序排列,选取性能最佳的索引用于传输。
2. 极化编码(蝶形变换)
编码过程未采用矩阵乘法,而是使用了基于蝶形变换结构的
分级递归异或运算。通过 $n=log_2(N)$ 级的处理,实现了复杂度为 $O(N log N)$ 的高效编码。
3. SCL 译码与路径分裂
SCL译码实现在信息位处执行路径分裂。每遇到一个信息位,当前存活的 $L$ 条路径均会分裂为“0”和“1”两个分支,产生 $2L$ 条新路径。
- 路径度量(Path Metric)更新:基于LLR值计算分支度量,采用非线性累加方式。
- 路径剪枝:对 $2L$ 条路径按度量值进行排序,仅保留前 $L$ 条最可能的路径。
4. 递归 LLR 计算
SC与SCL算法的核心支撑是递归的LLR计算函数($f$ 运算与 $g$ 运算):
- $f$ 运算:用于计算左子节点LLR。实现为:$text{sign}(L_1)text{sign}(L_2)min(|L_1|, |L_2|)$。
- $g$ 运算:用于计算右子节点LLR。利用左子节点已判决位进行干扰抵消:$L_2 + (1-2u_1)L_1$。
5. CRC校验辅助(CA-SCL)
CRC功能不仅仅用于最终检错,更直接参与SCL的选路逻辑。在所有比特处理完毕后,系统遍历整个候选列表,筛选出符合循环冗余校验条件的路径,这显著提升了在高信噪比下的纠错性能纠偏能力。
使用方法
- 在MATLAB中直接运行主函数。
- 配置参数:可在代码起始处的参数设置区域修改 $N$、$K$、$L$ 以及信噪比范围。
- 切换模式:通过修改
use_crc 变量的布尔值,可在大窗口内对比标准SCL与CRC辅助SCL的性能差异。 - 结果查看:仿真结束后,系统将弹出两个窗口,分别显示误块率对比曲线图和子信道极化可靠性热力图。
系统要求
- MATLAB R2016a 或更高版本。
- 无需额外工具箱支持(纯脚本实现,兼容性强)。