卷 IV · 通CH 16深度 16/24

1948 年最反直觉的那句话

上一章那条「可靠与速度的零和交易线」,是当时整个通信工程的常识。香农用一篇论文说:它不存在。而他证明这件事的方式,比结论本身还奇怪。

香农第二定理悬崖,不是斜坡存在性证明

▷ 先猜一下

翻位率 10% 的信道,容量 0.531。如果你的码率是 0.52(略低于容量),最好能做到多低的错误率?

A 大约 1e-2B 大约 1e-6C 任意小,你说多小就多小D 至少还有百分之几,降不下去

那句话

◆ 香农第二定理(有噪信道编码定理,1948)

设信道容量为 C。那么:

正定理:对任意码率 R < C 和任意小的 ε > 0,都存在一个码,使得译码错误概率小于 ε

逆定理:如果 R > C,错误概率有一个不为零的下界,无论怎么编码都突破不了。

请注意正定理里没有的东西:它没有说「码率越低越可靠」。

它说的是:只要你在容量线以下,无论离得多近,错误率都可以压到任意小。不是 1e-6,不是 1e-100,是任意小

# 1948 年之前大家以为的形状(斜坡):
错误率
  │╲
  │ ╲___
  │     ╲____
  └──────────── 码率
   要低错误率 → 必须低码率

# 香农证明的形状(悬崖):
错误率
  │            ┃
  │            ┃
  │____________┃
  └────────────┸─── 码率
   0        C  ↑
   在 C 左边:想多小就多小
   在 C 右边:一堵墙

他怎么证明的:一个很奇怪的招

香农的证明思路,在当时看来近乎耍赖:

◆ 随机编码论证

不去设计任何一个具体的码。而是:

  1. 考虑「把每个消息随机映射到一个随机的长比特串」这种码。
  2. 所有这类随机码的平均错误率。
  3. 证明这个平均值随码长增加趋于 0(只要 R < C)。
  4. 既然平均值很小,那至少存在一个码比平均值还好。

证毕。

你注意到问题了吗:这个证明没有给出任何一个具体的码。它只证明了「好码存在」,而且证明方式是「随便抓一个大概率就是好的」。

这在数学上完全成立(这类论证后来被称为「概率方法」,Erdős 把它发展成了组合数学的一大工具)。但对当时的工程师来说,这个结论几乎是嘲弄:

「我们已经证明,存在一种编码能让你在这条线上跑得快 18 倍且几乎不出错。至于它长什么样,请自行寻找。另外,随机抓一个大概率就行——只是解码需要遍历 2^(nR) 个码字,n 大一点你就跑不动了。」

为什么随机码好用:又是典型集

∑ 直觉:在高维空间里,随机点都离得很远

把一个长度 n 的码字看成 n 维空间里的一个点。噪声会把它推开大约 n·p 位(因为每位有 p 的概率翻)。

所以每个码字周围有一个「噪声球」,半径约 n·p只要不同码字的噪声球不重叠,收方就能唯一地判出发的是哪个。

现在数一下能塞下多少个不重叠的球:

整个空间的点数:       2ⁿ
每个噪声球里的点数:   约 2^(n·H(p))

能塞下的球数 ≤ 2ⁿ / 2^(n·H(p)) = 2^(n·(1−H(p))) = 2^(n·C)

# 于是最多能区分 2^(nC) 条消息,码率最多 C。
# 这正是逆定理。

而正定理说的是这个上界能达到:在高维空间里随机撒 2^(nR) 个点(R < C),它们的噪声球几乎必然不重叠——因为高维空间大得离谱,随机点之间平均距离极远。

「维度越高,随机点越分散」这个高维几何现象,是整个现代编码理论的物理基础。它也解释了为什么好的码必须:n 越大,「几乎必然」越接近「必然」。

接下来的四十五年

香农画了一条线,然后整个领域花了四十五年才追上它。

