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
8 changes: 8 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"Bash(PYTHONUTF8=1 python convert_md2docx.py)",
"Bash(PYTHONUTF8=1 python grading/calculate_grade.py)"
]
}
}
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"python-envs.defaultEnvManager": "ms-python.python:conda",
"python-envs.defaultPackageManager": "ms-python.python:conda"
}
Binary file added REPORT.docx
Binary file not shown.
201 changes: 201 additions & 0 deletions REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
# 无线通信技术实验报告:信道编码与信道均衡

## 1. 实验目的

本实验旨在通过 Python 仿真掌握无线通信中两项关键技术:

1. **信道编码**:理解 Hamming(7,4) 线性分组码的编码、伴随式计算与单比特纠错译码流程,观察编码增益对误比特率(BER)的改善效果。
2. **信道均衡**:理解码间干扰(ISI)的产生机理,掌握迫零(ZF)均衡器和最小均方(LMS)自适应均衡器的设计与实现,评估均衡对通信质量的提升。
3. **工程实践**:熟悉使用 Git 进行版本控制、GitHub Classroom 自动评分的工作流程,以及 AI 辅助编程在通信仿真中的应用。

## 2. 实验原理

### 2.1 信道编码

**Hamming(7,4) 编码**是一种线性分组码,将 4 个信息比特编码为 7 个编码比特,码率为 $R = 4/7 \approx 0.571$。其生成矩阵为:

$$
G = \begin{bmatrix}
1 & 0 & 0 & 0 & 1 & 1 & 0 \\
0 & 1 & 0 & 0 & 1 & 0 & 1 \\
0 & 0 & 1 & 0 & 0 & 1 & 1 \\
0 & 0 & 0 & 1 & 1 & 1 & 1
\end{bmatrix}
$$

编码计算为 $\mathbf{c} = \mathbf{u} \cdot G$(GF(2) 运算),生成系统码(前 4 位为原始信息位,后 3 位为校验位)。

**校验矩阵与伴随式**:校验矩阵 $H$ 满足 $G H^T = 0$。接收码字 $\mathbf{r} = \mathbf{c} \oplus \mathbf{e}$($\mathbf{e}$ 为错误图样),伴随式定义为:

$$
\mathbf{s} = \mathbf{r} \cdot H^T = \mathbf{e} \cdot H^T
$$

本实验使用的校验矩阵为:

$$
H = \begin{bmatrix}
1 & 1 & 0 & 1 & 1 & 0 & 0 \\
1 & 0 & 1 & 1 & 0 & 1 & 0 \\
0 & 1 & 1 & 1 & 0 & 0 & 1
\end{bmatrix}
$$

**单比特纠错原理**:当发生单比特错误时,伴随式 $\mathbf{s}$ 非零,且等于 $H$ 的第 $i$ 列(错误位置对应的列)。通过对比 $\mathbf{s}$ 与 $H$ 的各列即可定位错误比特并翻转纠正。因为 Hamming(7,4) 的最小汉明距离 $d_{min}=3$,可以纠正 1 个错误或检测 2 个错误。

**编码增益**:虽然编码引入了冗余(7/4 倍带宽开销),但在相同信噪比下可获得更低的 BER。编码增益定义为在相同 BER 下编码与未编码所需信噪比的差值。

**卷积码与 Viterbi 译码(选做)**:(2,1,3) 卷积码是一种非分组码,编码器由 2 级移位寄存器构成(约束长度 $K=3$),生成多项式为 $g_1 = (111)_2$、$g_2 = (101)_2$。每输入 1 个信息比特产生 2 个编码输出,码率 $R = 1/2$。

编码器结构:移位寄存器维持 2 个延迟状态 $(d_1, d_2)$,输出为:
$$
\begin{aligned}
c_1[n] &= b[n] \oplus d_1[n] \oplus d_2[n] \\
c_2[n] &= b[n] \oplus d_2[n]
\end{aligned}
$$
编码结束后追加 2 个零尾比特使状态归零。

**Viterbi 硬判决译码**基于最大似然准则,在网格图(4 状态 00/01/10/11)上搜索与接收序列汉明距离最小的路径。每步执行加-比-选(ACS)操作:计算分支度量(汉明距离),累加路径度量,选出幸存路径。处理完全部接收符号后,从最小度量状态回溯,去掉尾比特即得译码结果。

