基于Chase算法的TPC编译码仿真系统
项目介绍
本项目是一个基于MATLAB开发的通信链路仿真系统,专门用于模拟和分析Turbo乘积码(Turbo Product Codes, TPC)的性能。项目的核心在于实现了基于Chase算法(Pyndiah算法)的软输入软输出(SISO)迭代译码方案。
该系统构建了完整的数字通信处理流程,使用的是扩展汉明码作为分量码构建二维乘积码。通过在AWGN(加性高斯白噪声)信道下的仿真,评估了TPC在高信噪比环境下的纠错性能和迭代译码增益。
功能特性
- TPC编码构造:实现了基于(32, 26)扩展汉明码的二维乘积码编码,采用行编码后列编码的方式,构建 $32 times 32$ 的编码矩阵。
- 真实信道模拟:采用BPSK调制方案,并模拟了加性高斯白噪声(AWGN)信道,支持动态调节信噪比(Eb/No)。
- Pyndiah迭代译码:完整实现了Pyndiah提出的Chase算法改进版本,支持SISO软信息传递。
- 自适应权重系数:引入了随迭代次数增加的 $alpha$ 权重因子,逐步增加外信息在译码中的比重。
- 性能可视化:实时统计误比特率(BER),并绘制Eb/No与BER的关系曲线。
系统要求
- MATLAB R2016a 或更高版本
- 通信工具箱(Communications Toolbox)- 用于基础函数支持
使用方法
- 直接运行
main 函数即可启动仿真。 - 程序将自动初始化参数,并在预设的信噪比范围(2dB - 8dB)内进行循环仿真。
- 运行时,控制台会输出当前的仿真进度、误码数、总传输比特数及当前的误码率。
- 仿真过程会实时绘制并更新BER性能曲线图。
代码实现逻辑详解
本项目的所有核心逻辑均封装在单一脚本中,以下是对 main.m 中实际代码实现的详细功能分析:
1. 参数与初始化
- 码型参数:硬编码配置为扩展汉明码 $m=5$,即码长 $n=32$,信息位 $k=26$,最小汉明距离 $d_{min}=4$。
- 仿真参数:设置最大迭代次数为4次(对应8次半迭代),信噪比范围及终止条件(最小误码数50或最大帧数200)。
- Chase参数:设定测试图样选取的最不可靠比特数 $p_{lrb}=4$,即每次译码测试 $2^4=16$ 个图样。
- Pyndiah系数:定义了经验权重列表
alpha_list(从0.2逐步增至1.0)和可靠性补偿系数 beta (0.8)。 - 矩阵生成:这里调用了特定的生成函数来获取扩展汉明码的生成矩阵 $G$ 和校验矩阵 $H$。
2. TPC 编码流程
- 数据生成:并在每一帧中生成 $k times k$ 的随机二进制信息矩阵。
- 行编码:对信息矩阵的每一行通过生成矩阵 $G$ 进行编码。
- 列编码:对行编码后的矩阵,逐列再次通过 $G$ 进行编码,形成最终的 $n times n$ 乘积码矩阵。
3. 信道模型
- 调制:执行BPSK映射,将二进制0映射为-1,1映射为+1。
- 噪声添加:根据设定的码率和信噪比计算噪声标准差 $sigma$,生成高斯白噪声并叠加到发送信号上。
4. Chase迭代译码核心 (Pyndiah算法)
这是代码中最关键的部分,实现了软信息的迭代处理:
- 软信息组合:在每次半迭代开始时,计算输入软信息 $R' = R + alpha times W$,其中 $R$ 是信道观测值,$alpha$ 是迭代系数,$W$ 是上一次迭代计算的外信息。
- 行列交替:
* 奇数次迭代:对矩阵的行进行译码。
* 偶数次迭代:对矩阵的列进行译码(通过转置矩阵复用行译码逻辑)。
- 末次迭代判决:在达到最大迭代次数后,取最后的软输出结果进行硬判决(大于0判为1,小于0判为0)以统计误码。
5. 块译码的具体实现 (process_block_chase)
该子函数对码字矩阵的每一行(或列)执行具体的Chase算法:
- 寻找不可靠位:根据输入软信息的绝对值,找出 $p=4$ 个最不可靠的位置(LRB)。
- 生成测试图样:生成 $2^p$ 种二进制翻转模式。
- 代数译码与度量计算:
* 对每个图样翻转后的硬判决序列进行代数译码。
* 如果译码成功,将其映射回BPSK符号,并计算与
原始信道观测值 ($R_{chan}$) 的欧氏距离平方作为度量值。
* 筛选出度量值最小的码字作为最大似然码字 $D$。
- 外信息计算 ($W$):
* 对于每一位 $j$,寻找一个竞争码字 $C$,要求 $C$ 在第 $j$ 位的值与 $D$ 相反且度量值最小。
*
若找到竞争码字:计算外信息 $w_j = frac{M_C - M_D}{4} times D_j - R_{chan,j}$。
*
若未找到竞争码字:使用近似公式 $w_j = beta times D_j$ 进行可靠性补偿。
6. 辅助算法
- 代数译码器 (
algebraic_decoder_extended_hamming):
* 计算伴随式 $S = r cdot H^T$。
* 利用伴随式查找错误位置。
* 代码逻辑旨在纠正单个比特错误(符合汉明码特性),用于生成候选码字。
7. 统计与绘图
- 每帧仿真结束后,对比译码输出的信息位与原始信息矩阵。
- 累加错误比特数,计算BER。
- 使用
semilogy 绘制BER曲线,并利用 drawnow 实现动态刷新效果。