首页 › deep-tech › 噪声里捞比特:信道编码原理

你一定有过这样的经历:地铁报站“本次列车开往——江——路”,你脑子里自动补全成“江苏路”。人耳漏听了几个音节,大脑却把整句话修复了。这个每天都在发生的动作,本质上就是纠错——人类语言自带大量冗余,丢几个字不影响理解。

可你的手机屏幕上,几乎从来没出现过“乱码”。无线空口是全世界最嘈杂的信道之一:信号穿墙、深衰落、被邻区和各种干扰轮番轰击,比特在空中飞一路,磕磕碰碰是常态。但网页文字几乎从不缺胳膊少腿——不是因为信道干净,而是物理层内部有一套机制,在比特出错的当场就把它们修好了。

这套机制的核心叫信道编码。在5G里它由两位主角担纲:LDPC码管数据,Polar码管控制。这篇文章把两位主角讲透:它们从哪来、为什么长这样、为什么5G要让它们分工,而不是二选一。

一、先想清楚:为什么要“编码”

信号在信道里出错不可避免,止损只有两条路。

路线一:事后补救。收到错包就丢弃,让发送方重传。这是自动重传请求(ARQ)的思路,简单直接。但重传有代价:一来一回的时延摆在那里。卫星链路单次往返几百毫秒,靠重传撑可靠性,视频会卡成幻灯片;空口信号差的小区边缘,重传一多吞吐直接崩掉。

路线二:事前加固。发送前就按双方约定的规则加进冗余,接收方拿着冗余自己推算、自己修复,不必等重传。这叫前向纠错(FEC),信道编码就是它的核心。用快递打比方:路线一是“碎了再补寄”,路线二是“出厂就做好防震包装,路上摔一下,收件人拆开照样能用”。

冗余加多少,由码率刻画。k个信息比特编成n个比特发送,码率就是:

$$R = \frac{k}{n}$$

R越低,冗余越多,越抗摔,但有效吞吐越低。这是一笔绕不开的交易。

这笔交易的天花板,香农在1948年就画好了。带宽为B、信噪比为S/N的信道,无差错传输的容量极限是:

$$C = B \log_2\left(1 + \frac{S}{N}\right)$$

香农证明:只要码率R低于C,就存在某种编码方式,能把错误概率压到任意小;一旦R超过C,神仙难救。但香农只证明了“存在”,没给出现成方案。此后大半个世纪,整个编码学科做的事情,本质上就是一件事:造出能逼近这条线的码。

二、迟到三十六年的翻案:LDPC码

1960年,MIT的博士生Robert Gallager在博士论文里提出了一类码:低密度奇偶校验码(LDPC)。想法极其漂亮,但以当年的硬件算力,迭代译码的开销高不可攀,成果被束之高阁。转折发生在1993年——turbo码横空出世,用“两个卷积码靠交织级联、迭代译码”逼近香农极限,震动了整个学界。人们回头翻旧账才发现:Gallager三十六年前的东西思路同源,结构甚至更灵活。1996年MacKay和Neal重新点燃了它;又因为turbo早年专利壁垒森严而LDPC没有专利包袱,工业界迅速倒向了LDPC。

校验方程:用小圈子互相锁住每个比特

LDPC的全部秘密,在一个稀疏的奇偶校验矩阵H里。看一个最小的例子——(6,3)码:3个信息比特编成6个比特发送,校验矩阵长这样:

$$\mathbf{H} = \begin{pmatrix} 1&1&1&1&0&0 \ 0&0&1&1&0&1 \ 1&0&0&1&1&0 \end{pmatrix}$$

每一行是一条校验方程:这一行里所有为1的位置上的比特,加起来(模2)必须是偶数。于是合法码字只有8个:000000、001110、010111、011001、100101、101011、110010、111100。收到任何不属于这8个的串,就知道传输出错了。

