Chapter2 极化码的编码算法
极化码的编码问题主要包括两个方面。less
首先是生成矩阵的构造:性能
生成矩阵GN:先来看信道合并示意图,下图截自Arikan论文(之后再也不解释,Arikan论文 特指论文《Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels》):学习
请读者留意这是fig.3,也即图三。根据这张图所表现的形式,咱们能够概括出GN的表达式:测试
疑问:这个表达式如何获得?它与上图有什么对应关系?编码
咱们来看等式右端第一部分:
lua
观察RN前面的表达式,符号“
”是一种矩阵运算,称为“克罗内克积”,详细内容读者可自行查阅维基百科词条:克罗内克积-维基百科;“F”定义为矩阵
,F的定义又有何意义呢?咱们用一个二维向量来测试一下:
,可见用输入向量左乘F矩阵,就可以实现图中第一步线性变换。当N>2时,因为F只有二维,为了完成运算,咱们经过克罗内克积的办法在保持F矩阵属性的同时扩展它的维度,使得它知足咱们的运算要求。因此RN前面的运算能够与上图中的线性变换对应起来。spa
RN对应图中的自身,这个不须要再说。设计
观察RN的右端,I2为二维的单位矩阵,GN/2则体现了递推、迭代的思想。用I2与GN进行克罗内克积,就是为了实现生成矩阵的递推和迭代。这部分对应了图中最右端的操做。所以咱们能够看到,Arikan给出的生成矩阵的定义式确实与上图是彻底对应的。3d
接下来,Arikan又po出了另外一张图:
这是fig.8,它与fig.3的不一样之处在于,fig.3中先进行线性变换再进行置换操做,而fig.8中先进行置换操做再进行线性变换。根绝Arikan的说法,这两个图是全等的。fig.8对应的公式为:
,也就是说这两个公式是等价的:
那么这一步是如何获得的呢?如何证实这两个图是全等的呢?这里有一份我之前证实时留下的手稿,具体的过程我没有精力再排版打出来,看客若是对这个证实有兴趣,不妨做为参考。不过这些细节就算不了解,也不妨碍咱们对极化码理论的学习。就像数学教科书的上的许多定理公式,更多时候重点在于如何去理解和应用。
让咱们回到Arikan的论文中,继续看他是如何一步一步获得GN的构造方法的。
上面这个公式第一行咱们已经证实过了,从第一行到第二行的理论支持来自于克罗内克积的混合乘积性质:
图片来自克罗内克积-维基百科
咱们继续往下看:
这个就很好理解了,直接迭代代入GN/2而后利用混合乘积性质的逆定理就能够获得了。重复上述操做,不断进行迭代,最后咱们能够获得这样一个式子:
其中BN用来代替迭代所产生的式子:
。BN能够写成递推公式:
获得上面的公式以后,咱们很容易就能够计算出BN并求出GN
再来看信息位的选取:
信息位选取:
经过上一节的介绍,咱们了解到了信道的极化现象,而且认识到正是信道极化现象催生了极化码。如今,咱们就要利用这个现象来构造极化码。根据咱们所设想的,经过在偏差率较低的信道(无噪信道)上传输有用信息,在偏差较高的信道(纯噪信道)上传输信息量为0的信息,咱们能够实如今有噪信道下进行无噪传输。
所以,如何挑选要传输信息的信道成为了相当重要的事情。在表征信道质量的参数向量P中,咱们称传输有用信息的位为信息位,传输无用信息的位为冻结位。问题变成了如何求出这个参数向量P。只要咱们求得这个P,而后对它进行从小到大的排序,再根据码率肯定要用到多少信息位,而后从排好序的P中挑选出性能最好的那部分,就能够实现咱们的需求。
Arikan的论文中这样说道:“对于一个给定的B-DMC信道W,本论文对信道的两个参数感兴趣:一个是信道的对称容量I(W):
I(W)表明了等几率输入下,经过信道W进行可靠信息传输的最大速率。第二个称为巴氏参数Z(W):
巴氏参数表明了在一次经过W传输0或1时,最大似然判决错误几率的上限。显然,Z(W)反映了信道的可靠度 。
显然,咱们能够分别将这两个参数做为参数向量P,对于I(W),咱们选择较大的I(W)做为信息位;对于Z(W),咱们选择较小的Z(W)做为信息位。
早期Arikan提出,当W为BEC(二进制删除信道)时,有
,计算两者中的任何一个均可以。Arikan论文中有Z(W)的递推计算公式:
其中第二个式子的不等号在W为BEC取等,所以咱们能够精确的计算巴氏参数,并且计算复杂度也较低,为O(NlogN)。
后来,Arikan给出了当W不为BEC信道时的计算方法,他提出使用“Monte-Carlo算法”(蒙特卡罗法)来近似计算巴氏参数,然而,这个计算的复杂度因
输出符号集的指数型爆炸增加而变得不可能。
还有一种方法也用来进行巴氏参数的估计——Density Evolution(密度进化),可是这个方法缺点在于计算复杂度仍是较高(为O(n)),同时精确度也很差。
目前咱们项目组所使用的信息位选择采用的是tal-vardy所提出的算法。这种算法是Tal和Vardy于2013年发表在IEEE上的一篇21页的论文中提出的,论文名为《how to construct polar code》,感兴趣的读者能够去了解一下。若是对英文阅读感受到不舒服,读者也能够参考《极化码编码与译码算法研究》[王继伟]在2.2.3节中对这种算法的较为详细的中文介绍。
这种算法主要经过信道弱化和信道强化操做,将
的输出符号集进行合并,使其可以具备符合咱们须要长度的输出符号集大小。另外,对于咱们常常用到的AWGN信道,经过高斯近似(GA)方法能够在很是低的复杂度下在较高的精确度上选择信息位。这里列出两篇发表在IEEE上的参考论文,有兴趣的读者能够自行去了解,这里再也不展开说了。
【1】《Evaluation and Optimization of Gaussian Approximation for Polar Codes》.Jincheng Dai等.(2016.5)
【2】《Construction and Block Error Rate Analysis of Polar Codes Over AWGN Channel Based on Gaussian Approximation》.Daolong Wu等.(2014.7)
除此以外,还有一种办法能够提升极化码的构造效率。那就是使用“design-SNR”。
无论咱们采用什么构造办法,信息位的选取老是与SNR的取值密切相关。咱们在仿真极化码性能的时候,每每会以SNR为仿真图的横坐标,以BER、FER为纵坐标,观察曲线走向,经过对比曲线判断优劣。可是每一次带入新的SNR值,都要从新构造一个新的参数向量P,而后从新挑选信息位,这种传统的构造方法咱们称为“point-by-point(逐点SNR)”。这种重复性的工做无疑增长了极化码构造的时间复杂度。
经过研究,咱们发现,对于一个特定的码率,总存在一个完美的SNR,咱们称之为“design-SNR(设计SNR)”,咱们只须要代入这个SNR进行一次参数向量P的构造,而后将挑选好的信息位储存起来。之后在这个码率下,不论在哪一个SNR值下进行仿真,咱们只代入预存的这个信息位进行极化码的构造。因为信息位只构造了一次,时间复杂度获得了显著下降。
根据仿真结果显示,在码长和码块较大的状况下,design-SNR与point-by-point法契合的很是好,以下图:
获得了生成矩阵,又构造了信息位。接下来只须要进行简单的矩阵操做,再叠加上噪声,就能够实现极化码的编码。