LDPC码编/译码程序设计
要求:
用Matlab编程实现(2016,1008)LDPC码的编码器和译码器,并搭建仿真系统统计误
码性能。
设计内容:
一、LDPC码参数 二、编码器 三、噪声信道 四、译码器
a) 和积算法译码器 b) 最小和算法译码器 c) 修正最小和算法译码器 五、仿真分析
一、 LDPC码参数
本设计采用准循环LDPC码码型(Quasi Cyclic LDPC,QC-LDPC),此种码型性能良好,并有利于硬件实现,现已被各种工业标准所采纳。例如,Wimax标准,DVB-S2标准。具体矩阵请见:Matrix(2016,1008)Block56.mat。具有如下所示的结构:
本设计采用系统码,码长为2016比特,1/2码率,信息序列长度为1008比特。其H矩阵表示如下:
?H1,1??H2,1H??????Hmb,1H1,2H2,2?Hmb,2H1,nb???H2,nb? ?????Hmb,nb???其中Hi,j 是大小为z×z的循环移位矩阵,行重为1,它的值表示该矩阵的循环移位偏移量。例如:Hi,j=n,则表示此矩阵第1行的第n列为1,其余列为0,其余各行均是上
一行的循环移位;如果Hi,j?0,则表明该矩阵是一个全零矩阵。例如Hi,j=4,z=7,则对应的矩阵结构为:
?0??0?0?Hij??0?1??0?0?
001000??000100?000010??000001? 000000??100000?010000??本设计给出的QC-LDPC码,z取56。
由于本设计采用系统码,H矩阵被分为两个部分??Hp|Hs??:
?H1,1??H2,1H??????Hmb,1??H1,kbH2,kbH1,kb?1H2,kb?1?Hmb,kb?1???Hmb,kbH1,nb???H2,nb? ?????Hmb,nb???其中Hp对应校验比特部分,大小为mbz?mbz;Hs对应信息比特部分,大小为
mbz?kbz,其中kb?(nb?mb)z。Hp具有如下规则结构:
?1?1??0?Hp????0??0?0??00a?10?000??1100???????
?100??0110?00?011??00其中Hp右上角a表示的矩阵具有如下结构:
?00?10??01??????0???0????????????00?010??
【注】
1. 上文Hp中的子矩阵‘a’由文档直接给出,不利用循环移位方法计算; 2. 本次作业中的LDPC为系统码,其中校验位在前,信息为在后。
二、 LDPC码编码器
LDPC码属于线性分组码,可以应用线性分组码传统的编码方式进行编码,即利用生成矩阵进行编码。但LDPC码通常用其稀疏校验矩阵(H矩阵)进行定义,把校验矩阵转化成生成矩阵运算量极大。由于LDPC码码长一般较长,校验矩阵较大,就更增加了运算负担。并且转化的生成矩阵并不是稀疏的,这就给硬件实现带来了困难。实际中一般采用校验矩阵直接进行编码,利用公式VH?0(其中,V为编码生成的码字),直接解出码字V。这里在不影响性能的前提下,一般需要特殊结构的校验矩阵,以简化解方程组运算。具体算法如下:
由于采用的是系统码,利用输入信息比特s???s1,s2,?,skbz??,得到校验比特
Tp???p1,p2,?,pmbz??即可完成编码。编码分为如下两个步骤进行:
步骤一:利用输入信息矢量s,计算中间结果x???x1,x2,?,xmbz??:
x?sHsT
步骤二:利用x计算校验比特p,采用如下公式:
?xi,i?1?pi??xi?p(mb?1)z?i?1,1?i?z,其中?表示GF(2)中的加法。
?,i?z?xi?pi?z编码时首先得到第一个校验比特p1?x1,然后依次得到pz?1?xz?1?p1,
p2z?1?x2z?1?pz?1,……,p(mb?1)z?1?x(mb?1)z?1?p(mb?2)z?1,p2?x2?p(mb?1)z?1,……,
pmbz?xmbz?p(mb?1)z。
三、 噪声信道
本设计需要在AWGN信道下进行误码率性能仿真,调制方式采用BPSK调制(0映射