5G NR中的Polar码:从规范链路到整个系列小结
前面几篇分别讨论了 Polar 码的构造、SC、SCL、CA-SCL 和率匹配。到了 5G NR,真正发送的并不是一段孤立的 Polar 编码公式,而是一条由多个模块组成的处理链:
\text{消息向量}\rightarrow\text{CRC}\rightarrow\text{掩码(适用时)}\rightarrow\text{输入交织}\rightarrow\text{Polar编码}\rightarrow\text{子块交织}\rightarrow\text{率匹配}\rightarrow\text{物理信道}.每个模块都有自己的输入长度、输出长度和索引方向。只要其中一个位置定义错了,最终得到的比特数可能仍然正确,但接收端无法恢复发送端的消息。本篇按照 3GPP TS 38.212 说明模块关系;实际互操作时,具体信道的参数、表格和边界条件必须以规范为准。
为什么 5G NR 控制信道使用 Polar 码
控制信道承载调度、反馈和资源配置等信息。这类信息通常具有块长度有限、错误代价较高、发送资源需要灵活改变等特点。Polar 码在这个场景下有几个合适的特性:
- 冻结位和信息位集合可以把较可靠的子信道用于传递信息;
- SC 的复杂度较低,SCL 可以用多条路径减轻逐次判决的错误传播;
- CRC 可以在多条候选路径中提供额外的合法性检查;
- 率匹配可以把固定母码长适配到不同的发送长度 E。
这不意味着 Polar 码适合所有 5G 数据。5G NR 对数据信道和控制信道采用不同的编码方案,是因为它们在块长度、时延、资源分配和可靠性要求上不同。本文只关注控制信息使用的 Polar 处理链。
先区分五个长度
消息向量记为
\underline{m}_0^{A-1}=(m_0,m_1,\ldots,m_{A-1}),\qquad m_i\in\{0,1\}.其中 A 是 CRC 添加前的消息向量长度。CRC 产生 L_{\mathrm{CRC}} 个校验比特,因此 CRC 后长度为
K_{\mathrm{enc}}=A+L_{\mathrm{CRC}}.这里保留 K_{\mathrm{enc}} 这个写法,是为了对应 5G NR 规范中的字段含义。一般 Polar 理论文章如果只讨论进入编码器的信息长度,仍然可以使用 K。
Polar 母码长为 N,通常取 2 的幂;率匹配后的实际发送长度为 E。五个长度的含义如下:
| 符号 | 含义 | 所属阶段 |
|---|---|---|
| A | CRC 前消息向量长度 | 输入 |
| L_{\mathrm{CRC}} | CRC 长度 | CRC 参数 |
| K_{\mathrm{enc}} | CRC 后进入 Polar 链路的长度 | K_{\mathrm{enc}}=A+L_{\mathrm{CRC}} |
| N | Polar 母码长 | 编码和译码 |
| E | 率匹配后的发送长度 | 物理信道输入 |
最容易犯的错误是把 E 当成 Polar 码长。率匹配前后,Polar 母码长仍是 N;接收端先把 E 个发送位置的观测恢复成 N 个码字位置的 LLR,之后译码器才开始工作。
发送端的完整链路
用符号表示,发送端可以写成
\begin{aligned} \underline{m}_0^{A-1}&\xrightarrow{\mathrm{CRC}}\underline{d}_0^{K_{\mathrm{enc}}-1}\xrightarrow{\mathrm{mask\ on\ CRC\ bits}}\underline{d}_{\mathrm{mask},0}^{K_{\mathrm{enc}}-1}\xrightarrow{\mathrm{input\ interleaving}}\underline{v}_0^{K_{\mathrm{enc}}-1}\\ &\xrightarrow{\mathrm{place\ and\ freeze}}\underline{u}_0^{N-1}\xrightarrow{\mathrm{Polar}}\underline{c}_0^{N-1}\xrightarrow{\mathrm{subblock\ interleaving}}\underline{b}_0^{N-1}\xrightarrow{\mathrm{rate\ matching}}\underline{e}_0^{E-1}. \end{aligned}掩码和输入交织是否出现、具体怎样定义,要看所使用的 NR 控制信道和规范条款。上式中掩码只作用于 CRC 字段,不改变消息字段的内容。模块边界的长度仍然是:\underline{d}、\underline{d}_{\mathrm{mask}}、\underline{v} 都有 K_{\mathrm{enc}} 位,\underline{u}、\underline{c}、\underline{b} 都有 N 位,只有最终的 \underline{e} 长度是 E。
CRC:给候选消息加一个可检查的约束
CRC 的输入是 A 位消息向量,输出是 L_{\mathrm{CRC}} 位校验向量。把它们拼接起来,得到
\underline{d}_0^{K_{\mathrm{enc}}-1}=(m_0,m_1,\ldots,m_{A-1},r_0,r_1,\ldots,r_{L_{\mathrm{CRC}}-1}).接收端拿到候选序列后,可以重新计算前 A 位的 CRC,并与后面的 L_{\mathrm{CRC}} 位比较。一致时,候选通过 CRC;不一致时,候选 CRC 失败。
CRC 没有增加信道观测,也不能单独纠正错误。它提供的是一个额外判断条件:CA-SCL 先保留至多 L_{\max} 条候选路径,再用 CRC 筛掉不满足校验约束的路径。路径度量相近时,CRC 往往能帮助译码器选出更可信的消息。
CRC masking:校验位为什么还要做模 2 加法
在某些 NR 控制信道中,CRC 校验位还会与由特定标识产生的掩码向量逐位做模 2 加法。设原 CRC 向量为 \underline{r},掩码向量为 \underline{s},两者长度均为 L_{\mathrm{CRC}},则掩码后的 CRC 字段为
\underline{r}_{\mathrm{mask}}=\underline{r}\oplus\underline{s}.\oplus 表示二元域上的逐位加法:相同为 0,不同为 1,不是普通整数加法。
举一个只用于说明运算方向的 4 位例子:
\underline{r}=1011,\qquad \underline{s}=0110.逐位计算为
\begin{aligned} 1\oplus0&=1, &0\oplus1&=1, &1\oplus1&=0, &1\oplus0&=1. \end{aligned}因此
\underline{r}_{\mathrm{mask}}=1011\oplus0110=1101.接收端知道同一个掩码时,再做一次相同运算即可恢复 CRC:
\underline{r}=\underline{r}_{\mathrm{mask}}\oplus\underline{s}.这个例子只展示模 2 运算,不代表完整的 NR 参数。实际 CRC 长度、掩码来源和比特顺序必须按 TS 38.212 的相应规定处理。
输入交织:只改变比特进入信息位的顺序
输入交织重新排列 CRC 后的 K_{\mathrm{enc}} 个比特,不改变比特数量,也不改变 Polar 母码长。设输入序列为
\underline{d}=(a,b,c,d,e,f)定义索引序列
\boldsymbol{p}=(2,5,0,4,1,3).本文约定正向交织为“输出位置 j 读取输入位置 p_j”:
v_j=d_{p_j},\qquad j\in[0,5].逐项代入:
\begin{aligned} v_0&=d_2=c, &v_1&=d_5=f, &v_2&=d_0=a,\\ v_3&=d_4=e, &v_4&=d_1=b, &v_5&=d_3=d. \end{aligned}因此
\underline{v}=(c,f,a,e,b,d).接收端要使用逆索引。定义 \boldsymbol{p}^{-1} 满足
p^{-1}_{p_j}=j.本例为
\boldsymbol{p}^{-1}=(2,4,0,5,3,1).它表示原输入位置 k 的比特位于交织输出的 p^{-1}_k 位置,所以
d_k=v_{p^{-1}_k}.例如 p^{-1}_0=2,所以 d_0=v_2=a;p^{-1}_1=4,所以 d_1=v_4=b。按 k=0,1,\ldots,5 逐项恢复,就得到原序列。
这个例子还说明:输入交织作用于 K_{\mathrm{enc}} 个 CRC 后比特;子块交织作用于 N 个 Polar 编码输出比特。两者长度不同,索引表不能混用。
Polar 编码:把 K_{\mathrm{enc}} 个比特放入 N 个位置
设信息位集合为 \mathcal{A},冻结位集合为
\mathcal{A}^c=[0,N-1]\setminus\mathcal{A},\qquad |\mathcal{A}|=K_{\mathrm{enc}}.按照信息位索引升序写作
\mathcal{A}=\{a_0,a_1,\ldots,a_{K_{\mathrm{enc}}-1}\},\qquad a_0<a_1<\cdots<a_{K_{\mathrm{enc}}-1},则交织后的比特放入
u_{a_j}=v_j,\qquad j\in[0,K_{\mathrm{enc}}-1],冻结位置写入预先约定的值,通常为 0。得到长度为 N 的 \underline{u} 后,进行 Polar 变换:
\underline{c}_0^{N-1}=\underline{u}_0^{N-1}\mathbf{G}_N.理论学习中可以用 BEC、GA 或 PW 等方法得到可靠性排序;5G NR 互操作则必须使用规范规定的可靠性序列和信息位选择规则。
标准可靠性序列与 GA、PW 构造不是一回事
理论文章中,可以根据构造信噪比 \rho_{\mathrm{des}},用 BEC、密度进化、GA、RM 或 PW 得到可靠性排序。这个排序服务于研究、教学或自定义链路。
5G NR 使用预定义可靠性顺序。为了明确本文的排序方向,记把规范序列按“可靠性从高到低”整理后的结果为
\boldsymbol{\pi}_{\mathrm{5G}}=(\pi_0,\pi_1,\ldots,\pi_{N-1}),\qquad \pi_0\text{最可靠}.在这个记号下,信息位集合为
\mathcal{A}=\{\pi_0,\pi_1,\ldots,\pi_{K_{\mathrm{enc}}-1}\}.这里的“前”指已经定义好的有序序列,不是无序集合。实际查表时,规范原表可能采用另一种排列方向,必须按 TS 38.212 的表定义转换或直接按其规则选取,不能凭记忆把 GA 排序替换进去。
| 对象 | 可靠性来源 | 适用场景 |
|---|---|---|
| \boldsymbol{\pi} | 信道模型、\rho_{\mathrm{des}} 和构造算法 | 教学、研究、自定义链路 |
| \boldsymbol{\pi}_{\mathrm{5G}} | 3GPP 规定的预定义顺序 | 5G NR 标准互操作 |
如果在每个仿真点用 GA 重新选位,再和固定的 NR 链路比较,比较的就不是同一套编码配置。构造信噪比 \rho_{\mathrm{des}} 和仿真信噪比 \rho_{\mathrm{sim}} 也应分开记录。
子块交织和率匹配:编码后序列还要怎样处理
Polar 编码得到 \underline{c} 后,NR 还要对这 N 个编码比特进行子块交织,得到 \underline{b}。设正向关系为
b_q=c_{\sigma_q},\qquad q\in[0,N-1],其中 \sigma_q 给出交织输出位置 q 读取的码字位置。子块交织只改变 N 个编码比特的排列,不改变 N。
随后率匹配把 \underline{b} 变成 \underline{e},长度由 N 变为 E。若 t_j 表示发送位置 j 对应子块交织后的位置,则
e_j=b_{t_j}=c_{\sigma_{t_j}}.这个关系把两个索引阶段连起来:发送端先通过 \sigma 找到码字位置,再通过 t 决定哪些位置发送、哪些位置跳过或重复。实际 NR 的交织表、选择顺序和不同 E 情况下的处理,以 TS 38.212 为准。
一个完整的长度例子
下面构造一个用于学习的抽象例子。它只演示长度和模块关系,不代表可以直接与 5G NR 设备互操作的完整配置。设
A=40,\qquad L_{\mathrm{CRC}}=11,\qquad N=64,\qquad E=72.第一步:消息向量
发送端先生成 40 位消息向量
\underline{m}_0^{39}=(m_0,m_1,\ldots,m_{39}).所以 A=40。
第二步:附加 CRC
CRC 模块根据这 40 位消息生成 11 位校验向量 \underline{r}_0^{10},拼接后得到
\underline{d}_0^{50}=(m_0,\ldots,m_{39},r_0,\ldots,r_{10}).因此
K_{\mathrm{enc}}=A+L_{\mathrm{CRC}}=40+11=51.CRC 模块把长度从 40 变成 51。
第三步:掩码和输入交织
如果当前控制信道适用 CRC masking,就对 11 个 CRC 比特按规范进行掩码;序列总长度仍为 51。之后输入交织只重新排列这 51 位,长度仍为 51。记交织后序列为
\underline{v}_0^{50}.这里没有增加或减少比特,改变的只是每个比特所在的位置。
第四步:放入 Polar 输入向量
现在假设选定母码长 N=64,并从 64 个位置中选出 K_{\mathrm{enc}}=51 个信息位位置。冻结位数量为
N-K_{\mathrm{enc}}=64-51=13.把 51 位 \underline{v} 按信息位顺序放入 \underline{u},其余 13 个位置写入冻结值 0,得到长度 64 的 \underline{u}_0^{63}。Polar 编码后得到 64 位码字 \underline{c}_0^{63}。
第五步:子块交织和率匹配
子块交织仍然处理 64 个编码比特,只改变排列。随后假定当前资源要求发送 E=72 个比特。因为 E>N,这个抽象例子需要重复部分编码位置:
64\ \xrightarrow{\mathrm{subblock\ interleaving}}\ 64\ \xrightarrow{\mathrm{rate\ matching}}\ 72.率匹配后的序列为 \underline{e}_0^{71}。注意,E=72 不意味着 Polar 码长变成 72,译码端仍然要恢复 64 个母码位置的 LLR。
整个长度链为
40\ \xrightarrow{\mathrm{CRC}}\ 51\ \xrightarrow{\mathrm{interleaving}}\ 51\ \xrightarrow{\mathrm{Polar\ encoding}}\ 64\ \xrightarrow{\mathrm{rate\ matching}}\ 72.接收端怎样反向恢复
接收端按发送端的逆顺序处理,而不是直接对 72 个比特运行 Polar 译码。
第一步:从接收观测得到发送位置 LLR
设接收端得到 72 个信道观测
\underline{y}^{\mathrm{tx}}=(y^{\mathrm{tx}}_0,y^{\mathrm{tx}}_1,\ldots,y^{\mathrm{tx}}_{71}),\qquad j\in[0,71].这是一个包含 72 个观测值的向量,索引 j 的范围是 [0,71]。在本文的 BPSK 约定下,e_j=0 映射到 +1,e_j=1 映射到 -1。若噪声方差为 \sigma^2,则
\lambda_j^{\mathrm{tx}}=\ln\frac{W(y_j^{\mathrm{tx}}\mid0)}{W(y_j^{\mathrm{tx}}\mid1)}=\frac{2y_j^{\mathrm{tx}}}{\sigma^2},\qquad j\in[0,71].这里 \underline{y}^{\mathrm{tx}} 是接收观测,\underline{\lambda}^{\mathrm{tx}} 才是 LLR,二者不能混用。
第二步:撤销率匹配和子块交织
根据
e_j=c_{\sigma_{t_j}},把发送位置的 LLR 放回码字位置。如果多个发送位置对应同一个码字位置,就把独立观测相加:
\lambda_i^c=\sum_{j=0}^{E-1}\mathbf{1}\{\sigma_{t_j}=i\}\lambda_j^{\mathrm{tx}},\qquad i\in[0,N-1].本例的长度变化是
\underline{\lambda}^{\mathrm{tx}}\in\mathbb{R}^{72}\longrightarrow\underline{\lambda}^{c}\in\mathbb{R}^{64}.如果某个位置没有观测,求和为空,得到 0;如果某个位置被重复发送多次,就把对应 LLR 相加。实际配置是打孔或缩短时,还要按第 17 篇的规则处理未发送位置。
第三步:Polar 译码和信息位抽取
CA-SCL 使用长度为 64 的 \underline{\lambda}^{c} 进行译码,得到至多 L_{\max} 条候选 \hat{\underline{u}}。对于每条候选,按信息位集合升序
\mathcal{A}=\{a_0,a_1,\ldots,a_{50}\},\qquad a_0<a_1<\cdots<a_{50},抽取交织后的候选序列
\hat{v}_j=\hat{u}_{a_j},\qquad j\in[0,50].这一步得到的是 51 位候选,还不是最终的消息向量。
第四步:逆输入交织和 CRC 检查
如果发送端采用 v_j=d_{p_j} 的交织方向,接收端按
\hat{d}_{p_j}=\hat{v}_j恢复 CRC 后序列。若使用了 CRC masking,还要先用同一个掩码恢复 CRC 比特,再检查候选是否通过 CRC。也就是说,CRC 检查使用未掩码的校验字段,不能直接把掩码后的字段当作普通 CRC 结果。
通过检查的候选中,CA-SCL 选择路径度量最小者;如果所有候选都 CRC 失败,则按预先规定的回退规则选择路径,同时保留 CRC 失败状态。最后取候选的前 A 位作为消息向量:
\hat{\underline{m}}_0^{A-1}=(\hat{d}_0,\hat{d}_1,\ldots,\hat{d}_{A-1}).因此本例的接收长度变化为
72\ \xrightarrow{\mathrm{LLR}}\ 72\ \xrightarrow{\mathrm{inverse\ rate\ matching}}\ 64\ \xrightarrow{\mathrm{CA\text{-}SCL}}\ 51\ \xrightarrow{\mathrm{inverse\ interleaving}}\ 51\ \xrightarrow{\mathrm{CRC\ check}}\ 40.72、64、51、40 分别对应发送位置、Polar 母码位置、CRC 后序列和最终消息向量,不能任意替换。
标准链路和学习版仿真链路的边界
学习 Polar 码时,常用一个简化模型:取 N=2^n,冻结位全为 0,根据 GA 或 BEC 构造信息位集合,然后用 SC 或 SCL 译码。这种模型适合推导和验证基本算法。
5G NR 链路还要遵守规范中的具体约定:
- CRC 长度和生成规则;
- 某些控制信道适用的 CRC masking;
- 输入交织、子块交织和它们的索引方向;
- 预定义可靠性序列和信息位选择;
- N 与 E 的取值边界及率匹配索引;
- 发送端与接收端的比特顺序。
回看整个系列
本系列的主线可以压缩为
\begin{aligned} &\text{信道极化}\rightarrow\text{子信道可靠性}\rightarrow\text{信息位与冻结位}\rightarrow\text{Polar编码}\\ &\rightarrow\text{SC/SCL/CA-SCL译码}\rightarrow\text{率匹配}\rightarrow\text{5G NR链路与AWGN仿真}. \end{aligned}信道极化说明为什么不同位置的可靠性会分化;构造方法把可靠性变成信息位集合 \mathcal{A};冻结位让编码输入满足约束;Polar 变换把输入向量变成母码字;SC、SCL 和 CA-SCL 说明接收端怎样利用 LLR 恢复候选;CRC 为候选选择增加校验条件;率匹配把母码长 N 适配到发送长度 E;5G NR 规范把这些模块固定成可以互操作的处理顺序。
本篇小结
5G NR 中的 Polar 处理可以按长度和方向检查:A 位消息向量经过 CRC 变成 K_{\mathrm{enc}} 位,经过交织后放入长度为 N 的 Polar 输入向量,编码和子块交织仍保持长度 N,率匹配最后生成长度 E 的发送序列。
接收端反向执行:从接收观测得到发送位置 LLR,撤销率匹配和子块交织,恢复 N 个母码位置的 LLR,再用 CA-SCL 得到候选,逆交织后进行 CRC 检查,最后输出 A 位消息向量。
标准预定义可靠性序列和 GA、PW 等研究构造方法必须分开;N 和 E 必须分开;CRC 失败和消息向量错误也必须分开统计。下一篇将把这些模块接入 AWGN 仿真,观察 BER 和 BLER 的实际结果。
参考
- 3GPP, NR; Multiplexing and channel coding, TS 38.212, V17.9.0, Mar. 2023, §§5.3–5.4.
- 3GPP, NR; Physical channels and modulation, TS 38.211, V17.9.0, Mar. 2023, §§7.3.2–7.3.3.
- E. Arıkan, “Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels,” IEEE Transactions on Information Theory, vol. 55, no. 7, pp. 3051–3073, Jul. 2009, doi: 10.1109/TIT.2009.2021379.
- K. Niu and K. Chen, “CRC-aided decoding of polar codes,” IEEE Communications Letters, vol. 16, no. 10, pp. 1668–1671, Oct. 2012, doi: 10.1109/LCOMM.2012.090312.121720.