Polar Code(6)SC译码算法

前言


Arikan在文献[1]中给出了Polar Code译码算法,即串行抵消(Successive Cancellation,SL)译码算法。由Polar Code编码原理可知,极化码的构造就是一个极化信道的选择问题,而极化信道的选择实际上是按照最优化SC译码性能为标准的。根据极化信道转移概率函数式,各个极化信道并不是相互独立的,而是具有确定的依赖关系的:信道序号大的极化信道依赖于所有比其序号小的极化信道。基于极化信道之间的这一依赖关系,SC译码算法对各个比特进行译码判决时,需要假设之前步骤的译码得到的结果都是正确的。并且正是在这种译码算法下,极化码被证明了是信道容量可达的。因此对极化码而言,最合适的译码算法应当是基于SC译码的,只有这类译码算法才能充分利用极化码的结构,并且同时保证在码长足够长时容量可达。

SC译码算法


在进行译码时,从式(1)的转移概率可以看出,序号i极化信道WN(i)的输出包括信道接收信号y1N以及前i1个极化信道的输入u1i1两个部分。

WN(i)(y1N,u1i1|ui)ui+1NXNi12N1WN(y1N|u1N)

因此,对于i{1,2,...,N},比特ui的估计值u^i可以根据接收信号y1N和部分估计序列u1i1通过计算当u^i=0u^i=1WN(i)的转移概率进行逐个地判断。这种译码算法称为串行抵消(SC)译码算法:对信道序号i从1到N取值,各个比特的估计值根据以下公式得到:

