你掏出身份证,末尾那个神秘的"X"曾让无数人困惑。它不是什么幸运数字,而是前17位数字经过一套固定算法算出来的校验码——任何一个数字被抄错、读错,校验位就会“报警”。这是绝大多数人一生中离“差错检测”最近的一次接触。
通信工程师每天都在和这件事打交道,只是规模大得多:你的手机与基站之间,每秒传输着上百万个比特,穿过充满噪声的空气,随时可能有个"1"被颠成"0"。一段视频少一个比特,画面可能花掉一块;一条信令错一个比特,整次通话可能夭折。5G是怎么保证比特在噪声里几乎不出错的?答案藏在两套精妙的数学装置里——LDPC码和Polar码。它们一个沉睡了33年才被唤醒,一个让研究者苦等了60年才等到。这篇文章把它们的原理讲透。
所有故事都从1948年香农的那篇论文开始。香农证明了一件起初令人绝望的事:任何有噪声的信道,都存在一个传输速率的上限——信道容量。对带宽为 B、信噪比为 S/N 的信道:
$$C = B \log_2\left(1 + \frac{S}{N}\right)$$
这个公式有两层含义,方向完全相反:
第二层含义在当时简直是悖论:噪声明明在往信号里掺错,怎么可能“编码一下”就几乎不出错?香农的回答是随机的:他证明了这样的码存在,但他的证明是非构造性的——就像知道山里有矿,却不给地图。
于是整个编码学界接下了一个持续半个多世纪的任务:把这面墙上的矿挖出来。评价一个码好不好,就看两把尺子:它的性能离香农极限差多少;以及它的译码运算量,现实芯片算不算得动。
在讲两大码之前,先建立最朴素的图景。纠错的本质是一笔交易:你交出一部分传输效率,买回可靠性。
具体做法:原始信息有 k 个比特,编码器在后面掺入一些“多余”的比特,凑成 n 个比特一起发送(n > k)。定义码率:
$$R = \frac{k}{n}$$
码率越低,冗余越多,抗错能力越强,但有效吞吐越低。接收到这 n 个比特后,译码器利用其中合法的结构关系(哪些组合是“允许出现的”),把错误定位并纠正。
身份证的校验位就是最简版本:17位信息 + 1位校验,它能发现错误,却不能纠正——因为它只知道“出错了”,不知道“错在哪”。想要纠正,码的结构必须告诉你错误的位置。LDPC 和 Polar 走的是两条完全不同的路,但目标一致:逼近香农极限。
LDPC(低密度奇偶校验码)由 MIT 的罗伯特·加拉格(Robert Gallager)在1963年的博士论文中提出。他的想法在当年看来有些“暴力”:把校验矩阵做得非常非常大,但里面几乎全是0——这就是“低密度”三个字的由来。
问题是,这样一个大矩阵对应的译码计算量,1960年代的计算机根本算不动。论文发表后被冷落,几乎无人问津。直到1993年 Turbo 码横空出世、展示了“迭代译码”的威力之后,MacKay 和 Neal 在1996年重新发现了加拉格的旧论文,才发现这座被遗忘的矿藏性能惊人。此后十几年,LDPC 一路横扫:Wi-Fi(从802.11n起的多个标准)、卫星广播 DVB-S2、万兆以太网,最终成为 5G 数据信道的官方编码。4G 时代这一席位属于 Turbo 码,而到了 5G,LDPC 全面接棒。
一个 LDPC 码由校验矩阵 H 定义。合法的码字 x 必须满足:
$$H x^T = 0$$
也就是所有校验方程都成立。关键在于“低密度”:矩阵里1的数量占比极小,每一行只“管着”少数几个比特,每一列也只被少数几个方程“管着”。
举个玩具例子。6个比特,3个校验方程:
(⊕ 是模2加法,即异或。)每个比特只出现在1~2个方程里——这就是稀疏。把方程和比特画成一张图,就是著名的 Tanner 图:一边是变量节点(比特),一边是校验节点(方程),连线表示“这个方程管这个比特”。
flowchart TD
subgraph SV["变量节点:每一个比特"]
V1["比特1"]
V2["比特2"]
V3["比特3"]
V4["比特4"]
V5["比特5"]
V6["比特6"]
end
subgraph SC["校验节点:每一个方程"]
C1["方程A"]
C2["方程B"]
C3["方程C"]
end
V1 --- C1
V2 --- C1
V3 --- C1
V3 --- C2
V4 --- C2
V5 --- C2
V4 --- C3
V6 --- C3
真实的 5G LDPC 码,一个码块动辄几千个比特,但每个节点只有几个邻居——图很大,却很稀疏。
稀疏图的价值在译码时爆发。LDPC 的译码算法叫置信传播(也称消息传递、和积算法),它的工作方式像一个委员会:
每一轮,所有节点交换两轮意见——
然后进入下一轮。每一轮,正确的比特会获得越来越多的“盟友证据”,而被噪声翻转的比特则被邻居们反复“纠偏”。通常迭代几轮到几十轮,所有比特同时趋于稳定,校验方程全部通过,译码成功。
flowchart TD
A["接收端拿到每个比特的软信息"] --> B["初始化:比特相信自己的第一感觉"]
B --> C["校验节点更新:用方程约束互推意见"]
C --> D["变量节点更新:汇总各方反馈修正置信度"]
D --> E["试探判决:每个比特给出当前猜测"]
E --> F{"校验方程是否全部通过"}
F -->|"是"| G["译码成功,输出结果"]
F -->|"否"| H{"是否达到最大迭代次数"}
H -->|"否"| C
H -->|"是"| I["宣布译码失败,交给重传机制"]
一个直观的类比:传话游戏之所以越传越错,是因为信息只单向流动、没有交叉验证。LDPC 恰好反其道而行——每个比特的猜测都要经过多个独立的方程交叉盘问,一轮盘问一次修正,几轮下来,孤立的错误无处遁形。
这里藏着 LDPC 最深刻的设计智慧。如果校验矩阵是稠密的(每个方程管一大堆比特),会出现两个致命问题:
稀疏性一刀解决两个问题:每比特计算量只与邻居数有关(线性复杂度),而且图上消息路径近似独立,各方程提供的是新鲜的、不重复的证据,信息每轮迭代都在真实增量。这正是 LDPC 能用合理算力逼近香农极限的根基。
| 概念 | 技术含义 | 直觉类比 |
|---|---|---|
| 变量节点 | 携带软信息的比特 | 正在自证清白的嫌疑人 |
| 校验节点 | 一条约束方程 | 交叉盘问的审讯官 |
| 消息传递 | 节点间交换的置信度 | 每一轮提供的证词 |
| 迭代 | 多轮更新直到稳定 | 越盘越明亮的案情 |
| 外信息 | 排除自身后邻居给出的意见 | 不许自己给自己作证 |
5G 里的 LDPC 并非学术原版,而是工程化改造过的准循环 LDPC:校验矩阵由一个小的“基图”通过循环移位复制扩展而成,硬件可以用移位寄存器高效实现,省内存也省算力。标准定义了两种基图,分别服务大码块(高码率、大流量,比如下载数据)和小码块(低码率、高可靠,比如边缘场景),工程上按场景选用,具体参数以各厂家官方文档为准。
另外两件装备是打孔与速率匹配:编码器先按低码率生成完整的冗余比特,发送时根据当前信道好坏决定发多少、丢多少——信道好就多丢冗余(等效高码率),信道差就全发。这让同一个码覆盖从极低码率到接近1的连续码率范围。再加上与增量冗余重传的配合(发送过的冗余比特下次换个花样再发,接收端合并累积证据),构成了 5G 链路自适应的底座。
如果说 LDPC 的故事是“提出太早、被时间辜负”,Polar 码则是“终于等到了那个证明”。2009年,土耳其毕尔肯大学的 Erdal Arıkan 发表论文《信道极化》,给出了编码学史上第一个被严格证明能够达到香农容量、且构造方法明确的码。从1948年香农画下天花板,到2009年第一把够得着天花板的梯子出现,中间隔了六十余年。Arıkan 也因此获得2018年的香农奖——信息论界的最高荣誉。
它的核心思想说出来朴素得惊人:单个信道不好用?那就复制一堆出来,把它们互相耦合,让好的越好、坏的越坏。
想象你手上有 N 条一模一样的“普通信道”,每条的可靠性都不高——单独用哪一条传比特,都会出不少错。Polar 码的做法是把这些信道两两配对,做一次固定的线性组合运算(一半走“直连+相加”,一半走“相减”路径),得到两条“组合信道”;然后对组合信道递归地再做同样的操作,一层套一层,共做 log₂N 层。
数学上,整个过程就是一个小矩阵的反复克罗内克积:
$$F = \begin{pmatrix} 1 & 0 \ 1 & 1 \end{pmatrix}, \qquad G_N = F^{\otimes \log_2 N}$$
魔法发生在统计特性上:当 N 足够大,这 N 条组合信道的可靠性会剧烈两极分化——一部分信道的差错率趋近于0(几乎完美,像光纤一样干净),另一部分差错率趋近于1(纯噪声,传什么都错)。而且这个分化是可以精确计算的:每条极化后信道对应一个巴氏参数,取值越接近0越可靠。
用可靠的衡量指标给 N 条信道排队,画面是这样的:
flowchart TD
subgraph IN["极化前:16条一模一样的普通信道"]
direction LR
B1["信道1 一般"]
B2["信道2 一般"]
B3["……"]
B4["信道16 一般"]
end
subgraph MID["递归合并:两两耦合再耦合"]
K1["第1层:8组两两组合"]
K2["第2层:组间再组合"]
K3["第3层:最后一层耦合"]
K1 --> K2
K2 --> K3
end
subgraph OUT["极化后:两极分化"]
direction LR
C1["好信道:差错趋近0"]
C2["坏信道:差错趋近1"]
end
IN --> MID
MID --> OUT
极化之后,用法简单粗暴:
这就是名字里"Polar"的含义:好信道上信息畅通无阻,坏信道上干脆不传任何秘密。整体效果相当于把 N 条平庸信道的容量,集中供养给 K 条优秀信道,系统总容量一点没浪费,只是重新分配了。有人心疼冻结比特“白白浪费位置”——恰恰相反,在坏信道上强行传信息,错误率接近抛硬币,传了等于没传还污染纠错;认怂不传,才是理性。
接收端知道哪些位置是冻结的,等于白送了一批“已知答案”,译码时它们是现成的锚点。
Polar 的经典译码叫串行消去(SC):比特一个个依次判决,顺序与极化结构对应。轮到某个信息比特时,它“蹭”两个便宜:前面已判决的比特当作已知条件代入,本位置的冻结比特直接按约定填答案。一个接一个,像多米诺骨牌一样环环相扣。
SC 的缺点也来自这个顺序性:前面的判决如果错了,错误会传染给后面所有依赖它的比特,而且 SC 只有单条路径,错一步就一路黑到底。工程上真正使用的是升级版——串行消去列表译码(SCL):
类比:SC 是一个人走迷宫,遇到岔路口凭感觉选一边,错了就全盘皆输。SCL 是派出 L 个分身,每个岔路口兵分两路全都走,L 个分身各自走各自的;最后谁的路径“总得分”最高(对应路径度量最优),谁胜出。
5G 还在 SCL 之外加了一道保险:给每个候选路径的信息部分附加一段 CRC 校验(一种短检错码),最终从 L 个幸存路径里用 CRC 再筛一次——哪个分身走完了迷宫还能通过对暗号,就信谁。这个"CRC辅助SCL"组合拳,让 Polar 在短码块上的实测性能离香农极限只剩不到半个分贝。
看完原理,5G 的分工安排就顺理成章了:
| 维度 | LDPC | Polar | Turbo(4G遗老) |
|---|---|---|---|
| 出身年份 | 1963提出,1996重生 | 2009 | 1993 |
| 核心机制 | 稀疏图上的置信传播 | 信道极化+冻结比特 | 递归卷积+迭代软译码 |
| 译码方法 | 消息传递迭代 | SC / SCL / CRC辅助SCL | MAP类迭代 |
| 擅长码长 | 长码块、高吞吐 | 短码块、低时延 | 中等码长 |
| 并行性 | 极好(节点独立更新) | 较差(串行依赖) | 一般 |
| 5G 岗位 | 数据共享信道 | 控制信道与广播信道 | 退出5G舞台 |
分工逻辑就两条:
第一,码长匹配。 数据业务一次传几千上万个比特,正是 LDPC 大图迭代大显身手的场景;而控制信令一次只有几十个比特,LDPC 在短码上有“启动成本”——图还没迭代起来,比特就那么几个,稀疏优势施展不开。Polar 恰好相反,短码块正是它的舒适区。
第二,时延与并行性。 数据吞吐优先,LDPC 节点互相独立、可以大规模并行,吞吐上不封顶;控制信令量小但要求极低时延和极高可靠(信令错了,后面整个流程全崩),Polar 的 CRC辅助SCL 在短块上可靠性首屈一指。各守一段,各用其长。
MCS 表的底座。 基站每几毫秒根据信道质量为用户挑一次调制与码率组合(这一机制的原理是链路自适应的话题,此处不展开)。你看到的“码率”二字,背后就是 LDPC 的速率匹配在执行:同一个码,靠打孔和重复覆盖整个码率区间。排查吞吐不达标的 CASE 时,先看当前调度的码率档位,往往比看信号强度更有信息量。
初传 BLER 目标。 现网链路自适应通常不追求一次传对,而是把初次传输的误块率目标设在百分之十左右的量级,剩下的错误交给重传兜底——这不是激进,而是精打细算:把码率压得极低来换取“次次必中”,总的吞吐反而更差。理解了“纠错码+重传”是分工关系,才能看懂这个看似危险的参数为什么人人这么配。
译码时延与迭代次数。 基带芯片的 LDPC 译码器有最大迭代次数上限,深衰落场景下迭代耗尽仍不收敛,就会触发译码失败和重传。在日志里看到“译码失败”频率升高,本质是那一轮的信道质量把该码块的置信传播推进不到全通。
一个常见误解: 纠错码不“消灭”错误,它只是把工作点从“错误频发”搬到“错误罕见”。总有一些码块撞大运译不动,系统设计必须为“译码失败”预留出口(重传、上层恢复)。以为“上了 5G 就不会错一个比特”,是理解这套机制时最常见的入门坑。
Q: LDPC 和 Turbo 码的迭代是一回事吗? A: 精神相似(都是多轮软信息交换),结构完全不同。Turbo 的迭代发生在两个卷积译码器之间互相喂软信息;LDPC 的迭代发生在稀疏图上的变量节点与校验节点之间。LDPC 的消息路径更“散”,天然适合并行硬件,这也是它在 5G 取代 Turbo 的关键原因。
Q: 冻结比特占着位置不发信息,不浪费吗? A: 不浪费,反而是整个设计的精髓。被冻结的位置对应极化后的“垃圾信道”,在上面传信息出错率接近随机——传了等于没传,还会把错误传染给译码。宁可空着,也要保证信息比特脚下的信道足够干净。
Q: HARQ 和信道编码是什么关系? A: 分工协作的两层。LDPC/Polar 是“一次传输内的自愈”:不出网、不回头,靠冗余当场纠正。HARQ 是“跨传输的兜底”:当场没纠动,反馈 Nack,重传再来一次,接收端把前后多次收到的软信息合并积累证据。现网两者总是同时开启,前者管大概率事件,后者收拾残余。
Q: 为什么不干脆用极低码率,把错误一次全纠掉? A: 码率是吞吐与可靠的天平。码率压得越低,同样时间传送的有效信息越少。链路自适应的工程答案是:选择一个“初传大概率高成功率、偶尔失败靠重传”的工作点,系统吞吐反而最优。一味求稳是另一种浪费。
Q: 极化后的信道真的会“一个天堂一个地狱”吗? A: 是渐进结论:码长趋于无穷时分化彻底。实际 5G 控制信令的码长只有几十到几百比特,分化是“部分完成”的状态——好信道没有好到零差错,坏信道也没有坏到纯噪声。所以工程上还要靠 CRC辅助SCL 和详细的可靠性排序来补足,这就是为什么理论上的容量达成,落地时仍需要一整套工程化包装。
本文由「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 等场景全覆盖。