年份离容量还差它解决了什么
1950汉明码很远第一个能纠错的码,简单优雅
1954Reed–Muller可以纠多个错
1960Reed–Solomon中等突发错误,至今活在 CD / 二维码 / RAID 里
1962LDPC(Gallager)很接近但当时算力跑不动,被遗忘了三十年
1993Turbo 码0.5 dB 以内两个简单码 + 迭代互相「传消息」
1996LDPC 被重新发现0.04 dB 以内MacKay 等人翻出 Gallager 的老论文
2008Polar 码(Arıkan)可证明达到容量第一个有数学证明能达到容量的实用码
▸ 在现实里:那条线现在被踩在脚下
  • 5G。数据信道用 LDPC,控制信道用 Polar 码。你的手机每一次连接基站,都在跑 2008 年那篇论文。
  • WiFi 6/7、DVB-S2 卫星电视、10G 以太网:LDPC。
  • SSD 主控:LDPC。闪存单元本身的原始错误率高得惊人(尤其是 QLC 和写了很多次之后),你的 SSD 之所以看起来「不出错」,全靠底下这层码在拼命。
  • 深空通信:旅行者号用的是卷积码 + Reed–Solomon 级联;现代深空任务用 Turbo 和 LDPC。从冥王星传回一张照片,靠的就是这条线。
  • 二维码:Reed–Solomon。最高纠错等级下,盖住约 30% 仍能扫出来——这就是为什么二维码中间可以放 logo。

1962 年那一行值得单独说一句。Gallager 在博士论文里发明了 LDPC,它离容量非常近,但当时的计算机跑不动它的迭代译码。于是这个成果被埋了三十多年。1996 年被重新发现之后,它迅速成为几乎所有现代通信标准的核心。

一个理论上正确但算力不够的想法,会被埋起来,直到算力追上。这件事在计算机领域反复上演——神经网络自己就经历过两次。

回头看汉明码:它站错了边

把 demo 里的 p 拖到 0.1,注意那三个点:

p = 0.1 时:
   香农容量        C = 0.531
   汉明 (7,4) 码率 R = 0.571      ← 【在容量之上】
   重复 3 次码率   R = 0.333      ← 在容量之下,但错误率只到 2.8%

# 汉明码率超过容量,所以【无论怎么用它都不可能可靠】。
# 它的块错误率是 15.0%,而且没救。

# 那么汉明码什么时候才在容量之内?
   解 1 − H(p) = 4/7  →  p ≈ 【0.0876】

# 也就是说:翻位率低于 8.76% 时,0.571 这个码率才进入合法区间。
◆ 「在容量之内」和「这个码好」是两回事

容量是一条存在性的线:码率在线以下,说明「存在」好码;不代表你手上这个码就好。

  • 码率 > 容量:这个码注定不可靠,不用试了。
  • 码率 < 容量:存在能做到任意可靠的码。你手上这个可能做不到(比如重复 3 次码,码率 0.333 在线内,但错误率卡在 2.8%)。

所以容量给的是一张「值不值得继续找」的地图。它不告诉你路怎么走,它告诉你哪片地方根本没路。这类结论在工程上极其有用——知道「不可能」能省下的时间,往往比知道「怎么做」更多。

✗ 这个直觉是错的
「香农极限是通信速度的上限。」 香农极限是可靠通信速度的上限。你完全可以超过它发数据——只是收方收到的会有一部分是错的,而且错误率有下界。

这个区别在实践中很重要。很多系统故意跑在容量之上,因为它们能容忍错误:

  • 视频流:丢几帧比卡住好。
  • 实时语音:偶尔一点杂音比延迟好。
  • 某些传感器网络:数据本身有冗余,丢一点无所谓。

「可靠」不是一个绝对的要求,是一个可以定价的要求——而香农给了这个价格。把「多可靠」当成一个可调参数而不是一个二元开关,是这套理论最实用的一个思维转变。

◇ 结账
C:任意小,你说多小就多小

只要码率严格低于容量(0.52 < 0.531),错误率就没有下界——代价只是码块要够长。想要 1e-100?把码块加长就行,码率不用降

如果你选了 A、B 或 D,你的直觉还停在上一章那条斜坡上。而这正是 1948 年整个通信工程界的直觉。被推翻的不是一个数字,是一整个「什么和什么之间必须权衡」的世界观。

这是这本书里最值得记住的一个结构:当你以为面前是一条连续的权衡曲线时,先确认它不是一道悬崖。悬崖意味着在某一侧你可以随便走,而不用付你以为要付的代价。

这一章的一句话

可靠和速度不是零和交易,是一道悬崖:容量以下,错误率想多小就多小;容量以上,一堵谁也过不去的墙。而香农证明了好码存在,却没告诉任何人它长什么样——那件事又花了四十五年。

下一章造一台真的。汉明码:三个校验位问三个问题,三个答案拼成的二进制数,就是出错的位置。它不够接近容量,但它是人类造出的第一个能纠错的码,而且它的构造漂亮到你会想拿去给别人讲。我们会把 16 × 7 = 112 种单错全部试一遍,一个不漏地纠回来。