u^i={hi(y1N,u^1i1),  if iAui,  if iAc

其中,当iAc时,表明该比特为冻结比特,即收发端事先约定的比特,因此直接判决为u^i=ui;当iA时,表明该比特为承载信息的信息比特,判决函数为

hi(y1N,u^1i1)={0,  if LN(i)(y1N,u^1i1)01,  if LN(i)(y1N,u^1i1)<0 

定义对数似然比(Log-Likelihood Ratio,LLR)为

LN(i)(y1N,u^1i1)ln(WN(i)(y1N,u^1i1|0)WN(i)(y1N,u^1i1|1))

LLR的计算可以通过递归完成。现定义函数fg如下:

f(a,b)=ln(1+ea+bea+eb)

g(a,b,us)=(1)usa+b

其中,a,bR,us{0,1}。LLR的递归运算借助函数fg表示如下:

LN(2i1)(y1N,u^12i2)=f(LN/2(i)(y1N/2,u^1,o2i2u^1,e2i2),LN/2(i)(yN/2+1N,u^1,e2i2))

LN(2i)(y1N,u^12i1)=g(LN/2(i)(y1N/2,u^1,o2i2u^1,e2i2),LN/2(i)(yN/2+1N,u^1,e2i2),u^2i1)

递归的终止条件为当N=1时,即到达了信道W端,此时L1(1)(yj)=lnW(yj|0)W(yj|1)

定义事件“SC译码算法得到的译码码块错误”为E=i=1NBi,其中事件

Bi={u1N,y1N:u1i1=u^1i1,WN(i)(y1N,u1i1|ui)<WN(i)(y1N,u1i1|ui1)}

表示“SC译码过程中第一个错误判决发生在第i个比特”。由于BiAi(事件Ai的定义参看《Polar Code(4)编码之极化信道可靠性估计》前言),因此有EiAP(Ai),于是

P(E)iAP(Ai)

其中P(Ai)的值可根据前文所述的计算巴氏参数、密度进化或高斯近似方法得到。因此,通过式(6)可以得到极化码在SC译码下的误块率(BLER)性能上界。

L1(1)(yj)=lnW(yj|0)W(yj|1)在这里仍属于定义式,在实际中并不具有操作性,因为转移概率W是未知的。当引入高斯近似法,接收符号y的对数似然比(LLR)定义为

L(y)=lnp(y|0)p(y|1)=2yσ2

因此译码端对数似然比的初始值L1(1)(yj)=2yσ2可轻松获得,y为接收符号,σ2为噪声方差。

SC译码示例


现在以码长N=4,消息比特数为K=3的极化码为例,对SC译码进行说明。在图1中,u1为冻结比特并设定为零值,而消息比特也假设为全零,最右端的L1(1)(yj)表示接收自信道的对数似然比。其他节点表示中间估计结果以及中间译码结果。

需要说明的是,编码过程中计算转移概率是从图的左边逐级向右边递归。而在译码过程中,计算信道的LLR要从右边逐级向左递归。

SC译码算法将首先计算u1的对数似然比L4(1)(y14)。根据式(5)和式(7),如图2所示,首先计算出L2(1)(y12)L2(1)(y34)的值,其中

L2(1)(y12)=f(L1(1)(y1),L1(1)(y2))=ln(1+e1.5+2e1.5+e2)=1.06

L2(1)(y34)=f(L1(1)(y3),L1(1)(y4))=ln(1+e1+0.5e1+e0.5)=0.23

接着计算出L4(1)(y14)

L4(1)(y14)=f(L2(1)(y12),L2(1)(y34))=ln(1+e1.060.23e1.06+e0.23)=0.11

虽然L4(1)(y14)<0,但由于u1是冻结比特,我们依然将u1判决为u^1=0

接着对u2进行译码,如图3所示,根据式(6)和式(8)可得

L4(2)(y14,u^1)=(1)u^1L2(1)(y12)+L2(1)(y34)=(1)0×1.06+(0.23)=0.83

由于u2是消息比特且L4(2)(y14,u^1)>0,因此判决为u^2=0,此处为正确译码。

接着对u3进行译码,如图4所示,根据式(5)和式(7)可得

L4(3)(y14,u^12)=f(L2(2)(y12,u^1u^2),L2(2)(y34,u^2))

这里需要先求L2(2)(y12,u^1u^2),根据式(6)和式(8)可得

L2(2)(y12,u^1u^2)=(1)u^1u^2L1(1)(y1)+L1(1)(y2)=(1)0×1.5+2=3.5

再求L2(2)(y34,u^2),根据根据式(6)和式(8)可得

L2(2)(y34,u^2)=(1)u^2L1(1)(y3)+L1(1)(y4)=(1)0×(1)+0.5=0.5

把式(16)和式(17)带入到式(15)得到

L4(3)(y14,u^12)=f(3.5,0.5)=ln(1+e3.50.5e3.5+e0.5)=0.47

由于L4(3)(y14,u^12)<0,因此判决u^3=1,此处发生译码错误。

最后对u4进行译码,如图5所示,根据式(6)和式(8)可得

L4(4)(y14,u^13)=(1)u^3L2(2)(y12,u^1u^2)+L2(2)(y34,u^2)=(1)1×3.5+(0.5)=4

由于L4(4)(y14,u^13)<0,因此判决u^4=1,此处发生译码错误。

总结


SC译码算法以LLR为判决准则,对每一个比特进行硬判决,按比特序号从小到大的顺序依次判决译码。当码长趋近于无穷时,由于各个分裂信道接近完全极化(其信道容量或者为0或者为1),毎个消息比特都会获得正确的译码结果,可以在理论上使得极化码达到信道的对称容量I(W)。而且SC译码器的复杂度仅为O(NlogN)和码长呈近似线性的关系。然而,在有限码长下,由于信道极化并不完全,依然会存在一些消息比特无法被正确译码。当前面i1个消息比特的译码中发生错误之后,由于SC译码器在对后面的消息比特译码时需要用到之前的消息比特的估计值,这就会导致较为严重的错误传递。因此,对于有限码长的极化码,采用SC译码器往往不能达到理想的性能。

参考文献


[1] Arikan E. Channel Polarization: A Method for Constructing Capacity-Achieving Codes for Symmetric Binary-Input Memoryless Channels[J]. IEEE Transactions on Information Theory, 2008, 55(7):3051-3073. [2] 张亮. 极化码的译码算法研究及其应用[D].浙江大学,2016.