基于MATLAB的Turbo码Max-Log-MAP解码算法仿真与性能分析
项目介绍
本项目是一个基于MATLAB平台开发的通信链路仿真系统,专注于实现和分析Turbo码的
Max-Log-MAP解码算法。项目构建了一个完整的数字通信传输模型,从信源产生、编码、调制、信道传输到迭代解码及误码率统计。核心算法采用了Max-Log-MAP(最大对数最大后验概率)算法,这是经典的BCJR算法在对数域的低复杂度实现,通过简化数学运算显著降低了计算量,同时保持了接近最优的解码性能。
功能特性
- 完整的Turbo编译码链路:包含并联级联卷积码(PCCC)编码和基于SISO(软输入软输出)的迭代解码。
- Max-Log-MAP核心算法:实现了对数域的软判决解码,利用Max算子近似Jacobian对数运算。
- 参数化仿真配置:支持自定义帧长、迭代次数、信噪比(Eb/N0)范围和仿真帧数。
- RSC编码模型:使用生成多项式为 $(7, 5)_8$ 的递归系统卷积码。
- BPSK调制与AWGN信道:模拟加性高斯白噪声环境下的二进制相移键控传输。
- 性能可视化:自动绘制不同迭代次数下的误码率(BER)曲线,并统计误帧率(FER)。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外的工具箱(核心算法纯代码实现,未依赖通信工具箱的高层封装函数)
使用方法
- 确保工作路径包含主要仿真脚本及相关的子函数文件。
- 直接运行主函数。
- 程序将依次遍历配置的Eb/N0值(默认为0dB至5dB)进行仿真。
- 控制台将实时输出当前信噪比下的误帧率(FER)、最终迭代的误码率(BER)及耗时。
- 仿真结束后,程序将自动生成BER性能曲线图,并在控制台打印最后一帧的解码比特对比。
详细代码逻辑与实现分析
1. 仿真参数配置
代码首先初始化全局仿真参数,定义帧长为1024比特,最大迭代次数为6次。生成多项式配置为八进制的
[7, 5],即反馈多项式 $1+D+D^2$ 和前馈多项式 $1+D^2$。通过
build_trellis 函数(逻辑包含在项目中)构建适用于RSC编码和MAP解码的网格(Trellis)状态转移表。
2. Turbo编码实现
编码过程采用了标准的RSC(递归系统卷积码)结构:
- 信源产生:生成随机的二进制序列。
- 交织器:生成随机排列索引
alpha_interleaver,用于打乱第二个分量编码器的输入比特顺序。 - 分量编码器:使用
rsc_encode 函数分别对原始序列和交织后的序列进行编码。
* 编码器1输出系统位和校验位p1。
* 编码器2输出校验位p2。
* 代码采用码率为1/3的方案,即传输系统位、校验位1和校验位2。
- 调制与组帧:将0/1比特映射为BPSK符号 -1/+1。对于尾比特(Tail Bits),代码采用了简化的零输入截断(Zero Truncation/Padding)策略,在数据尾部添加0以尝试归零网格状态。
3. AWGN信道模型
仿真模拟了加性高斯白噪声信道:
- 根据当前的 $Eb/N0$ 和码率(1/3)计算每符号信噪比 $Es/N0$ 及噪声标准差 $sigma$。
- 计算信道可靠性因子 $Lc = 4 / (2sigma^2)$,用于在解码端对接收到的信号进行加权,以此生成初始的对数似然比(LLR)。
4. Max-Log-MAP 迭代解码
这是项目的核心部分,实现了两个分量解码器(DEC1 和 DEC2)之间的软信息交换:
- 初始化:计算接收信号的系统位和校验位LLR,初始化先验信息 $L_a$ 为零。
- 迭代循环:
*
DEC1 解码:调用
max_log_map_siso,输入为系统位LLR、校验位p1 LLR和先验信息。输出外信息 $L_{ext1}$。
*
交织处理:将DEC1输出的外信息 $L_{ext1}$ 进行交织,作为DEC2的先验信息。同时对系统位LLR进行相同的交织处理以匹配DEC2的输入顺序。
*
DEC2 解码:调用
max_log_map_siso,输入为交织后的系统位LLR、校验位p2 LLR和来自DEC1的先验信息。输出外信息 $L_{ext2}$。
*
解交织处理:将DEC2输出的外信息 $L_{ext2}$ 进行解交织(恢复原始顺序),作为下一轮DEC1的先验信息。
* 在每次迭代结束或最后一次迭代时,计算后验LLR(系统位LLR + 先验信息 + 外信息)。
* 若 $LLR > 0$ 判决为1,否则为0。
* 对比判决结果与原始信源,统计错误比特数和错误帧数。
5. 辅助功能与可视化
- 状态转移与输出表:代码中通过
build_trellis 逻辑生成网格结构,用于指导递归计算。 - 编码器逻辑:
rsc_encode 函数模拟了带有状态存储的移位寄存器,根据输入和当前状态查表更新状态并输出校验位。 - 绘图:使用
semilogy 绘制BER曲线,清晰展示了随着迭代次数增加(从第1次到第6次),系统纠错性能的提升过程(Waterfall curve)。
算法关键点
- 对数域计算:所有的概率计算均在对数域进行,乘法转化为加法。
- 外信息交换:Turbo码的核心机制,两个解码器并不直接传递判决结果,而是传递对数据比特的“软”估计(外信息),使得两个解码器能够相互辅助纠错。
- SISO模块:软输入软输出模块是实现迭代解码的基础,它同时利用了前向递归(Alpha)、后向递归(Beta)和分支度量(Gamma)来计算每一个比特的后验概率。