所谓低密度,就是矩阵里1很少——每条校验只管几个比特,每个比特也只被几条校验管。这不是偷懒,而是精心设计的哲学,讲完译码你就明白为什么。

把方程画成图,就是LDPC的灵魂——Tanner图:上排是变量节点(每个比特一个),下排是校验节点(每条方程一个),连线表示“这个比特参与这条校验”。上面那个矩阵画出来是这样的二部图:

flowchart TD
    V1["比特v1"] --- C1["校验A"]
    V2["比特v2"] --- C1
    V3["比特v3"] --- C1
    V4["比特v4"] --- C1
    V3 --- C2["校验B"]
    V4 --- C2
    V6["比特v6"] --- C2
    V1 --- C3["校验C"]
    V4 --- C3
    V5["比特v5"] --- C3
    V6 --- C3

迭代译码:一群爱管闲事的邻居

先看最直观的情形(擦除信道:比特丢了,但知道哪里丢了)。假设发送101011,收到?01?11——第1、4位丢了:

  1. 校验B管着v3、v4、v6:现在v3=1、v6=1,要凑成偶数,v4必是0。救回一个。
  2. 校验A管着v1、v2、v3、v4:现在v2=0、v3=1、v4=0,v1必是1。又救回一个。
  3. 一轮的结论喂给下一轮,直到全员归位,最后用H验一遍,校验子全零,收工。

注意这个过程的精妙之处:校验B救出v4,v4立刻变成校验A的线索。信息沿着图流动,一轮一轮滚雪球。

真实信道的比特不是“丢了”而是“变可疑了”,所以节点间传递的不是0和1,而是软信息——对数似然比:

$$L = \ln\frac{P(b=0 \mid y)}{P(b=1 \mid y)}$$

符号代表倾向(正数更像0),幅度代表把握(越大越笃定)。每一轮:比特节点把自己从信道听来的初始把握分发给所有相邻校验节点;校验节点综合几个比特的意见,反手给每个比特一条“外部建议”——注意是外部:给v4的建议里不许包含v4自己刚才的发言,否则就成了自说自话的回音壁。比特节点把信道意见和各方建议合并,更新把握,继续传播。如此往复,直到所有校验同时满足,或迭代预算用完。

这套玩法叫置信传播。类比:做一份被咖啡糊了几个格子的填字游戏,单看一格猜不出,但把横向线索、纵向线索、邻居格子里已确定的字母反复交叉比对,几个回合下来全盘皆活。LDPC把这种交叉印证,做成了可以芯片化的流水线。

稀疏性为什么是命门

三个原因:

  1. 复杂度线性。矩阵里1的个数与码长成正比,每轮迭代的工作量随码长线性增长。码可以造得极长(长码抗错能力天然更强),译码依然吃得消。
  2. 高度并行。成千上万个节点互不牵连地同时运算,硬件吞吐可以做得很高。
  3. 独立性。消息在稀疏图上要绕好几圈才能回到原点,观点不易“近亲繁殖”。但稀疏图上难免存在少数环形结构,会让一小撮比特互相强化错误——这就是误码平层(error floor)的来源之一:信噪比明明已经不错,误块率却卡在某个水平不再下降。工程上通常在外面再套一层代数码专门“扫地”(卫星电视标准就用BCH外码收拾LDPC的残余错误),或者干脆在构图时避开害群之环。

顺带说一句教科书必写但常被略过的实话:对一般的码找最优译码(最大似然)是NP完全问题,码长稍大精确求解就不现实。置信传播是“次优但够好”的工程答案——这也解释了这个领域为什么如此看重图结构设计和迭代算法。

三、马太效应炼金术:Polar码

LDPC靠一张设计出来的稀疏图。2009年,土耳其比莱肯特大学的Arıkan发表的极化码(polar codes),走了一条更“数学暴力”的路:不挑好信道,而是把烂信道炼成好信道。

递归地“合并再拆分”

操作只有一步,但重复log₂N层。把两条一样的信道配成一对:

