本项目是信道编码课程的综合仿真实现。项目涵盖了 卷积码 (Convolutional Codes) 与 Turbo 码 (Turbo Codes) 的核心算法,通过多维度的对比实验(不同码型、判决方式、迭代次数、码长等),深入探究了信道编码在 AWGN 信道下的误码率 (BER) 性能。
首先展示本项目实现的四种主要编码/译码方案的性能阶梯。
图 1:不同编码方案的 BER 性能对比
- Uncoded: 未编码 BPSK (基准)。
- Hard Viterbi: 卷积码硬判决,提供基础编码增益。
- Soft Viterbi: 卷积码软判决,相比硬判决有约 2dB 的显著增益。
- BCJR (MAP): 最大后验概率译码,理论最优的软输出算法。
- Turbo Code: 采用迭代译码,在低信噪比下表现出极其陡峭的瀑布区。
我们对比了不同约束长度 (
对比
图 2:硬判决 Viterbi 性能对比
- 结论:随着约束长度
$K$ 的增加 (从 3 到 4),编码器的记忆深度增加,纠错能力增强,BER 曲线左移。
同样对比上述三种码型在软判决下的性能。
图 3:软判决 Viterbi 性能对比
- 结论:软判决充分利用了接收端的信道可靠性信息。与硬判决相比,所有码型的性能均有大幅提升,且
$K=4$ 的优势在软判决下依然保持。
展示了基于最大后验概率 (MAP) 的 BCJR 算法在不同码型下的性能。
图 4:BCJR (MAP) 算法性能
- 说明:BCJR 算法输出了比特的软信息 (LLR),是 Turbo 码迭代译码的核心组件。图中展示了其作为独立译码器时的优异性能。
针对 Turbo 码,我们重点探究了交织长度、迭代次数以及级联结构对性能的影响。
对比了从短帧 (
图 5:Turbo 码不同码长性能对比
- 结论:交织器增益 (Interleaver Gain) 现象极其明显。随着码长
$N$ 增加,交织器打散突发错误的能力增强,BER 曲线的“瀑布区”变得更加陡峭,误平层 (Error Floor) 显著降低。
观察 Turbo 码在 1 到 8 次迭代过程中的性能收敛情况。
图 6:Turbo 码迭代次数性能对比
- 结论:随着迭代次数增加,译码器之间交换的外部信息 (Extrinsic Information) 逐渐精确。通常在 4-8 次迭代后性能趋于饱和,继续增加迭代次数带来的增益逐渐减小。
对比了两种经典的 Turbo 码级联架构。
图 7:串行级联 (SCCC) 与 并行级联 (PCCC) 性能对比
- PCCC (并行): 经典的 Turbo 码结构,瀑布区出现较早(收敛快),但存在较高的误平层。
- SCCC (串行): 这里展示了其性能特性,通常 SCCC 具有更低的误平层,适合对误码率要求极高的场景。
.
├── 📂 source_code/
│ ├── Viterbi_Hard_K3_75.c # 卷积码 K=3 硬判决
│ ├── Viterbi_Soft_K3_75.c # 卷积码 K=3 软判决
│ ├── BCJR_K3_75.c # BCJR 算法
│ ├── Turbo_code_version1.cpp # Turbo PCCC 主程序
│ ├── sccc_opt.c # Turbo SCCC 主程序
│ └── ... (其他不同码型源文件)
├── 📂 pictures/ # 上述所有仿真结果图
├── 📂 csv/ # 仿真原始数据
├── plot_all.py # 综合绘图脚本
└── README.md # 项目说明
- 编译: 使用 GCC/G++ 编译对应的
.c或.cpp文件。 - 运行: 执行生成的可执行文件,输入 SNR 范围和帧数。
- 绘图: 运行
python plot_all.py(或其他绘图脚本) 生成上述对比图。
Created by ZZ, LSH, HZH






