巴氏参数、GA算法以及matlab仿真
1、内容目录
- 开篇1-内容介绍&参考文献
- 概述2-什么是极化码?
- 原理3-Arikan原版论文学习总结
- 编码算法4-巴氏参数、GA算法以及matlab仿真
- 译码算法5-SC算法及matlab仿真
- 译码算法6-SCL、CA-SCL及matlab仿真
2、极化码编码
通过对上一节内容的学习,我们初步认识了极化码和极化效应,在本节中,我将对极化码的编码原理、方式和对应的MATLAB仿真代码进行介绍,希望会对大家有帮助。
2.1、引言
所谓极化码编码,就是利用极化效应来进行信道编码,使其能够达到对称信道容量I(W)的编码方法。极化码编码的基本思想就是针对N个极化信道,建立一种信息位的选择方式,使每一个信息比特都可以独立地通过一个并行的极化信道,并且仅在信道对称容量I(W) ≈1 或者巴氏参数Z(W)≈0 的信道上发送我们实际要传输的信息比特;在剩下的极化信道上,可传输一些收发双方都已知的比特,这个集合被称为冻结集,冻结集传输的比特称为冻结位。
在进行实际编码的过程中,首先对信息序列进行预处理,得到长度为K的输入信息比特,K是小于等于N的;然后根据已经选出的信息集,将输入信息比特在长度为N的极化码序列 (N位极化码序列就是上节中通过信道极化效应所得到的,而信息比特只映射到了信道I(W)值排名前K位的极化码序列序号对应的位置上 )上进行一 一映射,而剩余的N-K位冻结位按照预定义的值统一为“0”或者“1”,冻结位的值对于信道传输效果并没有影响。之后再将信源序列送入我们所设计的极化码编码器,完成编码工作。
2.2、极化码编码原理
2.2.1、陪集码
在学习极化码编码之前,先引入陪集码的概念,极化码是陪集码的一种特例。定义陪集码的长度为N,N=
2
n
2^n
2n,n≥0,对于所有长度的陪集码,采用同一种编码规则进行编码
上式中
G
N
G_N
GN就是上一节中定义的极化码生成矩阵。这里我们设集合A是集合 {1,2,…,N} 的任意一个子集,则可以将上式写为
在上式中,
u
A
u_A
uA表示以集合A中的元素为序号的比特信息,
A
c
A^c
Ac表示以集合 {1,2,…,N} 为定义域,集合A在该定义域中的补集。矩阵
G
N
(
A
)
G_N(A)
GN(A)是取生成矩阵
G
N
G_N
GN相应的的行向量,组成一个子矩阵,上述行向量由集合A的元素一 一确定。
若已知集合A,向量 u A c u_A^c uAc已经进行预定义,需要传送的信息向量 u A u_A uA也已知,我们可以建立一个从信息序列 u A u_A uA到码字序列 x 1 N x_1^N x1N的映射关系,我们将这个映射关系称为陪集码。陪集码以 G N ( A ) G_N(A) GN(A)为生成矩阵,由固定的向量所决定,把这一类码都称为 G N G_N GN陪集码。 一个陪集码 G N G_N GN(N,K,A, u A c u_A^c uAc)中,N是极化码长度,K是信息位的长度,也表示集合A的大小,码率表示为R=K/N,集合A称为是信息位集合, u A c u_A^c uAc称为冻结比特集合。
例如,定义一个参数集为(4,2,{2,4},(1,0)),其编码情况如下:
当输入信息序列为(
u
2
u_2
u2,
u
4
u_4
u4)=(1,1) 时,生成的码字序列为
x
1
4
x_1^4
x14=(1,1,0,1)。
(注:上式中的加号都表示模2加法运算)
2.2.2、极化码的构造
陪集码的编码过程是对极化码的编码过程的一种简单预演,在后面的介绍中,你会发现极化码的编码过程与陪集码的编码过程有异曲同工之妙。接下来为大家介绍如何构造极化码,即如何通过数学计算,得到我们所需要的信息位集合A。
为了得到信息位集合A,我们需要用到前面介绍过的两个信道参数,信道容量I(W)与巴氏参数Z(W),通过对N个极化信道的信道参数进行计算,我们选取“前K个最可靠极化信道”来传输需要传输的信息,其余位都作为冻结位。
目前比较常见的构造方法有:都有巴氏参数(Bhattacharyya parameter)法、蒙特卡洛(Monte Carlo)构造方法、密度进化(DE)构造方法、高斯近似(Gaussian
approximation, GA)构造方法、极化重量(PW)构造方法等。在目前存在的算法中,一般不计算I(W)的值,因为它非常难算;大部分构造算法都是利用计算参数Z(W)来进行判决 ,但除了二进制删除信道(BEC)以外,只能计算Z(W)的近似值。
在本节的介绍中,我选取了代表性的两种构造算法,来进行详细分析和算法设计。第一种是针对BEC信道,计算精确的Z(W)值来进行极化码构造;第二种是针对高斯信道(AWGN),采用高斯近似构造方法,近似求取信道参数。
巴氏参数构造算法
巴氏参数构造方法是E.Arikan在他的论文[1]中,针对二进制删除信道(BEC)所提出的一种构造方式。已知巴氏参数
它表示最大似然译码的错误概率上界。Arikan在他的论文[1]中证明,对一个二进制删除信道来说,假设其删除概率为epsilon,信道分裂后得到的虚拟比特信道的巴氏参数
{ Z(
W
N
i
W_N^i
WNi)}可以通过以下递归方式计算:
上述递归的初始条件是
Z(
W
N
j
W_N^j
WNj)表示信道
W
N
W_N
WN分裂后的第 j 个子信道对应的巴氏参数。有上述可知,每一个子信道的巴氏参数都可以有上述递归算式进行精确计算得出。信道容量与巴氏参数之间的换算关系为:I(W1(1))=1- Z(
W
N
j
W_N^j
WNj) 。
下列算法给出了BEC信道下求K个最可靠子信道的步骤 :
- 输入极化码长度N和BEC信道删除概率。
- 信道巴氏参数初始化:
- 利用下列公式,计算出每一个子信道
W
N
i
W_N^i
WNi的巴氏参数:
- 将计算后的N个子信道的巴氏参数进行排序,将巴氏参数值最小的K个信道序号选择为信息位。
基于上述算法,在matlab进行仿真,下图两张图分别给出不同码长下的BEC信道的极化现象。
码长N=512的极化码的信道极化现象
码长N=1024的极化码的信道极化现象
由以上两图中可以发现,当信道索引在0-0.5N之间时,对应的大部分子信道的信道容量趋于“0”;当信道索引在0.5N-N之间时,对应的大部分子信道的信道容量趋于“1”;当信道索引在0.5N附近时,对应子信道的信道容量取值是不确定的。因此我们选择该种方式构造极化码时,可以按照码率,从下标索引比较大的地方开始排序选择,可以节省构造时间。
代码如下:
% 二进制删除信道的极化码构造(以信道容量为衡量标准)
% function IWi=BEC(N,epsilon)
N=256;
epsilon=0.5; % 删除概率
n=log2(N);
IWi=zeros(n+1,N);
IWi(1,1)=1-epsilon;
for i=1:n
k=2^(i-1);
for j=1:k
tmp=IWi(i,j);
IWi(i+1,2*j-1)=tmp^2;
IWi(i+1,2*j)=2*tmp-tmp^2;
end
end
scatter((1:N),IWi(n+1,1:N),'.b');
axis([0 N 0 1]);
xlabel('Channel index');
ylabel('Symmetric capacity');
高斯近似构造(GA)算法
GA算法是针对AWGN信道所采取的一种极化码构造算法。在AWGN信道下,由于Z(W)参数不能直接算出,只能得到近似的结果,再选择出性能比较好的信道来。假设我们在发送端发送码字序列X,将该码字进行二进制相移键控(BPSK)调制得到码字序列S,
s
i
s_i
si=1-2
x
i
x_i
xi ,经过高斯信道加噪后,在接收端收到码字序列Y。则该高斯信道的信道容量为
其中信道转移概率W(y | x)为
其中π是圆周率,e是自然底数,x∈X是发送端信源码字的一个比特信息,y∈Y是接收端接收序列的一个比特信息,
δ
2
δ^2
δ2是 AWGN信道的噪声方差,它的值可以根据定义的高斯信道信噪比来计算,计算方程为:
其中R是码率,SNR为信噪比,其单位为分贝(dB)。
在 AWGN 信道中,接收端根据接收的yi进行译码,信息比特的对数似然比(Log Likelihood Ratio,LLR)为
该对数似然比为服从高斯分布的随机变量,因为
y
i
y_i
yi 服从参数为 N(1,
δ
2
δ^2
δ2) 的高斯分布,所以 2y/
δ
2
δ^2
δ2 服从高斯分布
由此可知该对数自然比满足方差为均值的二倍关系,即LLR(y)~N(2/
σ
2
σ^2
σ2,4/
σ
2
σ^2
σ2)。在SC译码过程中,信息比特的对数似然比为:将上式中的
简写成
L
L
R
N
i
LLR_N^i
LLRNi,由前面的叙述可知
L
L
R
N
i
LLR_N^i
LLRNi是服从高斯分布的随机变量,其高斯分布参数满足方差为均值二倍。下面我们将计算对数似然比的均值,该均值可以很好的近似上述所求的对数似然比,以此来代表等效比特信道的可靠性。下面是该均值的计算方法:
其中:
由于上述公式中含有太多的复杂运算,使得计算起来代价很大,复杂度很高,因此需要有一个近似的简单算式来表示上述结果的值。因此后来科学家Chung定义了一种近似方程,可比较好的近似表示上述方程的值。即AGA-chung公式,如下所示:
上述递归计算的初始条件是E(
L
L
R
1
1
LLR_1^1
LLR11)=2/
δ
2
δ^2
δ2。在所有的信道中,选取具有最大LLR均值的极化信道作为传输信息比特的信道。下列给出了在高斯信道下进行高斯近似构造极化码的算法。
-
输入:高斯信道的噪声方差σ2,信源序列的长度N。
-
初始化:E( L L R 1 1 LLR_1^1 LLR11)=2/ δ 2 δ^2 δ2
-
利用上述公式计算N个子信道的对数似然值LLR的期望值
-
输出N个对数似然值LLR的期望
-
选取期望值最大的K个作为信息位集合,剩余N-K个位作为冻结位集合。
基于上述算法,在matlab进行仿真,下列两张图像为不同码长下的AWGN信道极化现象。
码长N=512,sigma=0.5,AWGN信道极化现象
码长N=1024,sigma=0.5,AWGN信道极化现象
由以上两图可发现,当信道索引比较小时,其对应的信道对数似然比的期望值也比较小;当信道索引比较大时,其对应的信道对数似然比的期望值也比较大;当信道索引处于中间值时,其对应的信道对数似然比的期望值呈阶梯式上升趋势。因为,当我们在选择信息位时,可以按对数似然比的期望按降序排序,去前K位信道索引为信息位。
代码如下
%GA构造算法主函数
N=512;
sigma=0.5;
u = zeros(1, N);
u(1) = 2/sigma^2;
for i = 1:log2(N)
j = 2^(i - 1);
for k = 1:j
tmp = u(k);
u(k) = phi_inverse(1 - (1 - phi(tmp))^2);
u(k + j) = 2 * tmp;
end
end
u = bitrevorder(u);
scatter((1:N),u(1:N),'.b');
axis([0 1.1*N 0 4*N]);
xlabel('Channel index');
ylabel('E(LLRi)');
%phi函数
function y = phi(x)
if (x >= 0)&&(x <= 10)
y = exp(-0.4527*x^0.859 + 0.0218);
else
y = sqrt(pi/x) * exp(-x/4) * (1 - 10/7/x);
end
%phi的反函数
function x = phi_inverse(y)
%部分用闭合表达式,部分用数值解法,速度进一步提升!
if (y <= 1.0221) && (y >= 0.0388)
x = ((0.0218 - log(y))/0.4527)^(1/0.86);
else
x0 = 0.0388;
x1 = x0 - (phi(x0) - y)/derivative_phi(x0);
delta = abs(x1 - x0);
epsilon = 1e-3;
while(delta >= epsilon)
x0 = x1;
x1 = x1 - (phi(x1) - y)/derivative_phi(x1);
%当x1过大,放宽epsilon
if x1 > 1e2
epsilon = 10;
end
delta = abs(x1 - x0);
end
x = x1;
end
end
2.3、极化码编码
极化码编码过程采用非系统极化码编码。非系统编码的意思是码字序列中不直接包含信息比特,其编码的渐进复杂度为O(N
l
o
g
2
log_2
log2N)。在这个编码方案下,取消了比特奇偶置换操作,即在计算时取消BN,只研究了
设A是通过任意一个码构造算法得到的可靠极化信道的集合,此时码长为N,信息比特数为K=|A|。在长度为N的信源序列
u
1
N
u_1^N
u1N=(u1,u2,…,uN)中,把K个信息比特放在i∈A的元素上,其余N-K个元素叫冻结比特,在本次仿真中,我们总是令冻结比特为1。是
u
1
N
u_1^N
u1N对应的码字,计算
x
1
N
x_1^N
x1N的过程就是极化码的非系统编码过程。在计算的过程中,矩阵之间的相乘,具体到行列相乘,采用的是模2加法运算,最后得到的矩阵中只有0/1两个参数。
3、总结
本节主要叙述了极化码的编码原理,过程,算法和对应的代码,针对两种不同的信道条件,我们选择了两种经典的极化码的构造算法来进行描述。其实极化码的编码算法的难度主要就集中在如何构造极化码,从极化信道中选择出信息位集合来,剩下的步骤就很容易理解和实现。相信通过本节的学习,大家可以对极化码的编码过程有一个很直观的理解和认识,在下一节中,我会为大家介绍常见的极化码译码算法。如果有不懂或者错误的地方,欢迎大家批评指正。
最后,新人博主写帖子不易,如果你觉得对你有帮助,多多点赞分享关注打赏,给我更多创作动力。祝大家都能有所学,有所获,加油!