首页 › programming › 错误自己报坐标:汉明码神课深读

错误自己报坐标:汉明码神课深读

为什么值得你花16分钟

先说一个反直觉的事实:此刻你手机和基站之间的无线信号,正被墙壁、人体、雨滴和彼此干扰打得千疮百孔,可你刷视频几乎不卡。靠的不是信号有多干净,而是纠错码——人类发明的、让数据在充满噪声的信道里自我修复的数学。

而这个支撑数字文明的地基技术,绝大多数程序员说不出原理,多数通信从业者也只是背过"LDPC性能好"几个字。3Blue1Brown(Grant Sanderson)这条约16分钟的视频《Hamming codes and error correction》,是我见过把纠错码讲得最优雅的一次:不用一行公式推导轰炸,而是用几何直觉告诉你——纠错的本质,是把合法消息在空间里彼此"撑开",让任何一次错误都无处可藏。

对通信人来说,这条视频是理解5G信道编码(LDPC、Polar)的最佳入口;对程序员来说,它回答了一个每天都发生但你从未深究的问题:内存位翻转、网络丢包、闪存老化,数据凭什么没坏?本文先拆解视频核心内容,再延伸到现代纠错码在5G里的落地,最后给出可操作的实战启示。

说明:本文写作时未能实时核验视频页面数据,播放量等信息为量级估计,请以视频主页为准。

视频背景卡片

项目 内容
视频标题 Hamming codes and error correction
频道 3Blue1Brown(Grant Sanderson,数学可视化频道头部频道)
时长 约16分钟
发布时间 2020年7月
播放量 数百万量级(未经实时核验)
核心主题 汉明码的构造、几何直觉与现代纠错码的源头

核心内容拆解

1. 噪声是数字世界的常态,不是意外

视频开篇把问题立住了:任何信息传输都发生在有噪声的信道里。比特0变成1、1变成0,这不是倒霉事,而是物理世界的默认设定——电压抖动、无线干扰、宇宙射线打中内存,都是日常。(视频内容)

我补一个程序员更有感的例子:2009年Google和罗切斯特大学发表的大规模内存实测研究《DRAM Errors in the Wild》,对数万台机器跑了两年多,结论是内存位翻转根本不是小概率事件,数据中心里可纠正错误是家常便饭。(补充背景)这也是为什么服务器内存几乎都是带ECC的——这件事后面还会说到。视频的高明之处在于,它不渲染焦虑,而是立刻把问题变成一个数学问题:有没有办法,让接收方不需要重传,自己把错修好?

2. 两个笨办法:三倍重复和奇偶校验

视频先展示了两个最直觉的方案,并精准地指出各自的死穴。(视频内容)

方案一:重复码。 想传一个0,就发000;接收方收到001、010之类的,按少数服从多数投票,还是0。它能纠正1位错误,但代价是带宽只剩三分之一——为了传1比特,你要付3比特的运费。直觉对,但太奢侈。

方案二:奇偶校验位。 在数据后面加一位,让整串数据里1的个数凑成偶数。接收时数一遍,奇数就说明出了错。代价极小(只加1位),但致命缺陷是:只能知道"错了",不能知道"错在哪",而且偶数个位同时翻转它根本发现不了。发现错误和纠正错误之间,隔着一道鸿沟——你得知道错误的位置,才能翻转它。

这两个方案的对照,其实是后面所有内容的引子:好的编码,要在"冗余的代价"和"纠错的能力"之间找到远比它们聪明的平衡点。

3. 汉明的抱怨:一次不该浪费的周末

Richard Hamming在1950年发表《Error Detecting and Error Correcting Codes》时,是贝尔实验室的数学家。(补充背景)他当时用公司的继电器计算机跑批量任务,周五把一叠打孔卡丢进去,周一回来经常发现:机器半夜遇到一个"小错误"就停机跳过,整批作废。Hamming受够了——机器明明手里就有出错前后的数据,为什么不能自己把那一位改回来?

这段背景故事我在这里多说一句(视频里对人物着墨不多):正是这种工程师式的愤怒,催生了信息论之后最重要的应用数学分支之一。Hamming在贝尔实验室的办公室隔壁,就是后来写出《通信的数学理论》、奠定信息论基础的Claude Shannon。Shannon在1948年证明了"逼近信道容量的好码存在",但没有给出实用构造;Hamming给出了第一个。一个负责"存在性",一个负责"怎么造",这一对组合开启了此后七十多年的编码时代。(补充背景)

4. 交叉校验的魔法:7位里的4+3

这是视频最精彩的部分。汉明码的核心思路:让校验位彼此重叠覆盖数据位,每个数据位被多个校验组看管。(视频内容)

具体做法:把7个位置编号1到7,把校验位放在1、2、4这几个2的幂次位置上,数据位放在3、5、6、7。然后按编号的二进制分组——所有编号里最低位是1的位置(1、3、5、7)归第一组,第二位是1的(2、3、6、7)归第二组,第三位是1的(4、5、6、7)归第三组。每组配一个奇偶校验位,让组内1的个数为偶。

接收后的解码过程漂亮得像魔术:三组校验各查一遍,把"过/不过"记下来,就得到一个3位的二进制数——如果全过,是000,没错;如果第1、3组挂了第2组没事,就是101,也就是十进制的5——出错的就是第5位,把它翻转,数据完好恢复。校验结果本身,就是错误位置的坐标。 4个数据位只花了3个校验位(码率4/7,约57%,对比重复码的33%),换来任意单比特错误的完全免疫。

5. 几何的眼光:把消息"撑开"

如果说上一条是"术",视频给出的几何视角就是"道"。(视频内容)

把每个7位串看成高维空间里的一个点,合法码字只有16个。关键在于这16个点彼此离得足够远:任意两个合法码字之间至少差3位(这就是汉明距离 d=3)。任何单比特错误,都只会把一个码字挪动1步——它仍然离原来的码字最近,离其他15个都很远。解码就是"找最近的合法码字",错误自然被拉回原位。

这个视角还顺手给出了通用规律:最小距离d的码,能纠正t个错误当且仅当 d ≥ 2t+1。想纠1位错,距离至少3;想纠2位,至少5。

更妙的是汉明码的"完美"性质:以每个码字为中心、半径为1的"球"各覆盖1+7=8个点,16个球正好铺满整个128点的空间,一个不漏。没有任何一个接收串是无家可归的——这就是"完美码"(perfect code)的含义,数学上严丝合缝到令人起鸡皮疙瘩。

6. 从7位到72位:你服务器里正在跑的汉明码

视频在结尾把镜头拉回现实:这套思想今天就在你的电脑里。(视频内容+延伸分析)

内存里的汉明码用的是扩展版:在7位汉明码之外再加一个覆盖全部位的整体校验位,最小距离升到4,实现SECDED——纠正单比特错、检测双比特错。服务器ECC内存条的典型设计是64位数据配8位校验(共72位),多出来的8位,正是7位汉明校验加1位整体奇偶。你的每一次内存读写,背后都是一次 syndrome 运算。

同样的思想随处可见:二维码用里德-所罗门码(Reed-Solomon,汉明码的远亲),遮挡约三成也能扫出来;RAID 5用异或校验扛住一块硬盘报废;旅行者号探测器从两百多亿公里外发回的照片,靠级联纠错码在功率只剩微瓦级信号的信道里保持完整。(延伸分析)可以说,你接触的每一条数字链路里,都住着汉明码的DNA。

7. 延伸:从汉明码到5G的LDPC与Polar

这一节是我的延伸分析,也是写给51学通信读者的话:汉明码是理解现代信道编码的"直线距离起点"。(延伸分析)

现代编码的血统图谱是这样的:2G用卷积码,3G/4G用Turbo码(1993年发明,首次实测逼近Shannon极限),而5G NR做了一个历史性 split——数据信道(PDSCH/PUSCH)用LDPC码,控制信道(PDCCH/PBCH/PUCCH)用Polar码。这是2016年3GPP编码标准之争的结局:LDPC(Gallager在1960年代初的博士论文提出,被冷落三十年后在90年代重新发现,如今Wi-Fi、DVB-S2、SSD全在用)拿下数据信道;Polar码(Arıkan 2009年提出,史上第一个被严格证明能达到信道容量的构造性编码)拿下控制信道。

它们和汉明码的内在联系一脉相承:都是线性码,都靠奇偶校验矩阵定义"合法子空间",都靠校验结果定位错误。区别在量级和玩法——LDPC的校验矩阵极度稀疏(长动辄上万位),解码不再是一次性的 syndrome 查表,而是把每个比特是0是1当作概率,在校验节点和变量节点之间迭代"投票",几十轮迭代后收敛。你可以粗暴地记成:汉明码是把错误算出来,LDPC是把错误"投"出来。 而5G数据信道上真正跑的,是LDPC加上HARQ的混合体:每个码块带CRC检错,错了先靠FEC硬纠,纠不动再触发重传合并——检错、纠错、重传三层机制,全都在汉明1950年那个周末埋下的延长线上。