以二进制擦除信道为例(擦除概率p),拆开后两条子信道的擦除概率是:

$$p^{+} = p^{2}, \qquad p^{-} = 2p - p^{2}$$

p=0.5(一半概率丢)时:好那条只丢25%,坏那条丢75%。两条一模一样的半吊子信道,一次合并拆分,立刻分出优等生和差等生。把N=2ⁿ条信道两两配对、层层递归,分化不断放大:

flowchart TD
    A["N条一模一样的烂信道"] --> B["两两配对<br/>交叉合并成复合信道"]
    B --> C["再拆开<br/>一条更好一条更坏"]
    C --> D{"分化彻底了吗"}
    D -->|"还没有"| B
    D -->|"已彻底"| E["好信道放信息比特"]
    D -->|"已彻底"| F["烂信道放已知零<br/>即冻结比特"]

以8条擦除概率50%的信道为例,按上面的递推式算三轮,8条子信道变成:

子信道 擦除概率 用途
#1 0.4% 信息比特
#2 12.1% 信息比特
#3 19.1% 信息比特
#4 31.6% 冻结
#5 68.4% 冻结
#6 80.9% 冻结
#7 87.9% 冻结
#8 99.6% 冻结

进场时人人都是50%的半吊子,出场后一半接近天堂、一半近乎全废——这是概率论版的马太效应,所以叫极化。理论还保证:信道数趋于无穷时,好信道的占比恰好趋于信道容量本身。

用法随之而来:可靠的子信道放信息比特,废掉的子信道放收发双方都预先知道的固定值(通常是0,即冻结比特)。既然接收方知道冻结位是什么,它们错成什么样都无所谓,等于把全部资源押在了好信道上。

这不是“逼近”容量。极化码是第一个被数学证明能精确达到对称二进制输入无记忆信道容量的显式构造码,而且编解码复杂度只有O(n log n),工程上完全负担得起。

SC译码:排队判决,和它的后悔药

极化码怎么译?连续消除(SC):按序号逐位判决,判某一位时,把前面所有位的判决当作既定事实直接使用——这正是极化结构赋予的红利,子信道的“好”本来就是建立在“前面的位已确定”的前提上。代价有两个:一是串行,前一位没判完后面全部排队;二是误差传播,前面的位判错,后面全被带偏。

flowchart TD
    R["收到含噪软信息"] --> S1["SC译码<br/>从头到尾逐位判定"]
    S1 --> S2["某一位判错<br/>后面位全被带偏"]
    S2 --> S3["整块失败"]
    R --> L1["SCL译码<br/>同时保留L条候选路径"]
    L1 --> L2["每判一位<br/>路径分裂再剪枝"]
    L2 --> L3["CRC给每条路径打分"]
    L3 --> L4["挑出唯一通过验收的路"]

解药是列表译码(SCL):不再一条道走到黑,每个判决点同时保留L条候选路径——相当于让L个人并行往下猜,每人带着自己的一套假设。路径数会指数膨胀,所以每一层都要剪枝;最后由CRC当裁判——发端在信息比特后面加CRC校验,收端用每条候选路径算CRC,只有校验通过的那条才有资格输出。5G实际采用的正是这种CRC辅助的SCL方案,它把中短码长的性能从“被LDPC碾压”拉回到可竞争的水平。

四、为什么5G让它们分工,而不是二选一

2016年11月,3GPP为5G增强移动宽带的信道编码拍板:数据信道用LDPC,控制信道用Polar。这个分工不是和稀泥,而是两种码的“体质”决定的。

维度 Turbo LDPC Polar
出生 1993 1960提出,1996复活 2009
核心结构 卷积码并行级联+交织 稀疏校验+Tanner图 信道合并分裂的递归
译码方式 软信息迭代交换 置信传播 连续消除/列表译码
擅长场景 低码率 高码率、长码块 短码块
并行度 中 高 SC串行,SCL部分并行
5G岗位 退居二线 数据信道 控制信道