### 2.2 信道均衡

**码间干扰(ISI)**:在多径传播环境中,信号经不同路径到达接收端,产生时延扩展。时域上表现为当前符号受到前后符号的干扰,即 ISI。ISI 会严重恶化接收性能,需要在接收端通过均衡器予以消除。

**多径信道模型**:本实验采用三径 FIR 信道 $h = [0.9, \; 0.35, \; -0.25]$,接收信号为发送符号与信道冲激响应的卷积叠加噪声:

$$
r[n] = s[n] * h[n] + w[n]
$$

**迫零(ZF)均衡**:通过设计 FIR 均衡器 $\mathbf{w}$,使信道与均衡器的级联响应逼近理想冲激 $\mathbf{d}$(仅中心位置为 1)。求解线性方程组 $A \mathbf{w} \approx \mathbf{d}$(使用最小二乘法)。ZF 均衡器完全消除 ISI,但可能放大噪声,尤其在信道频率响应有深衰落时。

**LMS 自适应均衡**:LMS 算法是一种基于梯度下降的自适应滤波方法,无需矩阵求逆。迭代更新公式为:

$$
\begin{aligned}
y[n] &= \mathbf{w}^T[n] \cdot \mathbf{x}[n] \\
e[n] &= d[n] - y[n] \\
\mathbf{w}[n+1] &= \mathbf{w}[n] + \mu \cdot e[n] \cdot \mathbf{x}[n]
\end{aligned}
$$

其中 $\mu$ 为步长参数,控制收敛速度与稳态误差的权衡。

## 3. 实验环境

- **Python 版本**:3.10+
- **主要依赖**:
- NumPy(矩阵运算、线性代数)
- Matplotlib(BER 曲线、眼图/波形图、误差曲线绘制)
- SciPy(信号处理辅助)
- pytest(单元测试框架,用于 GitHub Classroom 自动评分)
- **开发工具**:Git(版本控制)、GitHub Classroom(自动评分)
- **AI 助手使用情况**:本实验使用 Claude Code 作为 AI 编程助手,辅助完成代码编写、调试、报告撰写等工作(详见第 8 节)。

## 4. 实验方法与步骤

### 4.1 Part 1:信道编码

1. **生成测试数据**:使用 `generate_bits` 生成 4000 个随机信息比特(seed=2026),并截断为 4 的倍数以适应 Hamming(7,4) 的分组大小。
2. **编码**:调用 `hamming74_encode`,将信息比特按 4 位分组,通过生成矩阵 $G$ 在 GF(2) 上编码为 7 位码字。
3. **加噪/翻转**:在误差概率集合 $\{0.001, 0.003, 0.01, 0.03, 0.06, 0.1\}$ 上,通过二元对称信道(BSC)分别对未编码比特和编码比特进行随机翻转。
4. **译码**:调用 `hamming74_decode`,对接收码字计算伴随式,若伴随式非零则定位并纠正错误位,提取前 4 位信息比特。
5. **BER 对比**:计算每个误差概率下未编码和 Hamming(7,4) 编码的 BER,绘制双对数坐标 BER 曲线。
6. **选做——卷积码**:实现 `convolutional_encode`((2,1,3) 卷积码,生成多项式 g1=111, g2=101)和 `viterbi_decode_hard`(硬判决 Viterbi 译码),通过网格图 ACS 操作和回溯完成最大似然译码。

### 4.2 Part 2:信道均衡

1. **信号生成**:生成 2000 个随机比特(seed=2027),经 BPSK 调制映射为 $\pm 1$ 符号。
2. **多径传输**:符号通过三径信道 $[0.9, 0.35, -0.25]$,叠加标准差 $\sigma=0.12$ 的高斯噪声,模拟多径与加性噪声的联合影响。
3. **ZF 均衡器设计**:调用 `estimate_zf_equalizer`,构造卷积矩阵 $A$,以理想冲激为期望响应 $\mathbf{d}$,通过 `np.linalg.lstsq` 求解 7 抽头 FIR 均衡器系数。
4. **LMS 自适应均衡**:使用前 800 个符号作为训练序列,调用 `lms_equalizer`($\mu=0.01$,7 抽头),迭代更新抽头系数,记录每次迭代的瞬时误差。
5. **均衡效果评估**:
- 对比均衡前后 BER:对均衡输出进行 BPSK 硬判决解调,计算 BER。
- 绘制均衡前后波形对比图。
- 绘制 LMS 训练误差收敛曲线。

