信道编码:冗余怎样换可靠性
WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
香农 说:码率
时存在编码使误差随码长趋于 。本章用最短的非平凡纠错码 Hamming(7,4) 看这句话的「怎么做」:4 个数据比特加 3 个校验,能纠正 1 个翻转。BSC 交叉概率 小时,译码后的误比特率明显低于不编码的 4 比特。高斯噪声见 AWGN。
正文先讲码率与球;需要把校验子或最小距离展开时,点开「逐步推导」。
一、码率与球
7 位码字、16 个合法中心(
保姆级:冗余不是浪费,是保险。 不编码时每个数据比特直接过 BSC,错了就是错了。Hamming 多送 3 个校验,换来「7 位里坏 1 位仍能找回 4 个数据」。保险费是码率从

图解说明:左是 4 比特加 3 校验;中是半径 1 的球;右是未编码 vs Hamming 的误比特示意。校验子(syndrome)指出哪一位翻转。
逐步推导:最小距离 为什么能纠 错(点击展开)
汉明距离
纠
Hamming(7,4) 的
与容量比:BSC
二、位置 1,2,4 放校验
1-index 位置:校验在
逐步推导:校验子怎样指出翻转位(与 encode74 / decode74 一致)(点击展开)
把 7 个位置写成 1-index。校验位
这正是 demo 里
c[0] = c[2] ^ c[4] ^ c[6]
c[1] = c[2] ^ c[5] ^ c[6]
c[3] = c[4] ^ c[5] ^ c[6]译码:用收到的 7 位重算三个校验,得到校验子
r[pos-1] ^= 1)。最后取出数据位 r[[2,4,5,6]]。
为什么 pos 等于翻转位置:每个数据/校验位的编号,其二进制 1 恰好标出它参与了哪些校验。一位翻转会让「它参与的那些校验」全部跳变,校验子的二进制就是该编号。两位同时翻,校验子变成两个编号的异或,不再指向真实位置——所以只能保证纠 1。
三、代码在做什么
demo.py 在一串
扫描点:42。终端会打印每个

终端打印
四、小结
| 概念 | 一句话 |
|---|---|
| 码率 | 数据位 / 发送位 |
| Hamming(7,4) | 纠 1 错,检 2 错(本章只用纠 1) |
| 校验子 | 三个校验合成错误位置 |
| 可靠通信的前提,短码只是例子 | |
| 下游 | 高斯信道 |
下一章 高斯信道。
📥 Code
| File | View | Download |
|---|---|---|
| demo.py | Open | Download |
| exercise.py | Open | Download |
参考
- MacKay, ITILA(Hamming 码)
- Cover & Thomas, 信道编码定理