知识结构图

flowchart TD
    A["噪声信道:比特会翻转"] --> B["思路一:重复三遍"]
    A --> C["思路二:奇偶校验位"]
    B --> D["能纠错<br/>带宽贵三倍"]
    C --> E["能发现出错<br/>不知道错在哪"]
    A --> F["汉明的答案<br/>交叉分组校验"]
    F --> G["汉明7-4码<br/>4数据位加3校验位"]
    F --> H["汉明距离<br/>合法消息彼此撑开"]
    G --> I["Syndrome<br/>坏掉的校验组报坐标"]
    H --> I
    I --> J["翻转那一位<br/>数据恢复"]
    J --> K["延伸:现代纠错码"]
    K --> L["ECC内存<br/>64加8位SECDED"]
    K --> M["二维码与RAID<br/>遮一半也能扫"]
    K --> N["5G信道编码<br/>LDPC与Polar"]

单次解码的完整流程:

flowchart TD
    S["收到7位"] --> T["重算三组奇偶校验"]
    T --> U{"三组校验都过吗"}
    U -->|全过| V["无错<br/>取出4位数据"]
    U -->|有不过| W["Syndrome二进制值<br/>读出错误位置编号"]
    W --> X["翻转该位"]
    X --> V

实战启示

给开发者:先分清"检错重传"和"自动纠错"该用哪个。 重传便宜、信道还好时,用CRC检错加重传就够了——TCP就是这么干的;但存储介质(错了没法"重传",只能纠)、实时音视频(来不及重传)、深空链路(一个来回几十分钟)这三类场景,必须上FEC前向纠错。WebRTC之所以要在RTP层做FEC冗余包,就是不赌TCP重传。选型的判断标准就一条:重传的代价和纠错的冗余,哪个更贵。

给做系统的人:冗余要能回答"错在哪",而不是只回答"错没错"。 汉明码最值得偷走的设计哲学是"校验结果的组合本身就是坐标"。做分布式存储、日志系统、协议设计时,与其只记一个总校验和,不如让冗余信息结构化、可定位——出故障时能一步定位到坏的分片,比多记十份备份更能救命。

给所有跑生产环境的人:服务器内存上ECC,别省这个钱。 前面Google那项研究说明了位翻转的真实规模。ECC内存贵不了几个点,换的是SECDED级的单比特免疫——这是七十多年前一个数学家被周末加班逼出来的技术,今天依然在替你的数据库兜底。

给通信同行:把汉明码当作讲解调和解码的教具。 给新人讲LDPC之前先讲一遍汉明码,校验分组、syndrome、最小距离三个概念一次性打通,后面讲置信传播、打孔、码率匹配会顺畅得多。

延伸学习路径

  1. 《Hamming codes pt. 2》(3Blue1Brown)— 同系列续篇,用像素翻转的棋盘视角重新构造汉明码,并讲清它和计算机存储的直接关系,和本篇主视频配套食用。
  2. R. W. Hamming, "Error Detecting and Error Correcting Codes", Bell System Technical Journal, 1950 — 原始论文,行文意外地清晰,公开可检索。
  3. David MacKay, "Information Theory, Inference, and Learning Algorithms" — 剑桥大学出版社,作者官网提供免费电子版;讲LDPC和置信传播最好的教材,前几章就能衔接本视频。
  4. E. Arıkan, "Channel Polarization: A Method for Constructing Capacity-Achieving Codes", IEEE Transactions on Information Theory, 2009 — 5G控制信道Polar码的理论源头。
  5. C. E. Shannon, "A Mathematical Theory of Communication", 1948 — 一切的起点,Hamming码正是对Shannon存在性证明的第一个实用回答。

一句话总结

汉明码最大的价值,是用16分钟让你看到纠错的本质——冗余不是浪费,而是让每一个错误都自带坐标;从你服务器的内存条到5G基站的LDPC,七十多年来所有纠错码都走在这条延长线上。

参考来源

  1. Hamming codes and error correction — 本文分析的核心视频(3Blue1Brown)
  2. 3Blue1Brown 频道主页 — 同系列《Hamming codes pt. 2》可在频道内检索到
  3. R. W. Hamming, "Error Detecting and Error Correcting Codes", Bell System Technical Journal, 1950 — 汉明码原始论文
  4. B. Schroeder et al., "DRAM Errors in the Wild: A Large-Scale Field Study", SIGMETRICS 2009 — 内存错误大规模实测研究
  5. E. Arıkan, "Channel Polarization", IEEE Transactions on Information Theory, 2009 — Polar码原始论文

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入