极化码能不能真正走向工程,关键不在于如何编码,而在于怎么把固定码长的编码结果塞进千变万化的传输资源里。这个适配过程就是速率匹配,而速率匹配里最绕不开的一环,就是打孔、缩短、删余这一整套操作。很多初学者一看到“准均匀打孔(QUP)”这个名词就头疼,其实把它拆开看,就是一个“怎么有章法地丢掉一部分比特”的问题。这篇文章我会从极化码的基本原理讲起,把打孔、缩短、删余的区别说透,再把QUP的设计思路和工程实现细节完整梳理一遍,最后附上我实际调仿真和协议栈时的踩坑记录。不管是做物理层算法的、写协议代码的,还是准备面试的,这篇文章都值得你花二十分钟看完。
1. 从一个工程问题说起:极化码怎么适配任意码长
极化码(Polar Code)从被5G NR采纳为控制信道编码方案那天起,就一直顶着“第一个被理论证明可达香农极限的编码”的光环。光环归光环,工程落地的时候,第一个难题就摆在眼前:信道极化天生只对2的整数次幂码长有效,也就是16、32、64、128、256、512、1024这种长度。可是实际无线通信里,物理资源块数量千变万化,控制信息的比特数也在动态变化,你不可能每次调度都刚好凑出一个2的幂次码长。
这时候就需要速率匹配(Rate Matching)。
1.1 极化码的工作原理简述
要理解速率匹配为什么重要,先得知道极化码在做什么。极化码的核心思想是“信道极化”:把N个独立的二进制输入信道,通过递归的“合并-分裂”操作,变成N个相互关联的虚拟子信道。这个过程会让一部分子信道的容量趋近于1,成为“好信道”;另一部分子信道的容量趋近于0,成为“坏信道”。
好消息信道用来传信息比特,坏信道全部填0,也就是冻结比特。编码的时候,信息比特和冻结比特组成一个长度为N的输入向量u,乘以生成矩阵G_N,得到码字x = u · G_N,x的长度也是N,这就是一个完整的极化码码字。
这里有个关键点:不同位置的子信道可靠性不一样。哪些位置放信息位、哪些位置放冻结位,是由子信道可靠性排序决定的。这个排序贯穿了整个速率匹配设计,后面讲QUP还会反复提到它。
1.2 速率匹配问题的本质
假设编码器生成了一个N位的码字,但物理层只能给你E个比特的资源位置去发送,这个E大于N或者小于N都有可能。速率匹配要做的事,就是从N个码字比特里,选出E个比特送出去,接收端再用某种方式把没送出去的N-E个比特“脑补”回来,然后送入一个N长度的译码器完成译码。
如果E大于N,说明资源比码字多,那就要重复发送一部分比特,这个操作叫重复(Repetition)。如果E小于N,说明资源不够,必须删掉N-E个比特,删的方式就是打孔或缩短。所以速率匹配本质上是一个映射函数:输入是N个码字比特,输出是E个待发送比特,同时要保证接收端能正确恢复出N个位置的软信息。
这个问题的难点在于:删掉哪些比特,对译码性能影响最小?随便删是不行的,因为每个码字比特在译码因子图里的“地位”完全不同。
1.3 三种手段的概览
速率匹配的三种基本手段——打孔(Puncturing)、缩短(Shortening)、重复(Repetition),名字看起来接近,实际上在接收端的处理方式天差地别。简单理解:
- 打孔:被删掉的比特不发送,接收端对它们的值是“完全未知”,译码时LLR初始化为0。
- 缩短:被删掉的比特虽然不发送,但接收端“事先知道”它们的值(通常是约定好的固定比特),LLR初始化为一个极大值。
- 重复:发送端把某些比特多发送一份或多份,接收端把多份信息合并,等效获得分集增益。
这三种手段的取舍,直接决定了整个编码方案的性能上限。接下来我一个个拆开讲。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 打孔、缩短、删余:看似相似,接收端待遇完全不同
很多人被“删余”这个词搞懵了。先澄清一下:在中文通信文献里,“删余”和“打孔”对应的其实是同一个英文单词Puncturing。“删余”这个叫法是从纠错码老文献里传下来的,最早用在卷积码和Turbo码里,意思是按规则删掉一部分编码输出比特。到了极化码时代,大家更习惯叫“打孔”,因为“打孔”这个动作描述更形象。你可以理解为一个叫法更老派,一个叫法更现代,说的是同一件事。
真正要区分的是打孔和缩短,这两个才是让你性能差出好几个dB的关键。
2.1 打孔:发送端不发送,接收端当完全未知
先看打孔。假设码长N=8,目标长度E=6,需要删掉2个码字比特。打孔的方式就是随便选2个位置不发送。接收端拿到6个位置的软信息后,把这6个值填进对应的译码器输入位置,剩下的2个打孔位置填0。
这里“填0”是什么意思?在LLR体系里,LLR=0表示P(bit=0) = P(bit=1),也就是完全等概率,没有携带任何信息。译码器拿到这些位置后,会认为“这两个位置的值不确定,但也不是完全不可能”,于是把这部分不确定性通过因子图传播到其他位置上。换句话说,打孔等于让译码器用“