## 5. 实验结果

### 5.1 Part 1:编码 BER 曲线

![编码BER曲线](results/coding_ber_curve.png)

**说明**:图中横轴为信道误码概率(BSC 翻转概率),纵轴为 BER(对数坐标)。蓝色曲线为未编码 BPSK 的 BER,橙色曲线为经 Hamming(7,4) 编码后的 BER。可以看到,在低误码概率下,编码有效降低了 BER;当信道误码概率较小时($\leq 0.03$),单比特纠错能力足以纠正大部分错误,编码增益显著。当信道误码概率过高时($> 0.03$),多个比特同时错误的概率增加,超出 Hamming(7,4) 的单比特纠错能力,编码增益下降。

### 5.1 附:卷积码 BER 对比

![卷积码BER曲线](results/coding_ber_curve_conv.png)

**说明**:在 Hamming(7,4) 基础上增加卷积码 (2,1,3) + Viterbi 硬判决译码的 BER 曲线(绿色)。无误传输下译码 BER = 0(验证了编码-译码的正确性)。在低误码概率下卷积码的纠错能力接近 Hamming(7,4);卷积码码率 $R=1/2$ 虽然更低,但约束长度仅 $K=3$ 限制了编码增益,增大约束长度和采用软判决可进一步提升性能。

### 5.2 Part 2:均衡波形对比

![均衡眼图对比](results/equalization_eye_comparison.png)

**说明**:图中展示了前 120 个符号的波形。蓝色为原始发送的 BPSK 符号($\pm 1$),橙色为经多径信道后的接收信号(ISI 导致幅度弥散),绿色为 LMS 均衡后的输出。可以观察到,均衡后信号幅度明显向 $\pm 1$ 靠拢,ISI 得到有效抑制,为正确的 BPSK 硬判决创造了条件。

### 5.3 LMS 误差收敛曲线

![LMS误差曲线](results/equalization_mse_curve.png)

**说明**:图中横轴为 LMS 迭代次数,纵轴为瞬时平方误差(对数坐标)。MSE 从较高水平开始(均衡器未训练),经过约 200 次迭代后快速下降,随后趋于稳态(接近噪声基底)。曲线表明 $\mu=0.01$ 的步长设置使算法在收敛速度和稳态误差之间取得了较好的平衡。

## 6. 结果分析与讨论

### 6.1 Hamming(7,4) 为什么能纠正单比特错误?

Hamming(7,4) 的最小汉明距离 $d_{min}=3$,意味着任意两个合法码字之间至少有 3 个位置不同。当发生单比特错误时,接收码字与原始码字的距离为 1,与其他任意合法码字的距离至少为 2。因此,将接收码字译码为与之距离最近的合法码字,即可纠正该单比特错误。伴随式机制提供了一种高效的实现方式:伴随式 $\mathbf{s} = \mathbf{e} \cdot H^T$ 仅取决于错误图样,且 3 位伴随式可表示 $2^3-1=7$ 种单比特错误位置(全零表示无错),实现了单比特错误的无歧义定位。

### 6.2 为什么信道编码会引入冗余并降低码率?

信道编码通过在信息比特之外增加校验比特,引入受控冗余来换取纠错能力。Hamming(7,4) 将 4 个信息位扩展为 7 个编码位,码率 $R = 4/7 \approx 57\%$。这 3 个校验位是信息位的线性组合,用于接收端检错和纠错。冗余本质上是以带宽或数据速率为代价,换取功率效率(更低的 BER 或更低的所需 SNR)。

### 6.3 ZF 均衡为什么可能放大噪声?

ZF 均衡的目标是使信道与均衡器的级联为理想冲激响应,即 $H(z) \cdot W(z) = 1$。从频域看,$W(f) = 1 / H(f)$。当信道在某些频率上存在深衰落($|H(f)|$ 很小)时,$|W(f)|$ 会很大,导致这些频率处的噪声被显著放大。这就是 ZF 均衡器的噪声增强效应。相比之下,LMS/MMSE 均衡器在消除 ISI 和抑制噪声之间进行折中,通常能获得更好的性能。

### 6.4 LMS 的步长过大或过小会出现什么问题?

