[⑤5G NR]: 5G Polar编码算法

前言

博主在[①5G NR]: 3GPP协议中Polar编码流程解读中介绍了5G中Polar码编码的相关流程,在这篇博客中就介绍下在5G中Polar码基础编码的算法,Polar码(极化码)的发明者是Erdal Arikan教授。

Arikan kernel

首先来介绍下什么是Arikan kernel。Arikan kernel或者Arikan matrix是个 2 ∗ 2 2*2 22的矩阵:

G 2 = [ 1 0 1 1 ] G_2=\begin{bmatrix} 1&0\\ 1&1\\ \end{bmatrix} G2=[1101]

对于最基础情形, b ‾ = [ b 0 , b 1 ] \underline{b}=[b_0, b_1] b=[b0,b1]为信息比特序列, c ‾ = [ c 0 , c 1 ] \underline{c}=[c_0, c_1] c=[c0,c1]为码字比特序列,那么就满足:

c ‾ = b ‾ ⋅ G 2 \underline{c}=\underline{b}\cdot G_2 c=bG2

结果可以由下图来描述:

生成矩阵 G N G_N GN

Polar码的长度为 N = 2 n N=2^n N=2n,根据协议章节5.3.1.2,Polar码的生成矩阵 G N G_N GN G 2 G_2 G2通过Kronecker prodcut(克罗内克内积)计算得到:

G N = G 2 n = G 2 ⊗ G 2 n − 1 = [ G 2 n − 1 0 G 2 n − 1 G 2 n − 1 ] = ( G 2 ) ⊗ n G_N=G_{2^n}=G_2\otimes G_{2^{n-1}}=\begin{bmatrix} G_{2^{n-1}}&0\\ G_{2^{n-1}}&G_{2^{n-1}}\\ \end{bmatrix}=(G_2)^{\otimes n} GN=G2n=G2G2n1=[G2n1G2n10G2n1]=(G2)n

如果 u ‾ = [ u 0 , u 1 , . . . , u N − 1 ] \underline{u}=[u_0,u_1,... ,u_{N-1}] u=[u0,u1,...,uN1]为编码前的输入的信息比特序列, d ‾ = [ d 0 , d 1 , . . . , d N − 1 ] \underline{d}=[d_0,d_1,... ,d_{N-1}] d=[d0,d1,...,dN1]为编码后的输出的码字比特序列,那么就满足:

d ‾ = u ‾ ⋅ G N \underline{d}=\underline{u}\cdot G_N d=uGN

样例 N = 8 N=8 N=8

Polar码码字的结果可以通过(recursive encoding)迭代的方式计算得出,以 N = 2 3 = 8 N=2^3=8 N=23=8为例,可以通过迭代3次计算得出,首先生成矩阵 G 8 G_8 G8为:

G 8 = G 2 ⊗ G 2 ⊗ G 2 = [ 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 ] G_8=G_2\otimes G_2 \otimes G_2=\begin{bmatrix} 1&0&0&0&0&0&0&0\\ 1&1&0&0&0&0&0&0\\ 1&0&1&0&0&0&0&0\\ 1&1&1&1&0&0&0&0\\ 1&0&0&0&1&0&0&0\\ 1&1&0&0&1&1&0&0\\ 1&0&1&0&1&0&1&0\\ 1&1&1&1&1&1&1&1 \end{bmatrix} G8=G2G2G2= 1111111101010101001100110001000100001111000001010000001100000001

u ‾ ( n ) \underline{u}^{(n)} u(n) 为第n次迭代,那么3次迭代的过程见下图:

如果 u ‾ = [ 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 ] \underline{u}=[0,0,0,1,0,1,1,1] u=[0,0,0,1,0,1,1,1],那么

u ‾ ( 1 ) = [ 0 , 0 , 1 , 1 , 1 , 1 , 0 , 1 ] \underline{u}^{(1)}=[0,0,1,1,1,1,0,1] u(1)=[0,0,1,1,1,1,0,1]
u ‾ ( 2 ) = [ 1 , 1 , 1 , 1 , 1 , 0 , 0 , 1 ] \underline{u}^{(2)}=[1,1,1,1,1,0,0,1] u(2)=[1,1,1,1,1,0,0,1]
u ‾ ( 3 ) = [ 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 ] \underline{u}^{(3)}=[0,1,1,0,1,0,0,1] u(3)=[0,1,1,0,1,0,0,1]
d ‾ = u ‾ ⋅ G 8 = [ 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 ] \underline{d}=\underline{u}\cdot G_8=[0,1,1,0,1,0,0,1] d=uG8=[0,1,1,0,1,0,0,1]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李71~李先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值