CN102088294B - 一种qc-ldpc编码器及编码方法 - Google Patents
一种qc-ldpc编码器及编码方法 Download PDFInfo
- Publication number
- CN102088294B CN102088294B CN 201010298033 CN201010298033A CN102088294B CN 102088294 B CN102088294 B CN 102088294B CN 201010298033 CN201010298033 CN 201010298033 CN 201010298033 A CN201010298033 A CN 201010298033A CN 102088294 B CN102088294 B CN 102088294B
- Authority
- CN
- China
- Prior art keywords
- matrix
- row
- check
- tanner
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
一种QC-LDPC编码器,其特征在于包括:工作控制模块、输入缓冲模块、生成矩阵存储模块、生成矩阵产生模块和CSRAA模块。同时本发明还提供了一种利用本编码器实现的编码方法。采用本发明可以灵活选择码长和码率,并产生一种译码门限低、错误平层低的QC-LDPC码。
Description
技术领域
本发明涉及一种LDPC编码器及编码方法,特别是涉及一种可以产生译码门限低、错误平层低的准循环QC-LDPC编码器及编码方法。
背景技术
随着深空通信、移动卫星通信等技术的不断发展,低信噪比通信成为通信技术发展的一个重要方向。为了能够可靠的进行通信,高增益的信道编码成为低信噪比通信系统不可或缺的一部分,而Turbo码和LDPC码便是高增益信道编码的典型代表。与Turbo码相比,LDPC码在运算速度、译码门限和错误平层方面都具有明显的优势,成为当前信道编码领域的研究热点。
LDPC码是一种线性分组码,最早由Gallager于1962年提出,但受限于当时的硬件条件,没有引起足够的重视。经过数十年的沉寂,1996年,MacKay和Neal重新发现了它,并证明采用BP迭代译码,LDPC具有逼近Shannon限的性能。LDPC码的重新发现是继Turbo码后,在纠错编码领域又一重大进展。
LDPC码的校验矩阵1元素的个数很少,因此可以说是一个非常稀疏的矩阵。如果LDPC码的校验矩阵的每一列和每一行都有相同的重量(即1的个数相同)称这种LDPC码是规则的,否则称为不规则LDPC码。
对LDPC码编译码方面的研究大体上可以分为两部分的内容:一是校验矩阵的构造方法,另一方面是编译码方法。由于检验矩阵从根本上决定了所构造出的LDPC码的纠错性能,因而校验矩阵的构造方法就显得尤为重要。当校验矩阵对应的Tanner图中存在环路时,环路中码字比特传出去的消息又会回到它本身,这会影响码字比特的判断,从而损害纠错性能。但是,对于有限长度的LDPC码,环路是无法避免的。为了降低环路对纠错性能的影响,构造LDPC码校验矩阵时,应该使环路尽可能大。另外,校验矩阵中相同长度的环路对LDPC码纠错性能的影响是不同的。环路对纠错性能的影响,还与环路和周边节点的连通性有关。环路的连通性越好,对纠错能力的损害越小。因此,对于长度相同的环路,应该优先选择连通性好的。
LDPC码的校验矩阵构造方法可以分为两类:一类是随机构造法,如Xiao-Yu Hu在“Progressive edge-growth Tanner graphs”,MacKay D J C在“Good error correcting codes based on very sparse matrices”,T.Tian等在“Selective avoidance of cycles in irregular LDPC code construction”中提出的均属于这类构造方法。这类方法构造的校验矩阵中0、1是随机分布的,因而使得编码和译码在实现时复杂度较高;另一类是结构化的构造法,如Y.Kou等在“Low-Density Parity-Check Codes Based on Finite Geometries:ARediscovery and New Results”中提出的构造方法,但是该方法的校验矩阵具有某种特殊结构,因此降低了编译码器的实现复杂度。目前实际应用中,大多是具有准循环结构的LDPC码。
文献“Progressive edge-growth Tanner graphs”中提出了一种使局部围长尽可能大的校验矩阵构造方法,称为PEG算法。通过该算法构造的LDPC码具有很好的译码性能,但是该算法构造的校验矩阵是随机结构的。文献“Selective avoidance of cycles in irregular LDPC code construction”经过分析得出,环的连通性是影响LDPC码译码错误平层的关键,并提出了用ACE测度约束构造LDPC码的方法,但是文中给出的算法仍然是用于构造随机结构的LDPC码。几何、代数和组合构造方法是结构化构造法的一个重要分支,用该类方法可以构造出性能非常好的LDPC码,但是在码率和码长上往往无法灵活选择,使其应用受到限制。D.Divsalar等在文献“Construction of ProtographLDPC Codes with Linear Minimum Distance””中提出利用原模图构造LDPC码,所构造出的校验矩阵具有准循环结构,且译码性能优异,但是并没有给出具体的构造方法。在CCSDS 131.1-0-2标准中,近地通信所用的LDPC码是有限域代数方法构造的,而深空通信所用的LDPC码是由原模图构造出来的。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种QC-LDPC编码器及编码方法。本发明克服了几何、代数和组合构造方法在码率和码长选择灵活度方面的不足,以及部分构造方法构造的QC-LDPC码译码门限高、错误平层高的问题。本发明可以在构造QC-LDPC码时灵活的选择码长和码率,既能用来构造非规则QC-LDPC码也能用来构造规则QC-LDPC码。
本发明的技术解决方案是:
一种QC-LDPC编码器,其特征在于包括:工作控制模块、输入缓冲模块、生成矩阵存储模块、生成矩阵产生模块和CSRAA模块;
工作控制模块:在编码时对输入缓冲模块、生成矩阵存储模块和CSRAA模块进行控制;以输入时钟为节拍,控制输入缓冲模块读取输入的信息序列;以工作时钟为节拍,控制生成矩阵存储模块将生成矩阵输出到CSRAA模块,并控制CSRAA模块对信息序列进行校验位编码;接收CSRAA模块输出的校验位序列,并按照信息序列与校验位序列的顺序将编码序列输出;
输入缓冲模块:读取输入的信息序列;对信息序列缓冲后,在进行校验位编码时将信息序列输出到CSRAA模块;在进行信息序列编码时,将信息序列输出到工作控制模块;
生成矩阵产生模块:在编码前产生编码用的生成矩阵,调用预先存储的矩阵BaseMatrix,若BaseMatrix为有重边的矩阵,先进行L倍扩展以取消重边,并得到无重边矩阵HS1,其中L要大于等于有重边的矩阵中的最大重边数;若BaseMatrix为无重边的矩阵或经过L倍扩展后得到的矩阵HS1进行V倍扩展,得到QC-LDPC码的校验矩阵HS2,其中V根据输出的编码长度决定;将校验矩阵HS2转换为生成矩阵G后输出到生成矩阵存储模块;
所述的L倍扩展,是将M*N的有重边矩阵BaseMatrix扩展为(M*L)*(N*L)的无重边矩阵HS1;对HS1赋初值,使HS1为全0的矩阵;以i代表行号,j代表列号,以寄存器cnt从1开始对扩展倍数进行累加计数,以i与j均等于1为起始点,对BaseMatrix按照从上到下从左到右的顺序搜寻BaseMatrix中的每个元素,并利用寄存器e对当前元素进行暂存;对e中的值进行判断,如果为BaseMatrix中列的首个非0元素,则找出HS1中第(i-1)*L+1到i*L行中行重最小的行,记行号为k,并对HS1中第k行,第(j-1)*L+cnt的元素赋值为1,然后对e中值减1继续判断是否为0,如果不为0,则对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1的Tanner展开图中包含了(i-1)*L+1行到i*L行的全部校验节点或无法继续展开;若HS1中的从(i-1)*L行到i*L行的校验节点全部进入了HS1的Tanner展开图,则对HS1中以从(i-1)*L行到i*L行中选择最后进入HS1的Tanner展开图的校验节点所代表的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;若HS1中的从(i-1)*L行到i*L行的校验节点未全部进入了HS1的Tanner展开图,则对HS1中以HS1中选择未进入HS1的Tanner展开图的校验节点中行重最小的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;再此对e中值减1判断是否为0,如果不为0,则重新对HS1中从变量接点(j-1)*L+cnt开始进行Tanner图展开操作;如果非BaseMatrix中列的首个非0元素,对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1中包含了(i-1)*L行到i*L行的全部校验节点或无法继续展开,然后在HS1第(i-1)*L+1行到第i*L行中选择未进行Tanner图展开操作或最后进行Tanner图展开操作的校验节点中行重最小的校验节点,对以行重值为行,以(j-1)*L+cnt列的元素值赋值为1,并利用寄存器e对当前元素进行暂存,循环进行Tanner图展开操作直到对e中值减1后为0;所述的变量节点与每一列相对应;所述的校验节点与每一行相对应;所述的Tanner图为与矩阵对应图表示;
所述的V倍扩展,是将输入的(M*L)*(N*L)的无重边矩阵HS1扩展为(M*L*V)*(N*L*V)的校验矩阵HS2或将输入的M*N的无重边矩阵BaseMatrix扩展为(M*V)*(N*V)的校验矩阵HS2;对HS2赋初值,使HS2为所有元素都等于-1的矩阵;以i代表行号,j代表列号,以i与j均等于1为起始点,对输入矩阵按照从上到下从左到右的顺序搜索;若为输入矩阵每列的首个非零元素,对HS2中对当前i行和j列对应的元素赋予0到V-1中的一个随机值,所述的随机值用于表示一个V*V的置换矩阵的偏移量,所述的置换矩阵为单位矩阵根据偏移量的循环移位后得到的矩阵;对于非列中的首个非零元素,在HS2中对当前i行和j列的对应的元素赋0到V-1中的一个随机值,再搜索不同偏移量下HS2中所有以变量节点j为起点和终点的环路,选择环路中的最小环长和最小ACE测度均为最大时的偏移量给HS2中当前行和j列的元素赋值;搜索完成后,将HS2中的-1元素用V*V的零矩阵替换,非-1元素用V*V的置换矩阵替换,产生校验矩阵HS2;
生成矩阵存储模块:存储由生成矩阵产生模块产生的生成矩阵并在工作控制模块控制下在编码时将生成矩阵输出到CSRAA模块;
CSRAA模块:利用输入的生成矩阵对信息序列进行校验位编码,并将校验位序列输出到工作控制模块。
所述的输入缓冲模块采用先入先出的队列对信息序列进行缓冲。
所述的生成矩阵存储模块只存储输入的生成矩阵中每个子块的第一行或第一列,并根据生成矩阵的准循环特性每次将生成矩阵中的值移位输出。
所述的CSRAA模块由CSRAA单元组成,CSRAA单元单元的个数由编码序列的校验位数决定;所述的CSRAA单元由反馈移位寄存器和与门、异或门组成。
一种QC-LDPC编码方法,其特征在于通过以下步骤实现:
步骤1:构造生成矩阵:
1.1、选取原模图矩阵BaseMatrix,检测BaseMatrix是否存在重边,若有重边,则转入步骤1.2;若无重边,则转入步骤1.3;
1.2、对BaseMatrix进行L倍扩展,其中L要大于等于有重边的原模图矩阵中的最大重边数:
将M*N的有重边矩阵BaseMatrix扩展为(M*L)*(N*L)的无重边矩阵HS1;对HS1赋初值,使HS1为全0的矩阵;以i代表行号,j代表列号,以寄存器cnt从1开始对扩展倍数进行累加计数,以i与j均等于1为起始点,对BaseMatrix按照从上到下从左到右的顺序搜寻BaseMatrix中的每个元素,并利用寄存器e对当前元素进行暂存;对e中的值进行判断,如果为BaseMatrix中列的首个非0元素,则找出HS1中第(i-1)*L+1到i*L行中行重最小的行,记行号为k,并对HS1中第k行,第(j-1)*L+cnt的元素赋值为1,然后对e中值减1继续判断是否为0,如果不为0,则对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1的Tanner展开图中包含了(i-1)*L+1行到i*L行的全部校验节点或无法继续展开;若HS1中的从(i-1)*L行到i*L行的校验节点全部进入了HS1的Tanner展开图,则对HS1中以从(i-1)*L行到i*L行中选择最后进入HS1的Tanner展开图的校验节点所代表的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;若HS1中的从(i-1)*L行到i*L行的校验节点未全部进入了HS1的Tanner展开图,则对HS1中以HS1中选择未进入HS1的Tanner展开图的校验节点中行重最小的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;再此对e中值减1判断是否为0,如果不为0,则重新对HS1中从变量接点(j-1)*L+cnt开始进行Tanner图展开操作;如果非BaseMatrix中列的首个非0元素,对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1中包含了(i-1)*L行到i*L行的全部校验节点或无法继续展开,然后在HS1第(i-1)*L+1行到第i*L行中选择未进行Tanner图展开操作或最后进行Tanner图展开操作的校验节点中行重最小的校验节点,对以行重值为行,以(j-1)*L+cnt列的元素值赋值为1,并利用寄存器e对当前元素进行暂存,循环进行Tanner图展开操作直到对e中值减1后为0;所述的变量节点与每一列相对应;所述的校验节点与每一行相对应;所述的Tanner图为与矩阵对应图表示;
1.3、对无重边的BaseMatrix或经过步骤1.2后的HS1进行V倍扩展:
将输入的(M*L)*(N*L)的无重边矩阵HS1扩展为(M*L*V)*(N*L*V)的校验矩阵HS2或将输入的M*N的无重边矩阵BaseMatrix扩展为(M*V)*(N*V)的校验矩阵HS2;对HS2赋初值,使HS2为所有元素都等于-1的矩阵;以i代表行号,j代表列号,以i与j均等于1为起始点,对输入矩阵按照从上到下从左到右的顺序搜索;若为输入矩阵每列的首个非零元素,对HS2中对当前i行和j列对应的元素赋予0到V-1中的一个随机值,所述的随机值用于表示一个V*V的置换矩阵的偏移量,所述的置换矩阵为单位矩阵根据偏移量的循环移位后得到的矩阵;对于非列中的首个非零元素,在HS2中对当前i行和j列的对应的元素赋0到V-1中的一个随机值,再搜索不同偏移量下HS2中所有以变量节点j为起点和终点的环路,选择环路中的最小环长和最小ACE测度均为最大时的偏移量给HS2中当前行和j列的元素赋值;搜索完成后,将HS2中的-1元素用V*V的零矩阵替换,非-1元素用V*V的置换矩阵替换,产生校验矩阵HS2;转入步骤1.4;
1.4、利用步骤1.3生成的HS2产生生成矩阵G,然后转入步骤2;
步骤2、利用步骤1产生的生成矩阵对信息序列进行QC-LDPC编码后输出。
本发明与现有技术相比具有如下优点:
(1)本发明提出的构造方法可以根据实际需要灵活选择码长和码率。码长和码率在实际应用中往往是灵活多变的,以往的许多QC-LDPC码构造方法,无法灵活选择,而本发明弥补了此点不足。
(2)采用本发明构造的LDPC码低译码门限、低错误平层。码低译码门限与低错误平层是衡量LDPC码性能的两个重要指标,本发明在构造LDPC校验矩阵的过程中,综合考虑环长和环的连通性,因而使构造出的LDPC码在译码门限和错误平层两方面均显示出良好的性能。
附图说明
图1为本发明编码器结构图;
图2为CSRAA单元结构图;
图3为第一步扩展流程图;
图4为第二步扩展流程图;
图5为ARJ4A原模图;
图6到图15为实施例过程图;
图16为任意给定矩阵与矩阵对应的Tanner图。
具体实施方式
一、基本概念
1、Tanher图
Tanner图是一种双向图,可以用G={(V,E)}表示,其中V是节点的集合,V=Vb∪Vc。对于维数为M*N的校验矩阵,Vb=(v0,v1,…,vN-1)称为变量节点,对应校验矩阵的列,同时对应于码字中的比特位;Vb=(c0,c1,…,cM-1)称为校验节点,对应于校验矩阵的行,同时对应于校验关系。E是节点之间相连的边的集合,同类节点之间没有边相连,只有两类节点之间存在边。
2、环长
如果校验矩阵第i行、第j列元素是非零的,则Tanner图中第i变量节点和第j个校验节点有一条边相连。与节点相连的边数目称为节点的度(Degree);从某个节点出发又回到该节点为一个环路(Cycle),所经过的边的个数称为环长。
3、ACE测度
一个长度为2d的环的ACE测度定义为∑i(di-2),其中di是变量节点i的度数。如图16所示,显示了一个长度为6的环(v0-c0-v4-c1-v6-c5-v0),其中v0、v4和v6是环上的变量节点,度数分别为2、3、3,该环路的ACE测度为(2-2)+(3-2)+(3-2),等于2。
二、关键模块介绍
如图1所示,为本发明中QC-LDPC编码器的结构图。包括工作控制模块、输入缓冲模块、生成矩阵存储模块、生成矩阵产生模块和CSRAA模块。各模块间的连接关系如图中示。
1、工作控制模块
工作控制模块为编码器的主控模块,负责在编码时对输入缓冲模块、生成矩阵存储模块和CSRAA模块进行调度。在编码过程中,以输入时钟为节拍控制输入缓冲模块读取输入的信息序列;以工作时钟为节拍,控制输入缓冲模块将输入的信息序列输出到CSRAA模块,以及控制生成矩阵存储模块进行移位将生成矩阵输出到CSRAA模块;控制CSRAA模块利用生成矩阵对信息序列进行校验位编码,并在编码完成后,对编码序列进行输出门限控制并输出。
工作控制模块根据时钟源产生的工作时钟协调整个编码器模块的编码速率。以工作时钟为节拍所进行的操作包括:输入缓冲模块向CSRAA模块输出信息序列的速率;生成矩阵存储模块向CSRAA模块输出生成矩阵的速率。
同时,工作控制模块还对CSRAA模块输出的校验位序列进行时序控制,按照先信息位后校验位的顺序将编码输出。
2、输入缓冲模块
输入缓冲模块的主要作用在于对输入的信息序列进行缓冲。在工作控制模块允许数据输入时,信息序列按数据输入时钟逐比特写入输入缓冲模块的缓存中,写满一段数据后,触发CSRAA模块开始工作。然后,按工作时钟从缓存中逐比特读出数据,送入CSRAA模块。在最终产生编码时,将信息序列输出到工作控制模块,由工作控制模块进行时序控制输出。
输入的数据进入输入缓冲模块后以FIFO(First In First Out,先入先出)队列的形式进行排队。
3、生成矩阵产生模块
生成矩阵产生模块是负责产生编码用的生成矩阵,生成矩阵的性能决定了码的性能。采用本发明的生成矩阵模块可以生成用于构造规则LDPC码或者非规则LDPC码的生成矩阵。
生成矩阵的产生过程从原模图矩阵(关于原模图的相关知识可详见参考文献J Thorpe,《Low-Density Parity-Check(LDPC)Codes Constructed fromProtographs》,与D.Divsalar,《Construction of Protograph LDPC Codes withLinear Minimum Distance》)的选择开始。
对于有重边的原模图需要进行两步扩展操作(L倍扩展和V倍扩展),而对于无重边的原模图矩阵只需要进行V倍扩展。通过扩展操作后可产生本发明编码器的校验矩阵,通过校验矩阵便求得生成矩阵。
对于存在重边的原模图矩阵,首先进行L倍扩展的基本方法为:以至少为最大重边数为扩展倍数确定L,则扩展得到的校验矩阵其列和行数均变成原模图矩阵的L倍,也就是说其校验节点和变量节点个数都变成原来的L倍,其中校验节点与每行相对应;变量节点与每列相对应。在扩展过程中尽最大可能增大局部围长。同时,为了保持原模图的特性不发生改变,在原模图矩阵中对应于原模图的边只能在同类型节点之间置换。如图3所示,为L倍扩展的流程图。
经过L倍扩展后,产生的矩阵已经不存在重边,但仍然是一个0、1随机分布的小矩阵。然后,需要进行V倍扩展。对于不存在重边的原模图矩阵则直接进行V倍扩展。V倍扩展的目的在于:产生一个具有准循环结构的校验矩阵。扩展的基本方法为:以矩阵左上角元素为矩阵的首元素,从左到右、从上到下依次对矩阵中的每个元素尝试所有可能置换矩阵偏移量值。对于每个偏移量,搜索计算当前的最小环长和最小ACE测度,选择最小环长最大条件下最小ACE测度最大的偏移量作为该子矩阵最终的偏移量。如图4所示,为V倍扩展的流程图。其中,cycle_p用于存储最小环长;ACE_p用于存储最小ACE测度。
经过L倍和V倍扩展后,存在重边的原模图矩阵可以得到一个QC-LDPC码校验矩阵的偏移量矩阵。利用校验矩阵可直接生成编码用的生成矩阵,然后输出给生成矩阵存储模块。
4、生成矩阵存储模块
生成矩阵存储模块是为CSRAA模块提供生成矩阵。对于QC-LDPC码来说,其生成矩阵同样具有准循环结构。因此,在具体实现时,只需要存储生成矩阵中每个子块的第一行或第一列,从而可以节省相应的存储空间。
根据生成矩阵的准循环特性,存储生成矩阵中每个子块的第一行或第一列,在工作控制模块的控制下,按照当前存储的生成矩阵结构,将生成矩阵移位输出到CSRAA模块。
5、CSRAA模块
CSRAA模块为实现编码的核心模块,CSRAA是移位-取与-累加-寄存的英文首字母,是用于实现移位-取与-累加-寄存的功能模块。CSRAA模块由CSRAA单元组成,CSRAA单元用于存储校验位,每一段校验位对应一个CSRAA单元,CSRAA单元的数量由校验位的长度决定。
假定构造了一个大小为cb×tb的校验矩阵,则其对应的生成矩阵大小为(t-c)b×tb,令生成矩阵为Gqc。其中每个子矩阵Gi,j,其中1≤i≤t-c,1≤j≤c大小为b×b。将信息序列以(t-c)b比特为单位分段,每段信息序列为A=(A1,A2,…A(t-c)),其中Ai=(a(i-1)+1,a(i-1)+2,…,aib),其中1≤i≤t-c,那么该段信息序列所对应的编码序列如式(1)所示,
x=A·Gqc=(A,P)=(A,P1,P2,…,Pc) (1)
其中,校验比特块Pj=(p(j-1)b+1,p(j-1)b+2,…,pjb),1≤j≤c。对于校验块Pj如式(2)所示:
Pj=A1G1,j+A2G2,j+…+At-cGt-c,j (2)
上式中AiGi,j,1≤i≤t-c的计算,如式(3)所示,
从上面的推导过程可以得出校验块Pj,1≤j≤c的计算过程如下:
第1步:根据式(3)计算得到A1G1,j并存入寄存器;
第2步:由式(3)计算得到A2G2,j,将A2G2,j与寄存器内容求和,得到S2,j=A1G1,j+A2G2,j,将S2,j存入寄存器;如此继续,第i步(1≤i≤t-c),由式(3)计算得到AiGi,j,将AiGi,j与寄存器内容求和,得到Si,j=A1G1,j+A2G2,j+…+AiGi,j,将Si,j存入寄存器;随着信息序列A连续进入编码器,在第t-c步,得到St-c,j=A1G1,j+A2G2,j+…+At-cGt-c,j,St-c,j便是校验块Pj。
如图2所示,为CSRAA单元的结构图。CSRAA单元由4个长度为b的反馈移位寄存器和与门、异或门组成。根据此CSRAA单元的结构图,CSRAA模块的工作流程为:
(1)将长度为b(b即为所构造校验矩阵每子矩阵的长度)的反馈移位寄存器B1、B2、C1、C2全部清零;
(2)将生成系数g1,j,1≤j≤c,导入每个CSRAA单元的寄存器B1中。当b比特生成系数全部导入B1后,生成器g2,j,1≤j≤c开始逐比特导入B2中,同时信息序列开始逐比特进入每个CSRAA单元,为便于说明,令信息序列为A1;
(3)当信息位a1进入时,其与寄存器B1中内容经与门输出 存于寄存器C1中。当信息位a2进入时,寄存器B1循环右移一位,a2同B1中内容经与门输出为然后累加到C1中。这一过程持续进行,当信息位ab进入编码器时,寄存器C1中为
(4)当整个信息序列A1完成移位-取与-累加-寄存全过程时,生成器g2,j刚好全部导入B2中,B2开始逐步循环移位,生成器g3,j开始逐比特导入B1中,同时信息序列A2开始逐比特进入编码器,A2同B2逐比特经过移位-取与-累加-寄存全过程。当整个信息序列A2完成移位-取与-累加-寄存全过程,C1中内容为Si,j=A1G1,j+A2G2,j。上述过程持续进行,直到该段信息序列全部进入编码器,此时C1中内容为St-c,j=A1G1,j+A2G2,j+…+At-cGt-c,j,St-c,j便是校验块Pj。
完成上述编码后,c个CSRAA单元寄存器C1中的内容便构成了编码序列的校验部分(P1,P2,…,Pc),该内容逐比特移位输出并不断清零。在第一段信息序列A全部进入编码器后,第二段信息序列接着逐比特进入编码器,重复上述编码过程,。对于连续信息序列,通过寄存器B1、B2交替导入和寄存器C1、C2交替循环导出,完成连续编码。
三、实施例
下面就结合具体的实例对本发明中关键步骤利用L倍和V倍扩展产生校验矩阵的过程进一步说明。
如图5所示,以ARJ4A为原模图构造一个码长2048、码率1/2的QC-LDPC码。按步骤对整个构造过程进行描述如下:
步骤1:由1/2码率ARJ4A原模图获取基础矩阵BaseMatrix,
步骤2:对BaseMatrix进行L倍扩展去除重边,扩展因子L取4(大于等于原模图中的最大重边数3即可),则对应的Hs1大小为12*20。从上到下、从左向右对BaseMatrix的每个元素进行扩展,将扩展结果存于Hs1中。假设对基础矩阵的第2列进行第一次处理,此时Hs1可能的结果见图6,其中,C表示校验节点,V表示变量节点,与C、V相连的数字分别表示对应的行号、列号)。扩展过程描述如下:
1、BaseMatrix(2,2)是该列的首个非零元,从Hs1的变量节点C5~C8中选择一个行重最小的(此时均为1,随机选择一个,比如5),令Hs1(5,5)=1。此时,BaseMatrix如图7所示。
2、接着处理下一个元素。BaseMatrix(3,2)不是该列的首个非零元,从变量节点V5开始对Hs1进行Tanner展开,展开过程如下:如图8所示,此时除V1,已经没有其它与C9相连的变量节点,则展开终止。校验节点C9~C12中,C10~C12都没有加入展开图,且第10~12行行重相等,随机选择一个,比如令Hs1(10,5)=1。此时Hs1如图9所示。其中,BaseMatrix(3,2)为2,故还需要在Hs1第5列的第9~12行中增加一个1元素。此时仍然从变量节点V5开始对Hs1进行Tanner展开,展开过程如下:如图10所示,此时,展开无法继续。校验节点C9~C12中,C11和C12都没有加入展开图,且第11、12行行重相等,随机选择一个,比如令Hs1(11,5)=1。
1、BaseMatrix第2列的所有元素已经处理完一次,但扩展因子为4,故还需要对第2列进行第2次处理。从BaseMatrix第2列第1行开始进行处理,处理过程同上,不同的是处理结果放入Hs1的下一列。如此往复,直到对BaseMatrix第2列处理完4次;
2、然后处理BaseMatrix的下一列元素。当处理完BaseMatrix的所有元素后,输出Hs1,可能的结果如图11所示。
步骤3:对Hs1进行V倍扩展,扩展因子V为128。从上到下、从左向右对Hs1的每个元素进行扩展,将扩展结果存于Hs2中。假设Hs1的前5列已经完成扩展,Hs2可能的结果见图12,
现在对第6列进行扩展,扩展过程描述如下:
1、Hs1(6,6)是该列的首个非零元素,从0~V-1从随机选择一个整数(比如11)作为该元素对应的Hs2中子矩阵的偏移量,令Hs2(6,6)=11,此时Hs2如图13所示。
2、接着处理下一个元素。Hs1(9,6)不是该列的首个非零元素,需要进行环搜索。依次令Hs2(9,6)取遍0~V-1的所有整数,搜索每一个取值时Hs2中所有以(9,6)为起点和终点的环路,并计算其环长和ACE值。比如Hs2(9,6)取0时,存在如图14所示环路,且(0-32+5-14+36-2+9-11)≠0(mod 128),故环长为8*128=1024。又环路上变量节点V1、V2、V5、V6在Hs1中的列重分别为2、2、3、3,故该环路的ACE值为[(2-2)+(2-2)+(3-2)+(3-2)]*128=256。又比如Hs2(9,6)取9时,存在如图15所示环路,且(9-32+5-14+36-2+9-11)=0(mod 128),故环长为8。又环路上变量节点V1、V2、V5、V6在Hs1中的列重分别为2、2、3、3,故该环路的ACE值为(2-2)+(2-2)+(3-2)+(3-2)=2。Hs2(9,6)每取一个值时,都存在一个最小环长和最小ACE值。统计Hs2(9,6)的所有取值中,最短环长和最小ACE值均相对大的,作为Hs2(9,6)的最终取值;
3、按照前两步描述,处理Hs1的下一个元素。当处理完Hs1的所有元素后,算法终止,输出Hs2。
步骤4:将矩阵Hs2中元素-1用V*V的零矩阵替换、非-1元素X(0≤X≤V-1)用相应的V*V置换矩阵(单位矩阵向右循环移位X位)替换,便得到最终的校验矩阵。
本发明未详细说明部分属本领域技术人员公知常识。
Claims (5)
1.一种QC-LDPC编码器,其特征在于包括:工作控制模块、输入缓冲模块、生成矩阵存储模块、生成矩阵产生模块和CSRAA模块;
工作控制模块:在编码时对输入缓冲模块、生成矩阵存储模块和CSRAA模块进行控制;以输入时钟为节拍,控制输入缓冲模块读取输入的信息序列;以工作时钟为节拍,控制生成矩阵存储模块将生成矩阵输出到CSRAA模块,并控制CSRAA模块对信息序列进行校验位编码;接收CSRAA模块输出的校验位序列,并按照信息序列与校验位序列的顺序将编码序列输出;
输入缓冲模块:读取输入的信息序列;对信息序列缓冲后,在进行校验位编码时将信息序列输出到CSRAA模块;在进行信息序列编码时,将信息序列输出到工作控制模块;
生成矩阵产生模块:在编码前产生编码用的生成矩阵,调用预先存储的矩阵BaseMatrix,若BaseMatrix为有重边的矩阵,先进行L倍扩展以取消重边,并得到无重边矩阵HS1,其中L要大于等于有重边的矩阵中的最大重边数;若BaseMatrix为无重边的矩阵或经过L倍扩展后得到的矩阵HS1进行V倍扩展,得到QC-LDPC码的校验矩阵HS2,其中V根据输出的编码长度决定;将校验矩阵HS2转换为生成矩阵G后输出到生成矩阵存储模块;
所述的L倍扩展,是将M*N的有重边矩阵BaseMatrix扩展为(M*L)*(N*L)的无重边矩阵HS1;对HS1赋初值,使HS1为全0的矩阵;以i代表行号,j代表列号,以寄存器cnt从1开始对扩展倍数进行累加计数,以i与j均等于1为起始点,对BaseMatrix按照从上到下从左到右的顺序搜寻BaseMatrix中的每个元素,并利用寄存器e对当前元素进行暂存;对e中的值进行判断,如果为BaseMatrix中列的首个非0元素,则找出HS1中第(i-1)*L+1到i*L行中行重最小的行,记行号为k,并对HS1中第k行,第(j-1)*L+cnt的元素赋值为1,然后对e中值减1继续判断是否为0,如果不为0,则对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1的Tanner展开图中包含了(i-1)*L+1行到i*L行的全部校验节点或无法继续展开;若HS1中的从(i-1)*L行到i*L行的校验节点全部进入了HS1的Tanner展开图,则对HS1中以从(i-1)*L行到i*L行中选择最后进入HS1的Tanner展开图的校验节点所代表的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;若HS1中的从(i-1)*L行到i*L行的校验节点未全部进入了HS1的Tanner展开图,则对HS1中以HS1中选择未进入HS1的Tanner展开图的校验节点中行重最小的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;再此对e中值减1判断是否为0,如果不为0,则重新对HS1中从变量接点(j-1)*L+cnt开始进行Tanner图展开操作;如果非BaseMatrix中列的首个非0元素,对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1中包含了(i-1)*L行到i*L行的全部校验节点或无法继续展开,然后在HS1第(i-1)*L+1行到第i*L行中选择未进行Tanner图展开操作或最后进行Tanner图展开操作的校验节点中行重最小的校验节点,对以行重值最小的行为行号,以(j-1)*L+cnt列的元素值赋值为1,并利用寄存器e对当前元素进行暂存,循环进行Tanner图展开操作直到对e中值减1后为0;所述的变量节点与每一列相对应;所述的校验节点与每一行相对应;所述的Tanner图为与矩阵对应图表示;
所述的V倍扩展,是将输入的(M*L)*(N*L)的无重边矩阵HS1扩展为(M*L*V)*(N*L*V)的校验矩阵HS2或将输入的M*N的无重边矩阵BaseMatrix扩展为(M*V)*(N*V)的校验矩阵HS2;对HS2赋初值,使HS2为所有元素都等于-1的矩阵;以i代表行号,j代表列号,以i与j均等于1为起始点,对输入矩阵按照从上到下从左到右的顺序搜索;若为输入矩阵每列的首个非零元素,对HS2中对当前i行和j列对应的元素赋予0到V-1中的一个随机值,所述的随机值用于表示一个V*V的置换矩阵的偏移量,所述的置换矩阵为单位矩阵根据偏移量的循环移位后得到的矩阵;对于非列中的首个非零元素,在HS2中对当前i行和i列的对应的元素赋0到V-1中的一个随机值,再搜索不同偏移量下HS2中所有以变量节点j为起点和终点的环路,选择环路中的最小环长和最小ACE测度均为最大时的偏移量给HS2中当前行和j列的元素赋值;搜索完成后,将HS2中的-1元素用V*V的零矩阵替换,非-1元素用V*V的置换矩阵替换,产生校验矩阵HS2;
生成矩阵存储模块:存储由生成矩阵产生模块产生的生成矩阵并在工作控制模块控制下在编码时将生成矩阵输出到CSRAA模块;
CSRAA模块:利用输入的生成矩阵对信息序列进行校验位编码,并将校验位序列输出到工作控制模块。
2.根据权利要求1所述的一种QC-LDPC编码器,其特征在于:所述的输入缓冲模块采用先入先出的队列对信息序列进行缓冲。
3.根据权利要求1所述的一种QC-LDPC编码器,其特征在于:所述的生成矩阵存储模块只存储输入的生成矩阵中每个子块的第一行或第一列,并根据生成矩阵的准循环特性每次将生成矩阵中的值移位输出。
4.根据权利要求1所述的一种QC-LDPC编码器,其特征在于:所述的CSRAA模块由CSRAA单元组成,CSRAA单元单元的个数由编码序列的校验位数决定;所述的CSRAA单元由反馈移位寄存器和与门、异或门组成。
5.一种QC-LDPC编码方法,其特征在于通过以下步骤实现:
步骤1:构造生成矩阵:
1.1、选取原模图矩阵BaseMatrix,检测BaseMatrix是否存在重边,若有重边,则转入步骤1.2;若无重边,则转入步骤1.3;
1.2、对BaseMatrix进行L倍扩展,其中L要大于等于有重边的原模图矩阵中的最大重边数:
将M*N的有重边矩阵BaseMatrix扩展为(M*L)*(N*L)的无重边矩阵HS1;对HS1赋初值,使HS1为全0的矩阵;以i代表行号,j代表列号,以寄存器cnt从1开始对扩展倍数进行累加计数,以i与j均等于1为起始点,对BaseMatrix按照从上到下从左到右的顺序搜寻BaseMatrix中的每个元素,并利用寄存器e对当前元素进行暂存;对e中的值进行判断,如果为BaseMatrix中列的首个非0元素,则找出HS1中第(i-1)*L+1到i*L行中行重最小的行,记行号为k,并对HS1中第k行,第(j-1)*L+cnt的元素赋值为1,然后对e中值减1继续判断是否为0,如果不为0,则对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1的Tanner展开图中包含了(i-1)*L+1行到i*L行的全部校验节点或无法继续展开;若HS1中的从(i-1)*L行到i*L行的校验节点全部进入了HS1的Tanner展开图,则对HS1中以从(i-1)*L行到i*L行中选择最后进入HS1的Tanner展开图的校验节点所代表的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;若HS1中的从(i-1)*L行到i*L行的校验节点未全部进入了HS1的Tanner展开图,则对HS1中以HS1中选择未进入HS1的Tanner展开图的校验节点中行重最小的行为行号,以(j-1)*L+cnt为列号的元素赋值为1;再此对e中值减1判断是否为0,如果不为0,则重新对HS1中从变量接点(j-1)*L+cnt开始进行Tanner图展开操作;如果非BaseMatrix中列的首个非0元素,对HS1从变量节点(j-1)*L+cnt开始进行Tanner图展开的操作,直到HS1中包含了(i-1)*L行到i*L行的全部校验节点或无法继续展开,然后在HS1第(i-1)*L+1行到第i*L行中选择未进行Tanner图展开操作或最后进行Tanner图展开操作的校验节点中行重最小的校验节点,对以行重值最小的行为行号,以(j-1)*L+cnt列的元素值赋值为1,并利用寄存器e对当前元素进行暂存,循环进行Tanner图展开操作直到对e中值减1后为0;所述的变量节点与每一列相对应;所述的校验节点与每一行相对应;所述的Tanner图为与矩阵对应图表示;
1.3、对无重边的BaseMatrix或经过步骤1.2后的HS1进行V倍扩展:
将输入的(M*L)*(N*L)的无重边矩阵HS1扩展为(M*L*V)*(N*L*V)的校验矩阵HS2或将输入的M*N的无重边矩阵BaseMatrix扩展为(M*V)*(N*V)的校验矩阵HS2;对HS2赋初值,使HS2为所有元素都等于-1的矩阵;以i代表行号,j代表列号,以i与j均等于1为起始点,对输入矩阵按照从上到下从左到右的顺序搜索;若为输入矩阵每列的首个非零元素,对HS2中对当前i行和j列对应的元素赋予0到V-1中的一个随机值,所述的随机值用于表示一个V*V的置换矩阵的偏移量,所述的置换矩阵为单位矩阵根据偏移量的循环移位后得到的矩阵;对于非列中的首个非零元素,在HS2中对当前i行和j列的对应的元素赋0到V-1中的一个随机值,再搜索不同偏移量下HS2中所有以变量节点j为起点和终点的环路,选择环路中的最小环长和最小ACE测度均为最大时的偏移量给HS2中当前行和j列的元素赋值;搜索完成后,将HS2中的-1元素用V*V的零矩阵替换,非-1元素用V*V的置换矩阵替换,产生校验矩阵HS2;转入步骤1.4;
1.4、利用步骤1.3生成的HS2产生生成矩阵G,然后转入步骤2;
步骤2、利用步骤1产生的生成矩阵对信息序列进行QC-LDPC编码后输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010298033 CN102088294B (zh) | 2010-09-29 | 2010-09-29 | 一种qc-ldpc编码器及编码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010298033 CN102088294B (zh) | 2010-09-29 | 2010-09-29 | 一种qc-ldpc编码器及编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102088294A CN102088294A (zh) | 2011-06-08 |
CN102088294B true CN102088294B (zh) | 2013-03-13 |
Family
ID=44099928
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010298033 Active CN102088294B (zh) | 2010-09-29 | 2010-09-29 | 一种qc-ldpc编码器及编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102088294B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103220002B (zh) * | 2012-01-18 | 2016-11-09 | 北京大学 | 一种消除译码器访问冲突的准循环ldpc码构造方法 |
CN105356968B (zh) * | 2015-06-24 | 2018-11-16 | 深圳大学 | 基于循环置换矩阵的网络编码的方法及系统 |
CN110073618B (zh) * | 2016-12-13 | 2020-12-15 | 华为技术有限公司 | 产生用于增量冗余harq通信装置的低密度奇偶校验码的设备和方法 |
CN108390676A (zh) * | 2017-12-27 | 2018-08-10 | 重庆邮电大学 | 一种结合等差数列与原模图的qc-ldpc码新颖构造方法 |
CN108170556A (zh) * | 2018-01-18 | 2018-06-15 | 江苏华存电子科技有限公司 | 纠错码生成与校验矩阵的保护方法及矩阵存储/产生装置 |
CN109768801B (zh) * | 2018-12-26 | 2023-02-03 | 深圳市力合微电子股份有限公司 | 一种qc-ldpc码的长短环通用查找方法 |
CN111313910B (zh) * | 2019-11-19 | 2021-12-07 | 天津大学 | 空间通信应用的低密度奇偶校验码编码器装置 |
CN113300717B (zh) * | 2021-05-19 | 2022-06-10 | 西南交通大学 | 一种基于码率自适应的高效化ldpc编码器电路 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350625A (zh) * | 2007-07-18 | 2009-01-21 | 北京泰美世纪科技有限公司 | 一种高效通用的qc-ldpc码译码器及其译码方法 |
CN101399553A (zh) * | 2008-11-12 | 2009-04-01 | 清华大学 | 一种可在线编程的准循环ldpc码编码器装置 |
CN101488761A (zh) * | 2009-02-27 | 2009-07-22 | 北京交通大学 | 一种无短环无低码重码的ldpc码构造方法 |
-
2010
- 2010-09-29 CN CN 201010298033 patent/CN102088294B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350625A (zh) * | 2007-07-18 | 2009-01-21 | 北京泰美世纪科技有限公司 | 一种高效通用的qc-ldpc码译码器及其译码方法 |
CN101399553A (zh) * | 2008-11-12 | 2009-04-01 | 清华大学 | 一种可在线编程的准循环ldpc码编码器装置 |
CN101488761A (zh) * | 2009-02-27 | 2009-07-22 | 北京交通大学 | 一种无短环无低码重码的ldpc码构造方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102088294A (zh) | 2011-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102088294B (zh) | 一种qc-ldpc编码器及编码方法 | |
CN101662290B (zh) | 生成准循环ldpc码及编码的方法与装置 | |
CN103152056B (zh) | 一种基于原模图的准循环ldpc码构造方法及装置 | |
CN101741396B (zh) | 可变码长ldpc码编码或译码的方法与装置及编码器和译码器 | |
JP5219552B2 (ja) | 移動通信システムにおけるブロック低密度パリティ検査符号の符号化/復号化装置及び方法 | |
EP1829223B1 (en) | Parallel, layered decoding for Low-Density Parity-Check (LDPC) codes | |
CN110114978B (zh) | 高效可解码qc-ldpc码 | |
US8347170B2 (en) | Method and apparatus for performing decoding using LDPC code | |
US7934139B2 (en) | Parallel LDPC decoder | |
CN102394659B (zh) | Ldpc码校验矩阵构造方法及对应矩阵乘法运算装置 | |
CN102057578A (zh) | Turbo ldpc解码 | |
CN101924565A (zh) | Ldpc编码器、解码器、系统及方法 | |
CN101699770B (zh) | 一种高速ldpc码编码器及其编码方法 | |
JP5774237B2 (ja) | 誤り訂正符号化方法および誤り訂正符号化装置 | |
CN101106381A (zh) | 分层的低密度校验码译码器及译码处理方法 | |
CN101335592A (zh) | 基于矩阵分块的高速ldpc译码器实现方法 | |
CN102420616B (zh) | 基于拉丁方阵的准循环ldpc码纠错方法 | |
CN101465655B (zh) | 极短码长低密度奇偶校验码的编码方法 | |
CN1973440A (zh) | Ldpc编码器、解码器、系统及方法 | |
CN102347775B (zh) | 一种基于并行分层译码算法的ldpc码译码器 | |
Chen et al. | Ternary self-orthogonal codes of dual distance three and ternary quantum codes of distance three | |
CN102611465B (zh) | 结构化多元非规则重复累积码的编码器与编码方法 | |
CN101471671A (zh) | Ldpc编码中校验比特的计算方法和装置 | |
CN105207681B (zh) | 一种基于有限域乘群中循环子群生成元的ldpc码构造方法 | |
WO2022161147A1 (zh) | 译码方法、装置、设备以及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |