Polar Code(10)速率适配的凿孔极化码

前言


Arikan发明极化码时给出了编码算法和SC译码算法,后来的研究者提出SCL和CA-SCL译码算法对SC算法进行了改进,使译码性能得到提升。但不要忘记这些编译码算法都对码长有限定条件,即码长必须满足2的幂次方:\(N={ {2}^{n}}\)。虽然当码长\(N\)固定时,信息比特长度\(K\)可以任意取值,编码速率\(R={K}/{N}\;\)也能随之自由变化。但在信息比特长度一定的情况下,要通过调整码长而调整编码速率就无法实现了。从实际角度出发,我们更希望设计一对编译码器能够在不改变基本的编译码结构的情况下,使码长和编码速率都能够自适应调节。在设计速率可变的编码时,凿孔是一种普遍采用的方法。

速率适配的凿孔极化码


对于速率适配的凿孔极化(rate-compatible punctured polar,RCPP)码,如何凿孔以及如何缩短码长是关键问题。极化码的凿孔方案大致分为两类:第一类方案,在编码端凿掉一些比特,但译码端没有这些凿孔比特的先验信息,因此译码端把这些比特信道被视为容量为0的信道。这类方案被称为“C0”(capacity-zero)凿孔模式[1]。第二类方案,凿孔比特是编、译码器事先知道的,因此这些比特信道被视为容量为1的信道。这类方案被称为“C1”(capacity-one)凿孔模式。本文介绍一种准均匀凿孔算法属于C0凿孔模式。

准均匀凿孔算法


在速率适配极化码框架下,文献[2]提出准均匀凿孔(Quasi-uniform Puncturing,QUP)算法。

RCPP方案


基于CRC辅助译码的速率适配极化码(RCPP)方案如图1所示。

在发送端,首先\(k\)个信息比特输入CRC单元,添加\(m\)个校验比特,输出比特数为\(K=k+m\)。然后\(K\)比特源序列经过Polar编码器输出\(N\)个比特的编码序列。之后输入凿孔单元,被凿掉\(N-M\)个比特后,最终得到\(M\)比特的凿孔极化码。速率适配凿孔极化(RCPP)码方案的编码速率定义为\(R={K}/{M}\;\)

RCPP码由长度为\(N\)的母码(Parent Code)利用凿孔向量(Puncturing Vector)得到:

\[\mathbf{p}=\left( { {p}_{1}},{ {p}_{1}},...,{ {p}_{N}} \right)\]

其中\({ {p}_{i}}\in \left\{ 0,1 \right\}\)\(i=1,2,...,N\),取值为0的\({ {p}_{i}}\)指示凿孔比特位置。

由于被凿掉的比特并未实际传输,但接收端可以将这些凿孔比特信道视为容量为0的信道,也即凿孔比特可视为被传输了,只是被传输在容量为0的信道上。因此接收端不需要改变SCL译码结构,而是直接将凿孔比特信道对应的对数似然比(LLR)设置为全零。假设信道模型为BAWGN信道,根据高斯近似,\(M\)个实际传输的比特信道,其LLR服从\(\left( m_{N}^{\left( i \right)},2m_{N}^{\left( i \right)} \right)\)高斯分布;而\(N-M\)个凿孔比特信道未用于实际传输,但可以把这些信道视为LLR服从\(\left( 0,0 \right)\)的高斯信道。

QUP算法


母码码长为\(N={ {2}^{n}}\),凿孔比特数为\({ {N}_{p}}=N-M\),凿孔向量\(\mathbf{p}\)是二进制向量,取值为0的元素指示凿孔比特位置。QUP算法描述如下:

stage1)初始化向量\(\mathbf{p}\)为全1,设置前\({ {N}_{p}}\)个元素为0; stage2)对向量\(\mathbf{p}\)实施比特反转排序(bit-reversal permutation)操作,从而得到凿孔向量。

QUP算法举例


对于\(N=8,M=5,{ {N}_{p}}=3\)的例子。初始化向量为\(\mathbf{p}=\left( 00011111 \right)\),经过比特反转排序后的向量即为所求凿孔向量\(\mathbf{p}=\left( 01010111 \right)\)。其中序号为1,3,5的位置为凿孔比特位置。

对QUP算法的理解


对于速率适配的凿孔极化码,\(N\)不再表示码长,而是表示母码长度,实际的Polar编码码长则为\(M\)\(M\)比特中仍然包含信息比特和冻结比特,其中信息比特数为\(K\),冻结比特数为\(M-K\)。信息比特又包含\(k\)个原始信息比特和\(m\)个CRC校验比特。

在编码端,首先还是利用巴氏参数或密度进化或高斯近似法估计信道错误概率,从而得到信息比特位置集\(A\)和冻结比特位置集\({ {A}^{c}}\)\(\left| A \right|=K\)\(\left| { {A}^{c}} \right|=M-K\)。编码速率为\(R={K}/{M}\;\)

凿孔向量\(\mathbf{p}\)是凿孔比特数\({ {N}_{p}}\)的函数,只要收发双方约定好凿孔比特数\({ {N}_{p}}\),那么\(\mathbf{p}\)对于编译码器就都是已知的。译码时仍然按照深度为\(d=0,1,...,N\)的码树来进行CA-SCL译码,得到\(N\)比特的估计序列。最后再根据凿孔向量\(\mathbf{p}\)凿掉相应的\({ {N}_{p}}\)个比特,最后输出\(M\)比特的估计序列。

参考文献


[1] Niu K, Dai J, Chen K, et al. Rate-Compatible Punctured Polar Codes: Optimal Construction Based on Polar Spectra[J]. 2016. [2] Niu K, Chen K, Lin J R. Beyond turbo codes: Rate-compatible punctured polar codes[C]// IEEE International Conference on Communications. IEEE, 2013:3423-3427.