LDPC码及其译码实现.docx
- 文档编号:9782504
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:12
- 大小:79.09KB
LDPC码及其译码实现.docx
《LDPC码及其译码实现.docx》由会员分享,可在线阅读,更多相关《LDPC码及其译码实现.docx(12页珍藏版)》请在冰豆网上搜索。
LDPC码及其译码实现
LDP(码及其译码实现
•、LDPC码简介
LDP(码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术条件,缺乏可行的译码算法,此后的35年间
基本上被人们忽略,其间由Tanner在1981年推广了LDP(码并给出了LDP(码的图表示,即后来所称的Tanner图。
1995年前后MacKaysNeal等人对LDP(码重新进行了研究,提出了可行的译码算法,从而进一步发现了LDP(码所具有的良好性能,迅速引起强烈反响和极大关注。
LDP(码(低密度奇偶校验码)本质上是一种线形分组码,它通过一个生成矩阵G各信息序列映射成发送序列,也就是码字序列。
对于生成矩阵G,完全等效地存在一个奇偶校验矩阵H,所有的码字序列C构成了H勺零空间(nullspace),即HC=O。
LDP(码的奇偶校验矩
阵H是一个稀疏矩阵,相对于行与列的长度,校验矩阵每行、列中非零元素的数目(我们习惯称作行重、列重)非常小,这也是LDP(码之所以称为低密度码的原因。
由于校验矩阵H的稀疏性以及构造时所使用的不同规则,使得不同LDP(码的编码二分图(Taner图)具有不同的闭合环路分布。
而二分图中闭合环路是影响LDP(码性能的重要因素,它使得LDP(码在类似可信度传播(BeliefProPagation)算法的一类迭
代译码算法下,表现出完全不同的译码性能。
当H的行重和列重保持不变或尽可能的保持均匀时,我们称这样
的LDP(码为正则LDP(码,反之如果列、行重变化差异较大时,称为非正则的LDPC码。
根据校验矩阵H中的元素是属于GF(2还是GF(q)(q=2),我们还可以将LDPC码分为二元域或多元域的LDPC码
二、LDPC译码算法
2.1、Gallager概率译码算法
Gallage当初为了介绍LDP(码,同时还提出了一种迭代的概率译码算法,Gallage概率译码算法,后来在此基础上又发展出了置信度传播译码算法(BPA也称SPA或者MPA)。
假设一个二进制序列是一个LDP(码字,那么这n个比特就要满足由该码字的校验矩阵所确定的一系列的校验方程。
并且,包含某一比
特Ci的校验方程可能不止一个,这些校验方程中的其他比特又可能包含在其他更多的校验方程中。
为了直观的表示这种关系,Gallager引
入了校验集合树的概念。
图2.1所示为某一比特的校验集合树。
(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)
图2.1校验集合树
根节点表示比特d,和d相连的每一条边表示包含d的一个校验方
程,在图2.1中,d包含在3个校验方程中;第一层中的每一线段上
校验方程中的加法是模
2加。
Cd即为比特d的数值,Ci,i即为比特
验方程分别是:
Cd
C1,1
C1,2
C1,3
Cd
C2,1
C2,2
C2,3
CdC3,1C3,2
C3,3
(1,1)的数值。
与第一层各节点相连接的每条边同样表示包含该比特的一个校
验方程,第二层中的每一线段上的节点同样表示该校验方程中除第一
层比特以外的其他比特。
以比特(2,2)为例,和比特(2,2)相连接的边有3条,其中一条与本层节点(2,1),(2,3),及根节点d相连,另外两条与第二层中节点u,v,w和x,y,才目连。
因此包含比特(2,2)的3个校验方程分别为:
C2,2
C2,1C2,3Cd0
C2,2
CuCvCw0
C2,2
CxCyCz0
第三层
(图中未画出)及以后的各层依此类推,每个比特都有相
应的以该比特为根节点的校验集合树。
假设信道是无记忆信道,yi仅与Ci及信道噪声有关,考虑根
节点d和第一层节点组成的集合,这些比特组成了包含比特d的
j个校验方程,每个校验方程由k个比特组成(包含比特d),显然发送的这些比特满足这j个校验方程。
因此假设当发送的码字是c(C°,Ci,|||,Cn1)时,那么在以上情况下接收到的符号即为y(yo,yi,11|,yni)。
这样在传送码字C时,码字中的各比特满足包含比特d的j个校验方程。
当接收到相应的符号序列y时,比特d为1的条件
概率可以表示为P(Cd1|y,c)。
同理,比特d为0的条件
概率表示为P(Cdo|y,c)。
又令当不考虑发送比特间的相
关性时,d为1的概率表示为p(Cd1|y),它与信道模型有关。
令PdP(Cd1|y),Pn表示d的校验集合树第一
层中包含d的第i个校验方程的第I个比特为1的概率,那么有:
根据式2.1,只要知道了图2.1的第一层中各比特为1的概率
Pii,就可以算出比特d的条件概率。
在其他根节点的校验树里比特d又作为一个节点参与到根节点的概率计算中去,即比特d从与其有关的节点中获取信息计算出概率,再将其计算出的概率信息传出用于计算其他的节点5,由于在计算其他节点Ci时同样会用到计算比特d时所用过的运算,所以可以通过共享计算的中间结果而使计算量大为降低,进而发展出了BPA(也称SPA或MPA。
2.2BP算法(也称SP或MP算法)
校验集合树虽然比较直观,但对于每一个节点都有不同的校验集合树,因此在描述并行计算整个码字各比特的后验概率时,使用校验
集合树并不方便,因此介绍一种新的图形表示法,Tanner图。
对应于
图2.1的Tanne图如图2.2所示。
该图仅画出部分变量节点和校验节点。
Tanner图中变量节点对应于校验集合树中的节点,校验节点对应于校验集合树中的边。
(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)d
图2.2对应于图2.1校验集合树的部分Tanner图
由Tanner图可看出,信息是在变量节点和校验节点之间来回传递
的,变量节点d将自身的固有信息再加上与它有关的S1,S2,S3校验节点传给它的额外信息一起传递给校验节点S4。
同理,校验节点Cj也是将自身的固有信息再加上与它有关的除某一变量节点Vi以外的其
余变量节点所传给Cj的额外信息一起传递给变量节点Vi,如此信息便在变量节点和校验节点之间来回传递,不断更新变量节点和校验节点的值,所有变量节点和校验节点更新完一次称之为一次迭代结束,直
到变量节点译码成功或者达到最大的迭代次数译码输出
因此,完整的BPA(也称SPA或MPA)表述如下:
概率
rml
(1)[qml'(2.2)
lL(m)/I
器(1rml)/2(2.3)
A(1铀)/2(2.4)
3)变量节点更新:
qmlmlP0r:
l(2.5)
m'M(l)/m
q:
lmlP1,r;'l(2.6)
mM(l)/m
其中ml是一个使得qmlq1ml1的值
4)似后验概率更新
q0lPl0以(2.7)
mM(l)
q1lP1咕(2.8)
mM(l)
同样l是一个使得ql0q11的值
5)比特判决:
如果q00.5,判决人0;否则判人1,(i1,2j||,N)若HTx0,或者迭代次数达到最大迭代次数,则结束迭代,将x
作为译码输出;否则返回到步骤2)继续迭代。
2.3Log-BP算法
由2.2介绍的BP算法可以看出BP算法比较复杂,且该算法需要很
多连乘运算,需要大量的运算时间和消耗大量的硬件资源,不便于硬
件实现,因此,又发展出了一种更加简便的对数域的BP算法,简称
Log-BP算法。
考虑一个二值随机变量x,它的对数似然比L(x)定义为
L(x)lnP^
P(x1)
根据对数似然比的定义,令
0.fl0
VlnfT
fi
0
Vml1n¥
Oml
0
Vin牛
qi
0
「ml
Umlln-
「ml
再对以上的BP算法在对数域内进行一系列的化简,最终可获得
Log-BP算法的完整表述:
1)初始化:
VmlV0(2.9)
2)校验节点更新:
1V/
Uml2tanh[tanh^](2.10)
l'L(m)/l'2
3)变量节点更新:
VmlV0Um.(2.11)
m'M(l)/m
4)似后验概率更新:
vv0Umi(2.12)
mM(l)
5)比特判决:
如果V|0,则判X|0;否则判X|1,(l1,2,卅,N)若HTx0,或者迭代次数达到最大迭代次数,则结束迭代,将x作为译码输出;否则返回到步骤2)继续迭代。
2.4Min_Sum算法(最小和译码算法)
由于Log-BP算法仍然具有连乘与反三角函数,因此仍然比较复
杂,进而又发展出了Log-Bf算法的近似算法,Min_Sum算法。
最小和译码算法的优点是对LDP(码并行的迭代软译码算法,故其运算比BP算法以及Log-Bp算法都要简单,它仅采用求最小值以及相加运算,而不需要乘法运算。
通过一系列的数学化简与近似运算,可在Log-Bp算法的基础上得到Min_Sum算法的完整表述,Min_Sum算法仅步骤2)与Log-Bp算法不同,其余的步骤均和Log-Bp算法的步骤相同,Min_Sum算法的步骤2)为:
2)校验节点更新:
Uml'ml|叩(监叫1丨(2・13)
lL(m)/l
其中ml'为每一个Vml'的符号,其余步骤及循环、迭代运算均与
Log-Bp算法一致。
三、译码算法的实现
在此选取C语言来实现译码算法,并且采用C与Matlab联调的方式
来验证译码程序的结果,Matlab里完成m文件和script的编写,C语言
与Matlab之间的联调通过Matlab的MEX文件来实现。
译码算法程序流程图:
图3.1译码算法程序流程图
译码程序输入的输入参数为信道接收到的码字,信道高斯噪声方
差以及校验矩阵H,按照以上程序流程运行后返回译码码字,其中MAX为最大迭代次数。
具体的译码程序和Matlab的MEX文件中各函数的定义,调用以及各自的实现方式如下图:
Min_Sum4.c
#include"mex.h"
#include"Min_Sum4_head.h"
VoidMin_Sum4(double,double*){_
Structnode*RDsave(FILL*,int,int)
Structnode*decode(structnode*,structnode*,float)
}
函数
实现
VoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])
{
mexErrMsgTxt("")
mwSizemxGetM(mxArray*)
mwSizemxGetN(mxArray*)
mxArray*mxCreateDoubleMatrix(int,int,mxREAL)double*mxGetPr(mxArray*)
VoidMin_Sum4(double,double*)
}_
#include"Min_Sum4_head.h"
structnode*RDsave(FILE*,int,int)
structnode*Fun_check(structnode*,structnode*);
structnode*Intial(structnode*,structnode*,float);
structnode*Fun_step2(structnode*,structnode*);
structnode*Fun_step3(structnode*,structnode*,structnode*);
structnode*Fun_step4(structnode*,structnode*,structnode*);
structnode*decode(structnode*,structnode*,float);
{
structnode*Fun_check(structnode*,structnode*);
structnode*Intial(structnode*,structnode*,float);
structnode*Fun_step2(structnode*,structnode*);
structnode*Fun_step3(structnode*,structnode*,structnode*);structnode*Fun_step4(structnode*,structnode*,structnode*);
}_
Min_Sum4_head.c
图3.2函数的调用及实现关系图
四、实验仿真结果及分析
4.1仿真结果
在仿真过程中,分别取不同的几个信噪比,对应于每个信噪比取一定数量的传输码字,经过编码、加噪和译码的流程最终得出误码率biterr,并画出对应信噪比误码率biterr的图形。
以Blks和SNR^实验条件,通过变化SNR和相应的Blks来进行仿真,用以衡量LDPC言道编码的性能,其中Blks为对应信噪比所传输的码字数量,SNR^信号与噪声的幅值比,实验图形如下:
图4.1
Blks=[2632226741500200Q]
图4.2
Blks=[26322267415002000];
SNR=[0.850.971.051.151.251.9];
图4.3
Blks=[2632226741500650034500102600];
SNR=[0.850.971.051.151.251.71.92.0];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LDPC 及其 译码 实现