LDPC码论文个人简单整理编写.docx
- 文档编号:30446057
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:12
- 大小:24.83KB
LDPC码论文个人简单整理编写.docx
《LDPC码论文个人简单整理编写.docx》由会员分享,可在线阅读,更多相关《LDPC码论文个人简单整理编写.docx(12页珍藏版)》请在冰豆网上搜索。
LDPC码论文个人简单整理编写
(LDPC码作业)
通信与信息系统
LDPC编码译码方法研究及误码率实现
摘要
低密度奇偶校验LDPC码(Low-DensityParity-Checkcodes)是继Turbo码之后又一种逼近香农极限的信道编码。
相对于Turbo,LDPC码有着诸多的优势,以及更加广阔的应用前景,因此它已经成为编码界当前最热门的研究课题。
本文主要研究了低密度校验码(LDPC码)的编译码方法及不同信噪比下所得到的误码率。
编码通常有高斯消元法、基于近似下三角化的LDPC编码方法和特殊码字LDPC编码方法。
译码通常有消息传递算法、最小和译码算法、比特翻转译码算法等。
Abstract
TheLow-densityparitycheckLDPCcodes(Low-DensityParity-Checkcodesto)isyetanotheraftertheTurbocodesapproachingtheShannonlimitofchannelcoding.RelativetotheTurboandLDPCcodeshavemanyadvantages,aswellasmorebroadapplicationprospects,soithasbecomethecodingcommunityisthemostpopularresearchtopics.Inthispaper,theBERencodinganddecodingmethodsanddifferentsignaltonoiseratiooflowdensityparitycheckcode(LDPCcode).CodingusuallyGaussianeliminationmethod,basedontheapproximatelowertriangularLDPCencodingmethodandspecialcodeword,LDPCencodingmethod.Decodingtypicallymessagepassingalgorithms,beliefpropagationalgorithm,thesmallestanddecoding,bitflippingdecodingalgorithm.
第一章引言
1.1LDPC码介绍
低密度校验码(LDPC码)是一种前向纠错码,它最初在1962年由麻省理工学院的Galfager在其博士论文中提出。
那时候,世界才刚刚脱离真空管,进入第一代晶体管时代,实验仿真所要求的的计算能力并不发达,所以LDPC码无与伦比的潜能没能引起人们的重视,而被长久地忽视了35年。
同一时期,主流的前向纠错技
术是高度结构化的代数分组码和卷积码。
尽管上述这些纠错码技术在实际中获得了巨大的成功,但是它们的性能却远没有达到Shalmon在其1948年发表的开创性论文中所指出的理论可达限。
到了20实际80年代末,经过几十年的尝试,学者们已经接受了这个理论与实际之间无法逾越的鸿沟。
编码学研究经过了相当的一段沉寂之后,被“turbo码”的出现彻底唤醒。
turbo码由B~u,Glavieux和Thitimajshima在1993年提出,它彻底颠覆了所有人们认为成功的纠错码所要具备的因素:
turbo码涉及非常少的代数,运用迭代,分布的算法,专注于平均(而非最差)性能,同时仰赖从信道中获取的软(或者似然)信
息。
一夜之间,在复杂度可控的译码器的协助下,达到Shannon限所要越过的鸿沟已不复存在。
LDPC码不仅蕴含有很高的理论价值,而且已经为卫星数字视频广播标准和长途光通信标准所采纳,还极有可能被吸收入IEEE无线局域网标准中,人们还正在考虑把LDPC码应用到第四代移动电话系统的长期发展规划中。
1.2LDPC码的特点
LDPC码是一种分组码,其校验矩阵只含有很少量非零元素。
正是校验矩阵H的这种稀疏性,保证了译码复杂度和最小码距都只随码长呈现线性增加。
除了校验矩阵H是稀疏矩阵外,LDPC码本身与任何其它的分组码并无二致。
其实如果现有的分组码可以被稀疏矩阵所表达,那么用于LDPC码的迭代译码算法也可以成功的移植到它身上。
然而,一般来说,为现有的分组码找到一个稀疏矩阵并不实际。
不同的是,LDPC码的设计是以构造一个校验矩阵开始的,然后才通过它确定一个生成矩阵进行后续编码。
而LDPC的编码就是本论文所要讨论的主体内容。
译码方法是LDPC码与经典的分组码之间的最大区别。
经典的分组码一般是用ML类的译码算法进行译码的,所以它们一般码长较小,并通过代数设计以减低译码工作的复杂度。
但是LDPC码码长较长,并通过其校验矩阵H的图像表达而进行迭代译码,所以它的设计以校验矩阵H的特性为核心考虑之一。
目前的研究均表明LDPC码是信道编码中纠错能力最强的一种码,而且由于其译码器结构简单,可以用较少的资源消耗获得极高的吞吐量,因此应用前景相当广泛。
1.3LDPC码的历史和现状
LDPC码于1962年由Gallager提出,因此它也被称为Gallager码,它是Turbo码之外的另一种逼近香农极限的码字。
虽然Gallager证明了LDPC码是渐进好码,但是受限于当时的计算能力,LDPC码一度被认为是一种无法实现的信道编码方式,在很长一段时间内没有得到人们的重视。
1981年随着Tanner著作的出现,LDPC码可以用图论的角度进行新的理解和诠释,然而不幸的是这一理论成果依然没有得到人们的重视。
知道90年代初,随着Turbo码的出现,这才引发了学者们对于LDPC码研究的热情。
Mackay和Neal在上世纪九十年代利用随机构造的Tanner图研究了LDPC码的性能,采用BeliefPropagation(BP算法)译码算法的LDPC码字具有与Turbo码相似的译码性能,长的LDPC码在BP译码算法下性能甚至超过了Turbo码,它可以达到距离香农限只有0.1dB的距离。
这个发现是的LDPC码比Turbo码在需要高度可靠性的通信和存储系统纠错中更具有竞争力。
从此以后,有关LDPC码的文献大量涌现。
第二章LDPC码的编码和译码分析
2.1LDPC码的编码方法
2.1.1LDPC码的标准编码方法
设LDPC码的码长为n,信息码长度为k,校验码长度为m=n一k.已经讨论过,校验矩阵H经过高斯消元可以化为:
H=【HIm*m】
其中H:
是尺寸为mxk的二进制矩阵,可以得到:
Imxm是尺寸为m、m的单位矩阵。
于是可以得到:
G=【Ik*kH1】
通过生成矩阵G就可以进行编码。
以下用一个例子说明如何由校验矩阵H得到生成矩阵G.
2.1.2LU分解编码算法
首先推导出根据校验矩阵直接编码的等式。
将尺寸为mxn校验矩阵H写成如下形式:
H=【H1 H2】
其中H1的尺寸为m*k,H2的尺寸为m×m,设编码后的码字行向量为x,它的长度为n,把它写成如下形式:
c=【s p】
其中s是信息码行向量,长度为k,p为校验码行向量,长度为m.根据校验等式有H×cT=O
上式展开得:
展开该矩阵方程,并考虑到运算是在GF
(2)中进行,得到:
p·H2T=s·HT (2.1)
如果校验矩阵H是非奇异,则HZ满秩,所以有:
p=s·HT·HT (2.2)
式(2.1)和式(2.2)就是不通过生成矩阵而直接由校验矩阵进行编码的等式,一切只依赖校验矩阵的编码都是通过这两个式子实现的。
从式(2.1)可以看出,一般来说,只要校验矩阵具有下三角结构,它总是能够通过迭代方法进行编码的。
引入了迭代,就大大降低了编码的复杂度。
LU分解编码算法就是以这个思想为基础的。
2.2 LDPC译码算法
2.2.1消息传递算法:
在消息传递(MessagePassing,MP)算法中,概率信息依据二分图在变量节点和校验节点之间传递,逐步进行迭代译码。
节点沿边发送的信息与上次从接收到的信息无关,而取决于和相连的其它边上接收的信息。
目的在于使得任一条边上,只有外来信息传递,从而保证译码性能。
如果1DPC码对应的二分图中不存在环,则任一节点接受的信息都与从该节点发出的信息无关,从而保证了迭代译码的性能。
如果二分图中存在环,经过一定次数的迭代之后,节点收到的信息将将与其发出的信息存在相关性,这将影响译码算法的性能。
2.2.2最小和译码算法:
最小和(Min一sum)译码算法是根据对数域BP译码算法提出的一种近似简化算法,它利用求最小值的运算简化了函数运算,大大降低了运算复杂度且不需要对信道噪声进行估计,但其性能也有一定程度的降低。
2.2.3比特翻转译码算法:
比特翻转(Bit一Flipping,BF)译码算法首先将输入译码器的数据进行硬判决,然后将得到的“O”、“1”序列代入所有的校验方程,找出使校验方程不成立数目最多的变量节点,最后将该变量节点所对应的比特位翻转,至此完成一次迭代。
整个译码过程不断地进行迭代,直到所有的校验方程都成立或者达到了设定的最大迭代次数。
比特翻转译码算法只进行比特位的翻转等儿种简单的运算,没有复杂的操作,因此非常适合硬件实现,但其性能相对于BP译码算法有所降低,适用于硬件条件受限而性能要求较低的场合。
附一部分关于比特翻转译码仿真程序:
functionvHat=decodeBitFlipping(rx,H,iteration)
%rx:
Receivedsignalvector(columnvector)
%H:
LDPCmatrix
%iteration:
Numberofiteration
%vHat:
Decodedvector(0/1)
[MN]=size(H);
%Priorhard-decision
ci=0.5*(sign(rx')+1);
%Initialization
rji=zeros(M,N);
%Asscociatethecimatrixwithnon-zeroelementsofH
qij=H.*repmat(ci,M,1);
forn=1:
iteration
%-----Horizontalstep-----
fori=1:
M
c1=find(H(i,:
));
fork=1:
length(c1)
rji(i,c1(k))=mod(sum(qij(i,c1))+qij(i,c1(k)),2);
end
end
%------Verticalstep------
forj=1:
N
r1=find(H(:
j));
numOfOnes=length(find(rji(r1,j)));
fork=1:
length(r1)
%Updateqij,set'1'formajorityof1selse'0',excludingr1(k)
ifnumOfOnes+ci(j)>=length(r1)-numOfOnes+rji(r1(k),j)
qij(r1(k),j)=1;
else
qij(r1(k),j)=0;
end
end
ifnumOfOnes+ci(j)>=length(r1)-numOfOnes
vHat(j)=1;
else
vHat(j)=0;
end
end
end
附一部分编码程序:
function[c,newH]=makeParityChk(dSource,H,strategy)
%GenerateparitycheckvectorbasesonLDPCmatrixHusingsparseLUdecomposition
%
%dSource:
Binarysource(0/1)
%H:
LDPCmatrix
%strategy:
Strategyforfindingthenextnon-zerodiagonalelements
%{0}First:
Firstnon-zerofoundbycolumnsearch
%{1}Mincol:
Minimumnumberofnon-zerosinlatercolumns
%{2}Minprod:
Minimumproductof:
%-Numberofnon-zerositscolumnminus1
%-Numberofnon-zerositsrowminus1
%
%c:
Checkbits
%newH:
RearrangeH
%Getthematricdimension
[M,N]=size(H);
%SetanewmatrixFforLUdecomposition
F=H;
%LUmatrices
L=zeros(M,N-M);
U=zeros(M,N-M);
%Re-ordertheMx(N-M)submatrix
fori=1:
M
%strategy{0=First;1=Mincol;2=Minprod}
switchstrategy
%Creatediagonallystructuredmatrixusing'First'strategy
case{0}
%Findnon-zeroelements(1s)forthediagonal
[r,c]=find(F(:
i:
end));
%Findnon-zerodiagonalelementcandidates
rowIndex=find(r==i);
%Findthefirstnon-zerocolumn
chosenCol=c(rowIndex
(1))+(i-1);
%Creatediagonallystructuredmatrixusing'Mincol'strategy
case{1}
%Findnon-zeroelements(1s)forthediagonal
[r,c]=find(F(:
i:
end));
colWeight=sum(F(:
i:
end),1);
%Findnon-zerodiagonalelementcandidates
rowIndex=find(r==i);
%Findtheminimumcolumnweight
[x,ix]=min(colWeight(c(rowIndex)));
%Addoffsettothechosenrowindextomatchthedimensionofthe...
%originalmatrixF
chosenCol=c(rowIndex(ix))+(i-1);
%Creatediagonallystructuredmatrixusing'Minprod'strategy
case{2}
%Findnon-zeroelements(1s)forthediagonal
[r,c]=find(F(:
i:
end));
colWeight=sum(F(:
i:
end),1)-1;
rowWeight=sum(F(i,:
),2)-1;
%Findnon-zerodiagonalelementcandidates
rowIndex=find(r==i);
%Findtheminimumproduct
[x,ix]=min(colWeight(c(rowIndex))*rowWeight);
%Addoffsettothechosenrowindextomatchthedimensionofthe...
%originalmatrixF
chosenCol=c(rowIndex(ix))+(i-1);
otherwise
fprintf('Pleaseselectcolumnsre-orderingstrategy!
\n');
end%switch
%Re-orderingcolumnsofbothHandF
tmp1=F(:
i);
tmp2=H(:
i);
F(:
i)=F(:
chosenCol);
H(:
i)=H(:
chosenCol);
F(:
chosenCol)=tmp1;
H(:
chosenCol)=tmp2;
%FilltheLUmatricescolumnbycolumn
L(i:
end,i)=F(i:
end,i);
U(1:
i,i)=F(1:
i,i);
%Therewillbenorowsoperationatthelastrow
ifi %Findthelaterrowswithnon-zeroelementsincolumni [r2,c2]=find(F((i+1): end,i)); %Addcurrentrowtothelaterrowswhichhavea1incolumni F((i+r2),: )=mod(F((i+r2),: )+repmat(F(i,: ),length(r2),1),2); end%if end%fori %FindB.dsource z=mod(H(: (N-M)+1: end)*dSource,2); %ParitycheckvectorfoundbysolvingsparseLU c=mod(U\(L\z),2); %ReturntherearrangeH newH=H; fprintf('Messageencoded.\n'); 基本仿真结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LDPC 论文 个人 简单 整理 编写