Skip to content

Yauanyyy/ChannelCoding-Simulations

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

No releases published

Packages

 
 
 

Contributors