|
1 | 1 | # 信道编码课程大作业 (Channel Coding Course Work) |
2 | 2 |
|
3 | | -这是一个关于卷积码编码与 Viterbi 译码(硬判决/软判决)的 C 语言实现项目。 |
| 3 | + |
| 4 | + |
4 | 5 |
|
5 | | -## 📁 文件说明 |
| 6 | +本项目是信道编码课程的大作业实现。主要包含 **(2,1,3) 卷积码** 的编码器以及基于 **Viterbi 算法** 的硬判决与软判决译码器的 C 语言实现。 |
6 | 7 |
|
7 | | -* `template.c`: 老师提供的原始代码模板。 |
8 | | -* `Viterbi_Hard_K3_75.c`: **当前主程序**。包含卷积编码器和**硬判决** Viterbi 译码器的实现。 |
9 | | -* `print_stateTABLE.c`: 一个辅助工具,用于打印和检查状态转移表 (State Table) 的逻辑是否正确。 |
10 | | -* `.gitignore`: 配置文件,用于忽略编译生成的 `.exe`, `.o` 等临时文件。 |
| 8 | +## 📂 文件结构 |
11 | 9 |
|
12 | | -## ✅ 任务进度 (To-Do List) |
| 10 | +```text |
| 11 | +. |
| 12 | +├── Viterbi_Hard_K3_75.c # 硬判决 Viterbi 仿真主程序 |
| 13 | +├── Viterbi_Soft_K3_75.c # 软判决 Viterbi 仿真主程序 |
| 14 | +├── print_stateTABLE.c # 状态转移表验证工具 |
| 15 | +├── plot_new.py # 自动化绘图脚本 (Python) |
| 16 | +├── .github/workflows/ # GitHub Actions 自动化配置 |
| 17 | +├── zoutput/ # 仿真数据输出目录 (.csv) |
| 18 | +└── pictures/ # 结果图输出目录 (.png) |
| 19 | +``` |
13 | 20 |
|
14 | | -- [x] **编码器 (Encoder)**: 完成状态表生成与编码逻辑。 |
15 | | -- [x] **硬判决译码 (Hard Viterbi)**: 完成 Hamming 距离计算与回溯算法。 |
16 | | -- [x] **软判决译码 (Soft Viterbi)**: 需修改度量计算方式 (Euclidean distance)。 |
17 | | -- [x] **性能仿真 (Simulation)**: 导出 BER vs SNR 数据并绘图。 |
18 | | -- [ ] **(可选) BCJR** |
19 | | -- [ ] **(可选) Turbo: 进阶任务。** |
| 21 | +## 🚀 快速开始 (How to Run) |
| 22 | + |
| 23 | +### 方式一:GitHub Actions (推荐) |
| 24 | + |
| 25 | +无需本地环境,直接在网页操作: |
| 26 | + |
| 27 | +1. 点击仓库上方 **Actions** -\> 选择 **Simulation and Plotting**。 |
| 28 | +2. 点击 **Run workflow**。 |
| 29 | +3. 运行结束后在 **Artifacts** 处下载结果(含 CSV 数据与高清对比图)。 |
| 30 | + |
| 31 | +### 方式二:本地运行 |
| 32 | + |
| 33 | +需要 GCC 与 Python 环境: |
| 34 | + |
| 35 | +```bash |
| 36 | +# 1. 编译 |
| 37 | +gcc Viterbi_Hard_K3_75.c -o viterbi_hard -lm |
| 38 | +gcc Viterbi_Soft_K3_75.c -o viterbi_soft -lm |
| 39 | + |
| 40 | +# 2. 运行仿真 (示例: 0-10dB, 10000帧) |
| 41 | +# 使用 echo 自动输入参数: 起始SNR 终止SNR 帧数 |
| 42 | +echo "0 10 10000" | ./viterbi_hard |
| 43 | +echo "0 10 10000" | ./viterbi_soft |
| 44 | + |
| 45 | +# 3. 绘图 |
| 46 | +# 注意:请手动将生成的 .csv 移动至 zoutput/ 文件夹 |
| 47 | +python plot_new.py |
| 48 | +``` |
| 49 | + |
| 50 | +## 📊 仿真结果 |
| 51 | + |
| 52 | +下图展示了 K=3, (7,5) 卷积码的性能对比(软判决相比硬判决约有 2dB 增益): |
| 53 | + |
| 54 | +> *请运行仿真后查看 `pictures/` 目录下的结果图* |
| 55 | +
|
| 56 | +## ✅ 任务进度 |
| 57 | + |
| 58 | + - [x] **编码器 (Encoder)**: 完成状态表生成与编码逻辑。 |
| 59 | + - [x] **硬判决译码 (Hard Viterbi)**: 完成 Hamming 距离计算与回溯。 |
| 60 | + - [x] **软判决译码 (Soft Viterbi)**: 完成 Euclidean 距离计算。 |
| 61 | + - [x] **自动化流水线**: GitHub Actions 自动编译绘图。 |
| 62 | + - [ ] **(可选) BCJR / Turbo 码**: 待进阶实现。 |
| 63 | + |
| 64 | +----- |
| 65 | + |
| 66 | +*Created by ZZ, LSH, HZH* |
0 commit comments