(18) 5G NR中的Polar码:从规范链路到整个系列小结

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。五个长度的含义如下:

符号含义所属阶段
ACRC 前消息向量长度输入
L_{\mathrm{CRC}}CRC 长度CRC 参数
K_{\mathrm{enc}}CRC 后进入 Polar 链路的长度K_{\mathrm{enc}}=A+L_{\mathrm{CRC}}
NPolar 母码长编码和译码
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=ap^{-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 映射到 +1e_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;
  • 输入交织、子块交织和它们的索引方向;
  • 预定义可靠性序列和信息位选择;
  • NE 的取值边界及率匹配索引;
  • 发送端与接收端的比特顺序。

回看整个系列

本系列的主线可以压缩为

\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 等研究构造方法必须分开;NE 必须分开;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.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