Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

信道编码课程大作业 (Channel Coding Course Work)

Language

本项目是信道编码课程的综合仿真实现。项目涵盖了 卷积码 (Convolutional Codes)Turbo 码 (Turbo Codes) 的核心算法,通过多维度的对比实验(不同码型、判决方式、迭代次数、码长等),深入探究了信道编码在 AWGN 信道下的误码率 (BER) 性能。

📊 1. 综合性能对比 (Overall Performance)

首先展示本项目实现的四种主要编码/译码方案的性能阶梯。

BER Comparison

图 1:不同编码方案的 BER 性能对比

  • Uncoded: 未编码 BPSK (基准)。
  • Hard Viterbi: 卷积码硬判决,提供基础编码增益。
  • Soft Viterbi: 卷积码软判决,相比硬判决有约 2dB 的显著增益。
  • BCJR (MAP): 最大后验概率译码,理论最优的软输出算法。
  • Turbo Code: 采用迭代译码,在低信噪比下表现出极其陡峭的瀑布区。

🧪 2. 卷积码性能分析 (Convolutional Codes Analysis)

我们对比了不同约束长度 ($K$) 和不同码结构(系统码/非系统码)在不同译码算法下的表现。

2.1 硬判决译码 (Hard Decision Viterbi)

对比 $K=3的(7,5)_8$、$K=4的(15,13)_8$ 以及 RSC 递归系统码$(1,5/7)_8$在硬判决下的性能。

Hard Decision Viterbi

图 2:硬判决 Viterbi 性能对比

  • 结论:随着约束长度 $K$ 的增加 (从 3 到 4),编码器的记忆深度增加,纠错能力增强,BER 曲线左移。

2.2 软判决译码 (Soft Decision Viterbi)

同样对比上述三种码型在软判决下的性能。

Soft Decision Viterbi

图 3:软判决 Viterbi 性能对比

  • 结论:软判决充分利用了接收端的信道可靠性信息。与硬判决相比,所有码型的性能均有大幅提升,且 $K=4$ 的优势在软判决下依然保持。

2.3 BCJR (MAP) 算法

展示了基于最大后验概率 (MAP) 的 BCJR 算法在不同码型下的性能。

BCJR Soft Decision

图 4:BCJR (MAP) 算法性能

  • 说明:BCJR 算法输出了比特的软信息 (LLR),是 Turbo 码迭代译码的核心组件。图中展示了其作为独立译码器时的优异性能。

🚀 3. Turbo 码性能分析 (Turbo Codes Analysis)

针对 Turbo 码,我们重点探究了交织长度迭代次数以及级联结构对性能的影响。

3.1 码长与交织增益 (Frame Length & Interleaver Gain)

对比了从短帧 ($N=256$) 到长帧 ($N=16384$) 的性能变化。

Turbo Length Comparison

图 5:Turbo 码不同码长性能对比

  • 结论交织器增益 (Interleaver Gain) 现象极其明显。随着码长 $N$ 增加,交织器打散突发错误的能力增强,BER 曲线的“瀑布区”变得更加陡峭,误平层 (Error Floor) 显著降低。

3.2 迭代次数的影响 (Iterations)

观察 Turbo 码在 1 到 8 次迭代过程中的性能收敛情况。

Turbo Iterations Comparison

图 6:Turbo 码迭代次数性能对比

  • 结论:随着迭代次数增加,译码器之间交换的外部信息 (Extrinsic Information) 逐渐精确。通常在 4-8 次迭代后性能趋于饱和,继续增加迭代次数带来的增益逐渐减小。

3.3 串行级联 vs 并行级联 (SCCC vs PCCC)

对比了两种经典的 Turbo 码级联架构。

Turbo Codes Structure

图 7:串行级联 (SCCC) 与 并行级联 (PCCC) 性能对比

  • PCCC (并行): 经典的 Turbo 码结构,瀑布区出现较早(收敛快),但存在较高的误平层。
  • SCCC (串行): 这里展示了其性能特性,通常 SCCC 具有更低的误平层,适合对误码率要求极高的场景。

📂 项目文件结构 (File Structure)

.
├── 📂 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                     # 项目说明

🛠️ 如何运行 (How to Run)

  1. 编译: 使用 GCC/G++ 编译对应的 .c.cpp 文件。
  2. 运行: 执行生成的可执行文件,输入 SNR 范围和帧数。
  3. 绘图: 运行 python plot_all.py (或其他绘图脚本) 生成上述对比图。

Created by ZZ, LSH, HZH

About

本项目是信息论与编码课程的大作业,涵盖了卷积码 (Convolutional Codes) 与 Turbo 码 (Turbo Codes) 的核心算法实现。通过在 AWGN 信道下进行多维度仿真对比(不同码型、判决方式、迭代次数、码长等),系统分析了误码率 (BER) 性能。项目包含 Viterbi、BCJR 等经典译码算法,以及 Turbo 码的并行级联 (PCCC) 与串行级联 (SCCC) 架构,展示了交织增益、迭代收敛特性和误平层表现。仓库提供完整的源代码、仿真数据与绘图脚本,便于复现和扩展实验。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages