Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 120 additions & 0 deletions REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# 无线通信技术实验报告:信道编码与信道均衡

## 1. 实验目的

本实验旨在实现并验证信道编码与信道均衡算法,掌握 Hamming(7,4) 码的编码/译码原理,理解多径信道下的 ISI 以及 ZF/LMS 均衡器的设计与性能差异。同时熟悉 GitHub 自动评分和实验报告提交流程。

## 2. 实验原理

### 2.1 信道编码

- Hamming(7,4) 码是一种线性分组码,其每 4 比特信息生成 7 比特码字。
- 通过生成矩阵 `G` 进行编码,接收端利用校验矩阵 `H` 计算伴随式 $s = r H^T$。
- 当伴随式不为零时,表明存在单比特错误;由于 Hamming 码具有最小汉明距离 3,因此可以定位并纠正单比特错误,从而恢复原始 4 个信息比特。
- 信道编码引入冗余比特以提高可靠性,但这会使有效码率从 1 降低到 4/7。

### 2.2 信道均衡

- 多径信道会引起符号间干扰(ISI),使接收符号成为当前符号与前后符号的叠加。
- 迫零均衡器(ZF)通过设计 FIR 滤波器,使等效冲激响应在目标抽头位置为单位脉冲,理论上消除 ISI,但会放大信道零点附近的噪声。
- LMS 自适应均衡器通过最小均方误差准则迭代更新抽头,利用已知训练序列逐步逼近最佳均衡器,实现抗噪声能力更强的均衡效果。

## 3. 实验环境

- Python 版本:3.14.4
- 主要依赖(部分):
- numpy
- matplotlib
- pytest
- python-docx (仅用于生成文档)
- 代码文件:
- `src/part1_channel_coding.py`
- `src/part2_equalization.py`
- `src/utils.py`
- `grading/calculate_grade.py`
- 运行命令:

```bash
c:/Users/hankk/wireless-coding-equalization-exp/.venv/Scripts/python.exe src/part1_channel_coding.py
c:/Users/hankk/wireless-coding-equalization-exp/.venv/Scripts/python.exe src/part2_equalization.py
```

- AI 助手使用情况:
- 参考项目结构、补全函数实现、修复参数和维度问题
- 验证算法逻辑、解释每个核心函数的作用
- 未直接提交未验证的代码,所有修改已本地运行检查

## 4. 实验方法与步骤

### 4.1 Part 1:信道编码

1. 在 `src/part1_channel_coding.py` 中实现 Hamming(7,4) 编码函数 `hamming74_encode(bits)`。
2. 使用校验矩阵 `HAMMING_H` 计算伴随式 `hamming74_syndrome(codewords)`。
3. 在 `hamming74_decode(received)` 中根据伴随式索引错误位置并纠正单比特错误,最后提取前 4 位信息比特。
4. 生成一定长度的随机比特序列,通过二进制对称信道模拟翻转,比较编码前后 BER。
5. 使用 `plot_ber_curve` 绘制 Hamming(7,4) 编码前后的 BER 曲线。

### 4.2 Part 2:信道均衡

1. 在 `src/part2_equalization.py` 中实现 ZF 均衡器估计函数 `estimate_zf_equalizer(channel, num_taps)`。
2. 实现 FIR 滤波函数 `apply_fir_filter(signal, taps)`,保证输出与输入同长度。
3. 实现 LMS 自适应均衡器 `lms_equalizer(rx_train, tx_train, num_taps, step_size)`,使用训练序列迭代更新抽头。
4. 生成多径信道接收信号,分别对原始接收信号、ZF 均衡输出、LMS 均衡输出进行 BPSK 判决并计算 BER。
5. 使用 `plot_equalization_results` 绘制眼图对比,使用 `plot_mse_curve` 绘制 LMS 误差曲线。

## 5. 实验结果

插入结果图:

```markdown
![编码BER曲线](results/coding_ber_curve.png)
```
- 说明:比较未编码与 Hamming(7,4) 编码后的 BER 曲线,验证编码提高抗误码能力。

```markdown
![均衡眼图对比](results/equalization_eye_comparison.png)
```
- 说明:显示原始接收符号与 LMS 均衡后符号的眼图对比,观察 ISI 抑制效果。

```markdown
![LMS误差曲线](results/equalization_mse_curve.png)
```
- 说明:绘制 LMS 均衡训练过程中的误差曲线,显示算法收敛趋势。

> 可选加分图:
> - `results/coding_ber_curve_with_conv.png`:卷积码与 Hamming 编码 BER 对比。
> - `results/equalization_zf_vs_mmse_ber.png`:ZF 与 MMSE 均衡 BER 对比。
> - `results/equalization_lms_vs_rls_mse.png`:LMS 与 RLS 均方误差收敛对比。

## 6. 结果分析与讨论

1. Hamming(7,4) 为什么能纠正单比特错误?
- 因为每个码字的最小汉明距离为 3,单比特错误对应唯一的伴随式模式,可以通过校验矩阵 `H` 定位错误位并纠正。

2. 为什么信道编码会引入冗余并降低码率?
- 为了提高抗错误能力,编码器将 4 个信息比特扩展为 7 个码字比特,增加了冗余比特,使信息传输效率下降,但可靠性提高。

3. ZF 均衡为什么可能放大噪声?
- ZF 以消除 ISI 为目标,要求等效冲激响应在目标位置为单位脉冲,因此在信道频率响应较弱或零点附近会出现高增益,进而放大噪声。

4. LMS 的步长过大或过小会出现什么问题?
- 步长过大:收敛不稳定、误差震荡甚至发散;
- 步长过小:收敛速度慢、适应性差,训练时间变长。

5. 均衡前后 ISI 有什么变化?
- 均衡前,接收信号存在明显的符号间干扰;
- 均衡后,ZF/LMS 处理使主抽头处信号能量集中,ISI 被抑制,判决性能提升。

## 7. 实验心得

- 通过本次实验,加深了对 Hamming 码编码/译码过程的理解,体会到伴随式在错误检测与纠正中的关键作用。
- 通过 ZF 和 LMS 均衡比较,理解了“完全消除 ISI”与“噪声增强”之间的权衡关系。
- 使用 GitHub 自动评分需要保证文件结构、函数接口和结果图名称与实验要求一致。
- AI 助手协助分析实验代码、修复实现细节,并且在实验报告中说明了辅助内容,确保不提交未经验证的代码。

## 8. 参考资料

- 课程课件:第6章 信道编码
- 课程课件:第7章 均衡
- 仓库 README:`README.md`
- 实验代码:`src/part1_channel_coding.py`、`src/part2_equalization.py`
Binary file added results/coding_ber_curve.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/coding_ber_curve_with_conv.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/equalization_eye_comparison.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/equalization_lms_vs_rls_mse.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/equalization_mse_curve.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/equalization_zf_vs_mmse_ber.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading