想象你在一个装修吵闹的咖啡馆里和朋友聊天。背景音乐、隔壁桌的谈笑声、咖啡机的噪音,都会“污染”你听到的每一个字。你有两个办法:
第二个办法,就是信道编码(Channel Coding)的本质:用可控的冗余,换取不可靠信道上的可靠传输。
无线信道是这个“嘈杂房间”的工程版:信号经过衰落、噪声、干扰到达接收端,某些比特会被“翻转”(0 变 1 或 1 变 0)。信道编码器在发送前给数据加上精心设计的冗余比特,接收端的译码器利用这些冗余,不仅能发现错误,还能纠正错误。
这个思想的理论基石是香农在 1948 年给出的第二定理。香农证明:对于一个容量为 $C$ 的信道,只要码率 $R$(信息比特数与总发送比特数之比)满足
$$R < C = B \log_2\left(1 + \frac{S}{N}\right)$$
就一定存在一种编码方式,使误码率随码长增加而任意趋近于零。注意香农只证明了“存在”,并没有给出构造方法——如何造出逼近香农极限的码,成了信息论此后五十年的核心悬念。LDPC 和 Polar 码,正是这个悬念的两次不同答案。
在深入原理之前,先用一张表建立时间轴,你会看到一个惊人的事实:5G 使用的两种码,一种诞生于 1962 年,一种诞生于 2009 年。
| 年代 | 技术 | 提出者 | 历史意义 |
|---|---|---|---|
| 1948 | 香农定理 | Claude Shannon | 证明好码存在,但没告诉人们怎么造 |
| 1950 | 汉明码 | Richard Hamming | 第一个实用纠错码,纠正单比特错误 |
| 1962 | LDPC 码 | Robert Gallager | 博士论文提出,因算力不足沉寂 35 年 |
| 1993 | Turbo 码 | Berrou 等人 | 首次逼近香农极限,惊动业界,进入 3G/4G |
| 1999 | LDPC 复兴 | MacKay & Neal | 证明 LDPC 同样能逼近极限,且并行译码更快 |
| 2009 | Polar 码 | Erdal Arıkan | 首个被数学证明可达信道容量的构造性编码 |
| 2016 | 5G 编码决策 | 3GPP 全体会议 | 数据信道采用 LDPC,控制信道采用 Polar |
LDPC 的故事尤其值得玩味:Gallager 在 1962 年提出它时,计算机连“几百万次迭代乘法”都跑不动,论文发布后无人问津。直到 1990 年代末 Turbo 码的出现让业界意识到“迭代译码 + 逼近香农”这条路真的可行,人们才重新翻出 Gallager 的旧论文——发现更好的答案原来早已写在三十多年前的故纸堆里。一段技术被埋没,往往不是因为它不好,而是因为硬件还没准备好。
LDPC 和 Polar 都属于线性分组码:把 $k$ 个信息比特编成 $n$ 个比特($n > k$),码率 $R = k/n$。编码用生成矩阵 $\mathbf{G}$ 完成:
$$\mathbf{c} = \mathbf{u} \cdot \mathbf{G}$$
其中 $\mathbf{u}$ 是信息比特行向量,$\mathbf{c}$ 是码字。校验则由一个 $(n-k) \times n$ 的校验矩阵 $\mathbf{H}$ 完成,合法码字必须满足:
$$\mathbf{H} \cdot \mathbf{c}^T = \mathbf{0}$$
用生活类比理解:$\mathbf{H}$ 就像你网购后核对包裹的那张对账单。每一行是一条校验规则,比如“商品 A + 商品 B + 商品 D 的总价应为 100 元”。如果你收到的货(码字)让某几条对不上,说明运输途中出了问题——而且由于规则之间相互关联,你甚至能推断出哪一个商品错了,把它“纠正”回来。
不同的编码技术,本质上就是用不同的方式设计 $\mathbf{H}$ 或 $\mathbf{G}$,以及用不同的算法利用它们译码。LDPC 的答案是把 $\mathbf{H}$ 设计得“稀疏”;Polar 的答案是把 $\mathbf{G}$ 设计成会“极化”信道的形状。
一个 6 比特码字、3 条校验规则的 LDPC 校验矩阵长这样:
$$\mathbf{H} = \begin{pmatrix} 1 & 1 & 0 & 1 & 0 & 0 \ 1 & 0 & 1 & 0 & 1 & 0 \ 0 & 1 & 1 & 0 & 0 & 1 \end{pmatrix}$$
注意它的关键特征:矩阵里绝大多数元素是 0。每一行只有 3 个 1(每条规则只涉及 3 个比特),每一列只有 2 个 1(每个比特只参与 2 条规则)。在真实系统中,码长几千比特时,每行也只放大约十个 1,其余全为 0——这就是“低密度奇偶校验”(Low-Density Parity-Check)名字的由来。
为什么一定要稀疏?为了译码可以“分而治之”。 如果校验矩阵是稠密的,任何一次校验都牵动全部几千个比特,译码复杂度会指数爆炸;而稀疏结构让每个比特只和少数几个“校验伙伴”发生局部互动,全局的正确性从这些局部互动中涌现出来。
把校验矩阵画成一张二分图,就是 Tanner 图:每一列对应一个变量节点(比特),每一行对应一个校验节点(规则),$H_{ij}=1$ 就在两者之间连一条边。
graph LR
subgraph V["变量节点(比特)"]
b1["b1"]
b2["b2"]
b3["b3"]
b4["b4"]
b5["b5"]
b6["b6"]
end
subgraph K["校验节点(规则)"]
k1["规则1: b1+b2+b4=0"]
k2["规则2: b1+b3+b5=0"]
k3["规则3: b2+b3+b6=0"]
end
b1 --- k1
b2 --- k1
b4 --- k1
b1 --- k2
b3 --- k2
b5 --- k2
b2 --- k3
b3 --- k3
b6 --- k3
这张图最贴切的类比是陪审团合议:每个变量节点是一位陪审员(比特),每位陪审员手里有一份“现场证据”(信道接收值);每个校验节点是一个合议小组,小组成员被要求“意见加起来必须符合规则”。译码过程就是多轮合议:
数学上,节点之间传递的不是“0 或 1”的硬判决,而是对数似然比(LLR):
$$L(b) = \ln\frac{P(b=0 \mid y)}{P(b=1 \mid y)}$$
其中 $y$ 是信道接收值。LLR 是一个带方向的“信心值”:正数代表偏向 0,负数代表偏向 1,绝对值越大代表越有把握,0 代表完全拿不准。校验节点更新的近似规则(min-sum 简化版)非常便于硬件实现:
$$L_{\text{out}} \approx \left(\prod_{i \neq j} \operatorname{sign}(L_i)\right) \cdot \min_{i \neq j} \left| L_i \right|$$
直觉翻译:小组给你的参考意见,方向由“其他成员一致投票”决定,力度取“其他成员中最没信心那位”的信心值——木桶效应,合议的可信度被最弱的证据封顶。
迭代译码有一个隐含假设:消息在图上传递时不会绕圈。但 Tanner 图里天然存在环(cycle)——比如上图中 b1→规则1→b2→规则3→b3→规则2→b1 就构成一个长度为 6 的环。消息沿环传递会回到自己见过的地方,产生“自己给自己作证”的正反馈,导致错误判断被循环放大,译码提前冻结在错误状态。
所以 LDPC 设计的核心功夫之一是:尽量拉长图中最短环的周长(girth),并把大环、稀疏分布作为构造准则。这也是 5G LDPC 采用准循环(QC-LDPC)结构的原因之一——用一个个循环移位的小方块拼接出大矩阵,既天然规避短环,又让硬件只需存储一个小母矩阵,用移位器就能生成超大稀疏矩阵,省芯片面积。
5G 空口的数据信道(PDSCH/PUSCH)使用两种基图(Base Graph):
| 参数 | BG1 | BG2 |
|---|---|---|
| 码率范围 | 1/3 ~ 8/9 | 1/5 ~ 2/3 |
| 支持码块最大长度 | 8448 比特 | 3840 比特 |
| 适用场景 | 大数据包、高速下载 | 小数据包、控制面信令、低时延 |
| 冗余程度 | 低冗余、高谱效率 | 高冗余、强纠错 |
工作流程:根据码率选底图 → 根据码块大小选提升尺寸(lifting size, Zc),把基图“放大”成实际校验矩阵 → 编码 → 速率匹配(打孔或重复,把码字塞进调度器分配的确切资源格数里)。这里有一个与 FFT/OFDM 链路的衔接点:编码输出的比特流随后进入调制映射,最终经 IFFT 搬上子载波——编码决定“说什么”,调制决定“怎么搬”,两者级联才是完整的物理层发送链。
LDPC 还天然适配 HARQ 增量冗余(IR):编码器输出的冗余比特像一个按优先级排好的队列,首次传输只发最系统的部分;一旦接收失败需要重传,后续重传发送的是新的、不同的校验比特,接收端把两次的软信息合并后再译码,相当于越挫越勇——每多传一次,纠错能力就累积一分。
LDPC 的哲学是“用图上的局部迭代涌现出全局正确性”。Arıkan 在 2009 年给出的 Polar 码走了一条完全不同的路,他的洞察可以概括为一句话:
把 N 条一模一样的普通信道,通过特定的线性变换“复制并组合”,它们会分裂成两类极端信道:一部分变得接近完美(几乎不出错),一部分变得糟不可言(几乎纯噪声)。好信道与坏信道的比例是确定的,且码长越长,分裂越彻底。
这就是信道极化(Channel Polarization)。它像财富的马太效应:两份相同的资本,经过“合伙经营”后,一份越滚越大,一份血本无归——而且这个过程可以不断嵌套,指数级加剧。
极化的原子操作是把两条独立信道 $W$ 变换为一条“坏信道”和一条“好信道”:
$$W^{-}(y_1 \mid u_1) = \sum_{u_2} \frac{1}{2}\, W(y_1 \mid u_1 \oplus u_2)\, W(y_2 \mid u_2) \qquad \text{(合并:变差)}$$
$$W^{+}(y_1, y_2 \mid u_1) = \frac{W(y_1 \mid u_1 \oplus u_2)\, W(y_2 \mid u_2)}{W^{-}(y_1 \mid u_1)} \qquad \text{(分裂:变好)}$$
其中 $\oplus$ 是异或。直觉解释:$u_2$ 的信息被“藏”进了 $u_1 \oplus u_2$ 这个异或值里——想单独解出 $u_1$,你必须同时对抗两条信道的噪声,所以这条等效信道更差($W^-$);反过来,一旦 $u_1$ 判决正确,接收端就能用 $u_1 \oplus u_2$ 与接收值反解 $u_2$,此时 $u_2$ 相当于享受了“两份证据交叉验证”,等效信道更好($W^+$)。可以严格证明:$W^-$ 与 $W^+$ 的容量之和不变(守恒),但各自走向两个极端(极化)。
把原子操作递归嵌套,4 条信道变成 8 条等效信道(2 级蝶形),N 条信道经过 $\log_2 N$ 级变换后得到 $N$ 条极化程度各异的子信道。编码矩阵是核心矩阵 $\mathbf{F}$ 的克罗内克积:
$$\mathbf{F} = \begin{pmatrix} 1 & 0 \ 1 & 1 \end{pmatrix}, \qquad \mathbf{G}_N = \mathbf{F}^{\otimes \log_2 N}$$
graph LR
subgraph 输入
u0["u₀"]
u1["u₁"]
u2["u₂"]
u3["u₃"]
end
subgraph S1["第一级组合"]
a0["u₀"]
a1["u₀⊕u₁"]
a2["u₂"]
a3["u₂⊕u₃"]
end
subgraph S2["第二级组合"]
x0["x₀ = u₀"]
x1["x₁ = u₂"]
x2["x₂ = u₀⊕u₁"]
x3["x₃ = u₀⊕u₁⊕u₂⊕u₃"]
end
u0 --> a0
u1 --> a1
u1 --> a0
u0 --> a1
u2 --> a2
u3 --> a3
u3 --> a2
u2 --> a3
a0 --> x0
a2 --> x1
a0 --> x2
a2 --> x2
a1 --> x3
a3 --> x3
注意看 $x_3$:它聚合了全部 4 个输入比特的信息,是"最挤"的位置;而 $x_0$ 只透传 $u_0$,一路毫无保护,是"最裸"的位置。不同位置对噪声的敏感度天生不同——这正是极化的外在表现。
极化之后,编码策略变得异常直白:
这像把班级里的尖子生派去参加奥赛、把基础薄弱的学生安排做固定流程的后勤——资源不追求平均分配,而是让每一条信道都用在刀刃上。只要好信道子集的占比小于信道容量,整码的误码率就能随码长增加指数级下降——这是 Polar 码作为“首个被严格证明可达容量的构造性编码”的历史地位所在。
Polar 最经典的译码算法是连续消除(SC, Successive Cancellation):按自然顺序逐个判决 $u_0 \to u_1 \to \cdots \to u_{N-1}$,每判一个比特,就立即用这个结果帮助后续比特的判决(回忆 5.2 节——后面的比特要靠前面的比特反解)。这是一个递归的决策树搜索:
SC 的缺陷一目了然:赌错一步,满盘皆输——早期一个误判会污染所有后续判决。这就像走迷宫时每个岔路口只能留一个人探一条路,走错就永远回不了头。
改进方案是连续消除列表(SCL)译码:每个岔路口不再只派一个人,而是派出 L 支“探险队”并行探索(保留 L 条最可能的路径),走出迷宫后(码字译完),再用CRC 校验当地图——哪支探险队的完整路径能通过 CRC 验证,就选哪支。5G 中采用的就是 CRC 级联 Polar(在信息比特后先附加 CRC,译码时用 CRC 在 L 条候选路径中择优)。L 越大性能越好,但复杂度接近线性增长,典型取 L=8。
极化是渐进现象——码长 N=256、1024 时分裂才足够彻底;码长很短时(几十比特),信道只是“略微分化”,好信道不够好、坏信道不够坏,性能平平。这个特性直接决定了它在 5G 中的岗位安排。
2016 年 3GPP RAN1#87 会议经过多轮激烈角逐最终定案。理解这背后的“为什么”,比记住结论重要得多:
| 维度 | LDPC(PDSCH/PUSCH 数据信道) | Polar(PDCCH/PBCH 控制信道) |
|---|---|---|
| 典型码长 | 长码(数百至 8448 比特) | 短码(几十至数百比特) |
| 码率灵活性 | 极宽(1/5 ~ 8/9),一张底图覆盖 | 相对窄,靠打孔/重复适配 |
| 大吞吐场景 | 强:并行译码,硬件友好,易扩吞吐 | 弱:SCL 译码并行度提升成本高 |
| HARQ 增量冗余 | 天然支持(分批发送冗余比特) | 不支持,控制信道靠盲重传 |
| 短码性能 | 一般(图未充分展开) | 好(配合 CRC+SCL,短块纠错强) |
| 时延 | 迭代次数可调,单次时延确定 | SC 译码串行,深水区时延略长但短码总量小 |
| 译码复杂度/功耗 | 高吞吐下单位比特功耗低 | 小码块场景总量低 |
分工逻辑可以浓缩成两句话:
graph TB
subgraph 用户面数据路径
A["传输块 TB(MAC层交下)"] --> B["附加 CRC(16/24位)"]
B --> C["码块分割 CB segmentation<br/>大块切分为若干码块,每块再配CRC"]
C --> D["LDPC 编码<br/>选BG1或BG2,按Zc放大矩阵"]
D --> E["速率匹配<br/>打孔/重复对齐调度资源"]
E --> F["码块级联 CB concatenation"]
F --> G["加扰 → 调制(QAM)→ 层映射/预编码 → OFDM(IFFT)→ 天线"]
end
subgraph 控制信息路径
H["DCI 载荷"] --> I["附加 CRC + 扰码(区分UE/RNTI)"]
I --> J["Polar 编码(CRC级联,含速率匹配)"]
J --> K["QPSK 调制"]
K --> L["PDCCH 映射至CCE资源 → 发送"]
end
L -.->|"调度指令指示下方数据的资源位置"| G
这张图揭示了空口调度的本质闭环:控制信道(Polar 译出的 DCI)告诉终端数据信道(LDPC 译出的 PDSCH)在哪些时频资源上、用什么调制编码方案(MCS)。两套编码体系不是竞争关系,而是同一张调度乐谱上的两个声部。
1. BLER 与 MCS 自适应的锚点。 基站侧链路自适应以 初始 BLER ≈ 10% 为目标(IBLER target)。理解 LDPC 译码的迭代特性就会明白:这个 10% 不是“网络很差”的信号,而是故意留出的甜点区——让 HARQ 重传兜住这 10%,换取更高的初始 MCS 和吞吐。现场优化时若发现 IBLER 长期远低于 10%,通常意味着 MCS 偏保守,吞吐还有上涨空间。
2. 码率计算是日常基本功。 调度器给出的码率 ≈(TBS + CRC 比特数)/(分配 RE 承载的编码比特数)。分析吞吐异常时,先算码率是否触及 BG 的上限(如 948/1024 ≈ 0.926),再谈其他原因。
3. 看 log 认结构。 芯片/终端日志里反复出现的 BG1/BG2(底图选择)、Zc=...(提升尺寸)、max iter=...(LDPC 最大迭代次数)、L=8(Polar 列表深度)就对应本文的结构。深度休眠功耗异常时,值得检查 LDPC 迭代次数上限是否被配置得过松——迭代是耗电大户。
4. 常见调试陷阱。 - 混淆 BER 与 BLER:一个码块内错 1 个比特和错 100 个比特,BER 天差地别,但对“码块是否作废”而言完全等价。考核链路质量看 BLER,不看 BER。 - 错误地板(error floor):若译码性能曲线在高信噪比处突然变平、不再下降,优先怀疑所测码型的 Tanner 图构造问题(短环、trap set),而非功率或干扰——这是 LDPC 特有的病,换一个 lifting size 或底图往往立竿见影。 - Polar 短码误区:不要因为 Polar 是“容量可达码”就认为它处处最优;码长低于百比特、码率又高时,它的优势会缩水——这正是 3GPP 不把它用于数据信道的原因,反之亦然。
5. 常见误解澄清。 很多人以为“5G 换编码是为了提速”——其实编码方式对吞吐的贡献是间接的:它把每比特所需信噪比推向香农极限,节省下来的信噪比余量被链路自适应换成更高的 MCS 和码率。编码的功劳是“让每一 dB 都花在刀刃上”,而不是直接拓宽了频谱。
Q1: LDPC 和 4G 用的 Turbo 码到底差在哪? A: 两者都靠迭代译码逼近香农极限,区别在“迭代的组织形式”。Turbo 用两个卷积编码器并行级联,译码时两个软入软出译码器互相交换外部信息,结构串行、并行化困难,高吞吐时硬件功耗陡增;LDPC 的 Tanner 图天然大规模并行,译码器可以做成几千个同时工作的处理单元,且没有“收敛后仍空转”的问题(所有校验通过即可提前停机)。5G 的峰值速率目标是 20 Gbps,Turbo 的并行度撑不住,这是换码最硬的理由。
Q2: Polar 码的“冻结比特”是不是浪费资源? A: 恰恰相反,它是 Polar 设计的精髓。差信道上无论发什么都几乎必然被噪声摧毁,所以“约定发 0、接收端不看它”等于把注定失败的部分主动放弃,把全部可靠性预算集中到好信道上。冻结比特更像考卷上的“本题不计分”声明——明说哪些位置不指望得分,反而保证了整卷的平均分。
Q3: 为什么不在数据信道也用 Polar,控制信道也用 LDPC,统一一种不是更简单? A: 统一会双向损失。数据信道用 Polar:大码块需要拆成大量短码或依赖极深的列表译码,吞吐和功耗都不可接受,且不支持增量冗余 HARQ;控制信道用 LDPC:极短码块下稀疏图无法充分展开,可靠性反而不及 CRC 级联 Polar,且控制信道不需要 HARQ 与宽码率——LDPC 的三大长处全部落空。“按场景选码”本身就是 3GPP 决策中最值得学习的工程方法论。
Q4: LLR 为什么要取对数?直接用概率不行吗? A: 可以但会吃亏。概率是 0~1 的小数,直接相乘时多个小于 1 的数连乘会迅速下溢到浮点精度以下;取对数后乘法变加法,硬件用定点加法器就能实现,且 LLR 的“正负号 + 绝对值”天然表达“方向 + 置信度”,比概率更适合在节点间传递。工程上所有软信息流动几乎都以 LLR 为货币。
Q5: QC-LDPC 里的 Zc(lifting size)该如何直观理解? A: 它是“复印放大倍数”。基图是一个最多 46×68 的小矩阵,元素为 0、1 或“循环移位量”;以 Zc 为倍率放大后,基图中的每个 1 变成一个 Zc×Zc 的单位矩阵循环移位块。Zc 共有 51 个档位(2×2^j 到 15×2^j 的组合),选档的原则是让放大后的矩阵尺寸恰好罩住当前码块长度。理解这一点,看芯片手册里那 51 个档位表就不会一头雾水。
本文由「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 等场景全覆盖。