数据信道的画像:码块大(数千比特量级)、流量凶猛、对吞吐极致苛求。LDPC在高码率区间性能占优、全并行译码吞吐惊人,正中下怀。turbo在低码率上依然是好答案——这是学界公认的比较结论——但高码率不如LDPC,于是5G里退居二线。

控制信道的画像:调度指令、系统消息,一块只有几十比特,块小,却要求极高的可靠性。极化码的理论优势恰恰在短码长——LDPC和turbo的长处都在长码,几十比特的小块上发挥不出来;而Polar构造确定、SC类译码开销小,配上SCL和CRC后短码性能出色。小消息用短码强码,各得其所。

一句话概括体质差异:LDPC是靠海量简单约束并行死磕的“人海战术”,Polar是靠数学定理精确定位的“定向打击”。

五、现网连接:工程师在哪里会撞见它

最后澄清两个常见误解。其一,信道编码不是加密:它对抗的是自然噪声,不防窃听,加了冗余反而让第三方更容易恢复信号,保密是另一套密码学机制的事;也别把它与扰码混为一谈——扰码是把数据打散成伪随机序列,目的完全不同,信道编码加的是有结构、可用来纠错的冗余。其二,注意方向感:信源编码(比如语音压缩)负责去掉冗余省带宽,信道编码负责加回冗余保可靠——一减一加,看似对着干,实则各司其职,共同构成数字通信的完整闭环。

常见问题

Q: LDPC和Turbo都是迭代译码,区别到底在哪? A: 都是“软信息来回传”的思想,但组织方式不同。turbo是两个卷积码通过交织器级联,两个译码器互相递纸条;LDPC是成百上千个简单校验节点在一张稀疏图上同时投票。后者并行度高得多,适合高吞吐;turbo则在低码率上占优。5G数据信道选LDPC,取的正是高码率加高并行这一刀。

Q: 极化码“达到容量”,LDPC不是也号称逼近极限吗,差在哪? A: LDPC的“逼近”是设计良好的码序列在长码下的工程事实与概率性分析;极化码是第一个被数学证明容量可达的显式构造(对称二进制输入无记忆信道),这是理论上的里程碑。但工程里看的是有限码长的实际表现,两边各有胜场——5G让它们分工正是这个逻辑。

Q: CRC不是检错码吗,怎么跑到Polar译码里当裁判了? A: 检错和纠错本来就是配合使用的。SCL译码同时维护多条候选路径,其中只有一条是真的:发端加CRC,收端对每条候选路径验CRC,通过的那条才被采纳输出。这就是“CRC辅助列表译码”。

Q: 码率越低越可靠,那为什么平时不用极低的码率? A: 码率低意味着同样的信息要占用更多空口资源,吞吐按比例缩水。网络的实际选择是动态的:信道好就高码率多传,信道差才降码率保可靠。可靠性是买来的,花的钱是吞吐。

Q: 控制信道为什么不也用LDPC,一套译码器不更省事吗? A: 控制消息块很小(几十比特),LDPC的长码优势发挥不出来,短块性能反而不如精心构造的Polar码加列表译码;而且Polar构造确定,小码块下的开销与实现更可控。小消息配短码强码,才是分工的根由——统一并不是美德,合适才是。

参考来源

  1. Polar code (coding theory) — Wikipedia — 极化码构造原理、容量可达证明地位、复杂度与5G采纳决议
  2. Low-density parity-check code — Wikipedia — Gallager原始论文史、Tanner图与置信传播、误码平层与产业应用全景
  3. Channel Polarization: A Method for Constructing Capacity-Achieving Codes — E. Arıkan, IEEE Trans. Inf. Theory (2009) — 极化码原始论文
  4. List Decoding of Polar Codes — I. Tal, A. Vardy, IEEE Trans. Inf. Theory (2015) — 列表译码,解决SC译码中短码长的性能短板

本文由「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学通信知识星球海报-扫码加入