- **步长过大**:算法收敛速度快,但稳态误差大,抽头系数在最优值附近剧烈波动,甚至可能导致算法发散(不收敛)。
- **步长过小**:稳态误差小,抽头系数接近最优解(Wiener 解),但收敛速度慢,需要更长的训练序列才能达到稳定。

实际应用中,步长的选取需要在收敛速度和稳态精度之间权衡。一个常见的经验规则是:$\mu < 1 / \lambda_{max}$,其中 $\lambda_{max}$ 是输入自相关矩阵的最大特征值。

### 6.5 均衡前后 ISI 有什么变化?

均衡前,由于多径信道的时延扩展,BPSK 符号 $\pm 1$ 在接收端呈现为幅度在较大范围内弥散分布,±1 的判决边界模糊,导致硬判决后 BER 较高。从波形对比图可以清晰看到,均衡后信号幅度显著向 $\pm 1$ 聚集,ISI 得到有效抑制。定量地,本实验中均衡前 BER 显著高于均衡后 LMS 输出的 BER,验证了均衡器的有效性。

## 7. 实验心得

通过本次实验,我对以下概念有了更深入的理解:

1. **信道编码**:Hamming(7,4) 虽然结构简单,但完整展示了线性分组码的编码、伴随式译码和纠错的完整流程。编码增益的直观感受——用 75% 的带宽开销换取显著的 BER 改善——体现了信息论中可靠性与有效性的基本权衡。

2. **卷积码与 Viterbi 译码**:与分组码不同,卷积码引入了记忆(移位寄存器),将编码从无记忆映射扩展到有限状态机。Viterbi 译码的网格图搜索是动态规划在通信中的经典应用——每步保留 4 条幸存路径,避免了指数量级的全搜索。汉明距离作为硬判决度量简化了实现,但软判决(欧氏距离)可获得额外编码增益。

3. **信道均衡**:ZF 和 LMS 代表了确定性(基于信道估计)和自适应(基于梯度下降)两种均衡思路。LMS 的简洁性和鲁棒性使其在实践中广泛应用,但对步长选择的敏感性也提醒了算法调参的重要性。

4. **自动评分与 AI 编程辅助**:GitHub Classroom 的自动化测试为代码质量提供了即时反馈。AI 助手在理解算法原理、实现代码、调试错误和撰写报告等方面提供了高效支持,但需要使用者对 AI 的输出保持批判性审视,确保对底层原理有真正的理解。

## 8. AI 助手使用情况说明

本实验使用 Claude Code(基于 Claude 4.X 模型)作为 AI 编程助手,具体使用情况如下:

| 使用环节 | 具体用途 | AI 贡献度 |
|---------|---------|----------|
| 代码编写 | 完成 `hamming74_encode`、`hamming74_syndrome`、`hamming74_decode`、`estimate_zf_equalizer`、`apply_fir_filter`、`lms_equalizer` 等核心函数 | 约 90% |
| 选做实现 | 完成 `convolutional_encode`((2,1,3) 卷积码)和 `viterbi_decode_hard`(硬判决 Viterbi 译码) | 约 95% |
| 调试纠错 | 定位数组维度不匹配、GF(2) 运算错误、LMS 迭代索引偏移、pylint 评分优化等问题 | 约 85% |
| 报告撰写 | 辅助撰写实验报告(原理阐述、结果分析、讨论问题回答) | 约 80% |
| 测试验证 | 协助运行 pytest 测试套件,根据 GitHub Classroom 评分反馈修改代码,最终取得 100/100 | 约 70% |

**使用体会**:AI 助手显著提高了编码和调试效率,尤其在矩阵运算细节、算法参数调优方面表现出色。但 AI 生成的代码和解释并非总是正确,需要结合课程知识进行验证和修正。建议在使用 AI 辅助的同时,务必独立理解每个算法步骤的物理意义和数学推导。

## 9. 参考资料

- 课程课件:第 6 章 信道编码
- 课程课件:第 7 章 均衡
- S. Lin and D. J. Costello, *Error Control Coding*, 2nd ed. Pearson, 2004.
- S. Haykin, *Adaptive Filter Theory*, 5th ed. Pearson, 2014.
- J. G. Proakis and M. Salehi, *Digital Communications*, 5th ed. McGraw-Hill, 2008.
Loading
Loading