实现LDPC码编码的方法与装置转让专利

申请号 : CN201210311120.4

文献号 : CN103634073B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 熊富贵

申请人 : 珠海全志科技股份有限公司

摘要 :

本发明公开了一种实现LDPC码的编码方法与装置。其中方法包括:步骤A、设定LDPC码编码的码长n与码率R,初始化并更新参数。步骤B、当长度为k的信息码S输入时,将长度为k的信息码S转换成n-k长度的中间变量e;步骤C、迭代求解方程A*pT=e,得到检验码p。预设迭代起始地址,从起始地址开始迭代,得到检验码,然后实时产生迭代地址,并根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,并根据迭代地址将运算结果写入检验码缓冲器指定位置。本发明采用预设与迭代求解相结合方法,实现了LDPC线性复杂度设计实现LDPC编码的零延时和高吞吐率。

权利要求 :

1.一种实现LDPC码的编码装置,其特征在于,包括:主控制单元,异或阵列处理器,e缓冲器,GF(2)迭代求解器,迭代地址产生器,进程控制计数器,检验码缓冲器和宏矩阵表模块,其中:所述主控制单元,用于接收用户设定的LDPC码编码的码长n与码率R信息,初始化更新各个部件的参数;协调所述异或阵列处理器和e缓冲器完成预处理操作;在接收预设起始迭代地址信息后,协调所述GF(2)迭代求解器执行运算迭代的操作并根据所述迭代地址产生器产生的迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算结果写入检验码缓冲器指定位置;

所述异或阵列处理器,用于进行信息码S的载入操作时,将长度为k的信息码S转换成n-k长度的中间变量e;

所述e缓冲器,用于保存计算结果中间变量e的值;包括n-k个1比特的缓冲寄存器;

所述迭代地址产生器,用于从起始地址开始迭代,经过多次迭代得到检验码,根据当前迭代进程,产生迭代地址;所述迭代地址包括当前运算所需的e缓冲器中间变量e地址、所需的检验码缓冲器检验码地址及当前得到的检验码写入检验码缓冲器地址;

所述进程控制计数器,用于对所述迭代地址产生器的迭代循环操作次数进行计数;

所述检验码缓冲器,用于保存产生的检验码,用单端口SRAM来实现,只有写操作,避免读操作;所述检验码缓冲器长度为n-k比特;

所述GF(2)迭代求解器,用于对当前运算所需的中间变量e地址、所需的已知的检验码地址及当前位置的检验码地址中的数据进行异或运算,得到新位置的检验码;

所述宏矩阵表模块,用于将校验矩阵H分割为宏矩阵A和B并保存,即H=[B A]。

2.根据权利要求1所述的实现LDPC码的编码装置,其特征在于:所述主控制单元包括载入控制模块、第一判断模块和第二判断模块,其中:所述载入控制模块,用于载入信息码S时,每次控制载入到所述异或阵列处理器1比特信息码;

所述第一判断模块,用于当先载入信息码S中的第j列信息码Sj时,判断第j列信息码Sj是否为零,若判断结果不为零,则控制所述异或阵列处理器计算对应的中间变量e的值,再将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,控制e缓冲器保存所述计算结果;若判断结果为零,则直接跳转第二判断模块;

所述第二判断模块,用于判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;

若是,则跳转预设模块执行后续的操作;若否,则返回载入控制模块执行下一列信息码的载入操作。

3.根据权利要求1所述的实现LDPC码的编码装置,其特征在于:所述主控制单元还包括预设模块和迭代协调控制模块,其中:所述预设模块,用于预设第二个检验码的值为0或者1,且迭代起始地址为1;

所述迭代协调控制模块,用于在接收预设起始地址信息后,协调所述GF(2)迭代求解器从起始地址1开始执行迭代运算的操作,并协调进程控制计数器计数,协调迭代地址产生器实时产生当前迭代地址,并根据迭代地址分别从e缓冲器中取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置;重复经过n-k-1次迭代,得到n-k个检验码。

4.根据权利要求1所述的实现LDPC码的编码装置,其特征在于:所述主控制单元还包括第三判断模块、重调模块和结束模块,其中:所述第三判断模块,用于直至处理到第n-k次迭代操作时,且将得到的n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则直接跳转结束模块执行结束编码的操作;若否,则跳转重调模块执行相应操作;

所述重调模块,用于重新调整迭代操作且调整计算错误的检验码;

所述结束模块,用于结束执行LDPC码的编码操作。

5.根据权利要求4所述的实现LDPC码的编码装置,其特征在于:所述第三判断模块包括第三判断子模块,其中:所述第三判断子模块,用于在判断初始预设条件是否正确时,判断最后一个检验方程中的相关变量是否满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。

6.根据权利要求4所述的实现LDPC码的编码装置,其特征在于:所述重调模块包括重调处理子模块,其中:所述重调处理子模块,用于运算GF(2)过程中,在判断预设错误后,将第一个环路中求解所得的 个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相;其中,Z为长度向量,表示每Z个向量中有且仅有一个1。

7.一种实现LDPC码的编码方法,其特征在于,包括如下步骤:

步骤A、设定LDPC码编码的码长n与码率R,初始化并更新各部件的参数;

步骤B、当长度为k的信息码S输入时,利用公式e=B*ST;将长度为k的信息码S转换成n-k长度的中间变量e;

步骤C;迭代求解方程A*pT=e,得到检验码p;

其中,A和B为校验矩阵H的分割宏矩阵,即H=[B A], 则H*x=0演变T T T

为 则A*p=B*S ;运算e=B*S即为预处理过程;求解方程中p即为迭代求解过程。

8.根据权利要求7所述的实现LDPC码的编码方法,其特征在于,所述步骤B中,在每个信息码s进入异或阵列处理器时,要同时与宏矩阵表模块存储的宏矩阵B每列所有n-k个元素b相与操作后,再与e缓冲器中的n-k个缓冲寄存器中的现有的中间变量值e异或,最终将整个T信息码的运算结果中间变量e保存在e缓冲器中;所述中间变量e:e=Bs;

在步骤C中,采用A*pT=e方式求检验码p为迭代求解处理过程:预设迭代起始地址,从起始地址开始迭代,经过多次迭代得到检验码p,实时产生迭代地址,并根据迭代地址分别读取中间变量e,取已知当前位置的检验码p,进行GF(2)迭代求解下一位置的检验码p,并根据迭代地址将运算结果写入检验码缓冲器指定位置。

9.根据权利要求7所述的实现LDPC码的编码方法,其特征在于,所述步骤B具体包括如下步骤:步骤b1、首先载入信息码S,每次载入1比特信息码;

步骤b2、当载入信息码S中的第j列信息码Sj时,判断第j列信息码Sj是否为零;若判断结果不为零,则计算对应的中间变量e的值,将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,再将计算结果保存在e缓冲器内;若判断结果为零,则直接执行步骤b3;

步骤b3、判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;若是,则执行下述步骤C;若否,则返回步骤b1执行下一列信息码的载入操作待整个信息码向量与矩阵B相乘后再执行步骤C。

10.根据权利要求7所述的实现LDPC码的编码方法,其特征在于,所述步骤C具体包括如下步骤:步骤c1、预设第二个检验码的值为0或者1,且迭代起始地址为1;

步骤c2、从起始地址1开始迭代,在执行迭代处理的同时,进程控制计数器计数,迭代地址产生器实时产生迭代地址,并根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置;重复经过n-k-1次迭代,得到n-k个检验码。

11.根据权利要求7所述的实现LDPC码的编码方法,其特征在于,在所述步骤C之后还包括如下步骤:步骤D、直至处理到第n-k次迭代操作时,且将得到n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则执行步骤F;若否,则执行步骤E;

步骤E、重新调整迭代操作且调整计算错误的检验码;

步骤F、结束执行LDPC码的编码操作。

12.根据权利要求7所述的实现LDPC码的编码方法,其特征在于:在所述步骤B中,宏矩阵B采用802.11n高速无线局域网标准中Anne×R中的宏矩阵形式,所述宏矩阵B的行数为24×R,宏矩阵B的列数为24×(1-R);其中R为设定码率;

所述宏矩阵B采用一个地址保存一列的方式进行存储,共有24×R个地址,每个存储单元位宽为7×24×(1-R)bit;

在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,每Z个向量中有且仅有一个1;设计24×(1-R)个定位单元,分别对应每个Z长度向量,通过如下方法定位在每Z个向量中1的位置:设当前列为v,每Z个向量中1的位置所在的列为w,则sv=MOD(v-1,Z)+1

其中,宏矩阵B中每一个元素都代表Z×Zbit的循环右移单位矩阵;当宏矩阵B的码长分别为648、1296和1944时,对应的Z的值分别为27、54和81。

13.根据权利要求7或10所述的实现LDPC码的编码方法,其特征在于:在所述步骤C中,迭代地址采用如下格式:ITER_ADDR[0]表示求解需用的已知检验码地址;

ITER_ADDR[1]表示求解需用的e码地址;

ITER_ADDR[2]表示求解得到的检验码地址;

ITER_ADDR[3]表示求解需用的已知检验码地址;

ITER_ADDR[4]表示行度为3的标志。

14.根据权利要求7所述的实现LDPC码的编码方法,其特征在于:在所述步骤C中,迭代地址采用如下公式:设定当前进程计数为I,则L=CEIL(I/T),K=MOD(I,T)

根据LDPC迭代产生的迭代地址由上述公式表达,其中:当码率R分别为5/6、3/4、2/3和

1/2时,对应的单次循环最大迭代次数T分别为4、6、8和12。

15.根据权利要求7所述的实现LDPC码的编码方法,其特征在于:在所述步骤C中,迭代运算的数据来自检验码缓冲器与e缓冲器,对检验码缓冲器只有写操作,读操作的操作步骤如下:将计算或者预设得到的检验码合理地备份到3个bit的寄存器,省略检验码缓冲器的读操作并得到迭代求解操作数。

16.根据权利要求7所述的实现LDPC码的编码方法,其特征在于:在步骤D中,判断初始预设条件是否正确时,判断最后一个检验方程中的3个已知检验码满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。

17.根据权利要求11所述的实现LDPC码的编码方法,其特征在于:在所述步骤E中,重新调整步骤包括:在运算GF(2)过程中,在判断预设错误后,将第一个环路中求解所得的个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相操作;其中,Z为长度向量,表示每Z个向量中有且仅有一个1。

说明书 :

实现LDPC码编码的方法与装置

技术领域

[0001] 本发明涉及一种无线局域网信道编码技术领域,特别是涉及一种实现LDPC码编码的方法与装置。

背景技术

[0002] 通信的目的是将信源信息及时可靠地传输到信宿。但在数字通信系统中,信道存在着各种噪声和干扰,使得传输信息的准确性和可靠性降低。尤其是近年来,随着大量数据信息的处理和交换,人们对高效、高可靠性的数字通信系统的需求日益增长,使得高可靠性这一性能变得更加迫切。因此,设计数字通信系统的关键在于如何控制各种噪声和干扰引起的差错的情况下,还可以使数据能够可靠准确地进行传输。
[0003] 理论研究表明:LDPC码即低密度奇偶校验码(Low Density Parity Check Code,LDPC)的性能超过Turbo码,已接近香农极限,同时具有线性译码复杂度,适用高速数据传输,特别适合信道情况复杂的无线局域网环境。但就目前情况来看,LDPC码的编码复杂度、造成的编码时延及硬件实现高成本成为制约LDPC码在高速数据业务中应用的一个关键因素。
[0004] 低密度奇偶校验码图(LDPC码)本质上是一种线形分组码,它通过一个生成矩阵G将信息序列映射成发送序列,也就是码字序列。对于生成矩阵G,完全等效地存在一个奇偶校验矩阵H,所有的码字序列C构成了H的零空间(null space),即HCT=0。
[0005] LDPC码的奇偶校验矩阵H是一个稀疏矩阵,相对于行与列的长度,校验矩阵每行、列中非零元素的数目(我们习惯称作行重、列重)非常小,这也是LDPC码之所以称为低密度码的原因。
[0006] 目前,LDPC编码方法主要有三种:传统编码算法、串行编码算法、并行编码算法。后两种编码需要由检验矩阵H得到生成矩阵G,但其生成矩阵的稀疏性很难得到保证,这样就可能会导致编码的运算与存储复杂性急剧增加,其时延与成本较难控制。按照传统编码方法,首先将子矩阵B进行LU分解,然后利用前向迭代就可以方便地根据信息位求解得到检验码。但传统编码方法在成本与复杂度方面依然难尽人意。
[0007] 因此,如何解决现有技术中LDPC码编码的低速,高成本,高延时的缺陷是个亟待解决的问题。

发明内容

[0008] 基于上述问题,本发明提供了一种实现LDPC码编码的方法与装置,用以高速地实现LDPC码的编码,并降低编码成本。
[0009] H=[B A], 则
[0010] H*x=0演变为 则A*pT=B*sT,所以p可以通过解方程组的思想求得。e=B*sT即为预处理过程,而A*pT=e采用迭代求解的方式进行求检验码。
[0011] 本发明正是基于以上设计思路改进了LDPC码编码的处理方法及装置。
[0012] 本发明提供了一种实现LDPC码的编码装置,包括:主控制单元,异或阵列处理器,e缓冲器,GF(2)迭代求解器,迭代地址产生器,进程控制计数器,检验码缓冲器和宏矩阵表模块,其中:
[0013] 所述主控制单元,用于接收用户设定的LDPC码编码的码长n与码率R信息,初始化更新各个部件的参数;协调所述异或阵列处理器和e缓冲器完成预处理操作;在接收预设起始迭代地址信息后,协调所述GF(2)迭代求解器执行运算迭代的操作并根据所述迭代地址产生器产生的迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算结果写入检验码缓冲器指定位置;
[0014] 所述异或阵列处理器,用于进行信息码S的载入操作时,将长度为K的信息码S转换成n-k长度的中间变量e;
[0015] 所述e缓冲器,用于保存所述计算结果中间变量e的值;包括n-k个1比特的缓冲寄存器;
[0016] 所述迭代地址产生器,用于从起始地址开始迭代,经过多次迭代得到检验码,根据当前迭代进程,产生迭代地址;所述迭代地址包括当前运算所需的e缓冲器中间变量e地址、所需的检验码缓冲器检验码地址及当前得到的检验码写入检验码缓冲器地址;
[0017] 所述进程控制计数器,用于对所述GF(2)迭代地址产生器的迭代循环操作次数进行计数;
[0018] 所述检验码缓冲器,用于保存产生的检验码,用单端口SRAM来实现,只有写操作,避免读操作;所述检验码缓冲器长度为n-k比特;
[0019] 所述GF(2)迭代求解器,用于对当前运算所需的中间变量e地址、所需的已知的检验码地址及当前位置的检验码地址进行异或运算,得到新位置的检验码;所述宏矩阵表模块,用于将校验矩阵H的分割宏矩阵A和B并保存,即H=[B A]。
[0020] 较佳地,作为一种可实施方式。所述主控制单元包括载入控制模块、第一判断模块和第二判断模块,其中:
[0021] 所述载入控制模块,用于载入信息码S时,每次控制载入到所述异或阵列处理器1比特信息码;
[0022] 所述第一判断模块,用于当先载入信息码S中的第j列信息码Sj时,判断第j列信息码Sj是否为零,若判断结果不为零,则控制所述异或阵列处理器计算对应的中间变量e的值,再将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,控制e缓冲器保存所述计算结果;若判断结果为零,则直接跳转第二判断模块;
[0023] 所述第二判断模块,用于判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;若是,则跳转预设模块执行后续的操作;若否,则返回载入控制模块执行下一列信息码的载入操作。
[0024] 较佳地,作为一种可实施方式。所述主控制单元还包括预设模块和迭代协调控制模块,其中:
[0025] 所述预设模块,用于预设第二个检验码的值为0或者1,且迭代起始地址为1;
[0026] 所述迭代协调控制模块,用于在接收预设起始地址信息后,协调所述GF(2)迭代求解器从起始地址1开始执行迭代运算的操作,并协调进程控制计数器计数,协调迭代地址产生器实时产生当前迭代地址,并根据迭代地址分别从e缓冲器中取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置;重复经过n-k-1次迭代,得到n-k个检验码。
[0027] 较佳地,作为一种可实施方式。所述主控制单元还包括第三判断模块、重调模块和结束模块,其中:
[0028] 所述第三判断模块,用于直至处理到第n-k次迭代操作时,且将得到的n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则直接跳转结束模块执行结束编码的操作;若否,则跳转重调模块执行相应操作;
[0029] 所述重调模块,用于重新调整迭代操作且调整计算错误的检验码;
[0030] 所述结束模块,用于结束执行LDPC码的编码操作。
[0031] 较佳地,作为一种可实施方式。所述第三判断模块包括第三判断子模块,其中:
[0032] 所述第三判断子模块,用于在判断初始预设条件是否正确时,判断最后一个检验方程中的3个已知检验码满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。
[0033] 较佳地,作为一种可实施方式。所述重调模块包括重调处理子模块,其中:
[0034] 所述重调处理子模块,用于运算GF(2)过程中,在判断预设错误后,将第一个环路中求解所得的 个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相。
[0035] 相应地,本发明还提供了一种实现LDPC码的编码方法,包括如下步骤:
[0036] 步骤A、设定LDPC码编码的码长n与码率R,初始化并更新各部件的参数;
[0037] 步骤B、当长度为k的信息码S输入时,利用公式e=BsT;将长度为k的信息码S转换成n-k长度的中间变量e;
[0038] 步骤C;迭代求解方程A*pT=e,得到检验码p。
[0039] 其中,A和B为校验矩阵H的分割宏矩阵,即H=[B A], 则H*x=0演变为 则A*pT=B*sT;运算e=B*sT即为预处理过程;求解方程中p即为迭代
求解过程。
[0040] 较佳地,作为一种可实施方式。所述步骤B中,在每个信息码s进入异或阵列处理器时,要同时与宏矩阵表模块存储的宏矩阵B每列所有n-k个元素b相与操作后,再与e缓冲器中的n-k个缓冲寄存器中的现有的中间变量值e异或,最终将整个信息码的运算结果中间变量e保存在e缓冲器中;所述中间变量e:e=BsT;
[0041] 在步骤C中,采用A*pT=e方式求检验码p为迭代求解处理过程:预设迭代起始地址,从起始地址开始迭代,经过多次迭代得到检验码p,实时产生迭代地址,并根据迭代地址分别读取中间变量e,取已知当前位置的检验码p,进行GF(2)迭代求解下一位置的检验码p,并根据迭代地址将运算结果写入检验码缓冲器指定位置;
[0042] 较佳地,作为一种可实施方式。所述步骤B具体包括如下步骤:
[0043] 步骤b1、首先载入信息码S,每次载入1比特信息码;
[0044] 步骤b2、当载入信息码S中的第j列信息码Sj时,判断第j列信息码Sj是否为零;若判断结果不为零,则计算对应的中间变量e的值,将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,再将计算结果保存在e缓冲器内;若判断结果为零,则直接执行步骤b3;
[0045] 步骤b3、判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;若是,则执行下述步骤C;若否,则返回步骤b1执行下一列信息码的载入操作待整个信息码向量与矩阵B相乘后再执行步骤C。
[0046] 进一步地,作为一种可实施方式。所述步骤C具体包括如下步骤:
[0047] 步骤c1、预设第二个检验码的值为0或者1,且迭代起始地址为1;
[0048] 步骤c2、从起始地址1开始迭代,在执行迭代处理的同时,进程控制计数器计数,迭代地址产生器实时产生迭代地址,并根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置;重复经过n-k-1次迭代,得到n-k个检验码。
[0049] 进一步地,作为一种可实施方式。在所述步骤C之后还包括如下步骤:
[0050] 步骤D、直至处理到第n-k次迭代操作时,且将产生的n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则执行步骤F;若否,则执行步骤E;
[0051] 步骤E、重新调整迭代操作且调整计数错误的检验码;
[0052] 步骤F、结束执行LDPC码的编码操作。
[0053] 进一步地,作为一种可实施方式。在所述步骤B中,宏矩阵B采用802.11n高速无线局域网标准中Anne×R中的宏矩阵形式,所述宏矩阵B的行数为24×R,宏矩阵B的列数为24×(1-R);其中R为设定码率;
[0054] 所述宏矩阵B采用一个地址保存一列的方式进行存储,共有24×R个地址,每个存储单元位宽为7×24×(1-R)bit;
[0055] 在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,每Z个向量中有且仅有一个1;设计24×(1-R)个定位单元,分别对应每个Z长度向量,通过如下方法定位在每Z个向量中
1的位置:设当前列为v,则
[0056] sv=MOD(v-1,Z)+1
[0057]
[0058] 其中,宏矩阵B中每一个元素都代表Z×Zbit的循环右移单位矩阵;当宏矩阵B的码长分别为648、1296和1944时,对应的Z的值分别为27、54和81。
[0059] 进一步地,作为一种可实施方式。在所述步骤C中,迭代地址采用如下格式:
[0060]
[0061] 进一步地,作为一种可实施方式。在所述步骤C中,所述迭代地址采用如下公式:设定当前进程计数为I,则
[0062] L=CEIL(I/T),K=MOD(I,T)
[0063] 根据LDPC迭代产生的迭代地址由上述公式表达,其中:
[0064] 当码率R分别为5/6、3/4、2/3和1/2时,对应的单次循环最大迭代次数T分别为4、6、8和12。
[0065] 进一步地,作为一种可实施方式。在所述步骤C中,GF(2)迭代求解进行如下操作:
[0066] p(ITER_ADDR[2])=MOD((p(ITER_ADDR[0])+e(ITER_ADDR[1])+p(ITER_ADDR[3])×flag),2)
[0067] 其中,在上述公式中,公式左边表达的是求解得到的检验码地址,公式的右边表达出通过MOD函数及当前运算所需的e缓冲器中间变量地址、所需的检验码缓冲器检验码地址及当前得到的检验码写入检验码缓冲器地址。
[0068] 进一步地,作为一种可实施方式。在所述步骤C中,迭代运算的数据来自检验码缓冲器与e缓冲器,对检验码缓冲器只有写操作,所述读操作的操作步骤如下:
[0069] 将计算或者预设得到的检验码合理地备份到3个bit的寄存器,省略检验码缓冲器的读操作并得到迭代求解操作数。
[0070] 进一步地,作为一种可实施方式。在所述步骤D中,判断初始预设条件是否正确时,判断最后一个检验方程中的3个已知检验码满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。
[0071] 进一步地,作为一种可实施方式。在所述步骤E中,重新调整步骤包括:在运算GF(2)过程中,在判断预设错误后,将第一个环路中求解所得的 个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相操作。
[0072] 本发明的有益效果包括:
[0073] 本发明公开了一种实现LDPC码的编码方法与装置。中方法包括:步骤A、设定LDPC码编码的码长n与码率R,初始化并更新参数。步骤B、当长度为k的信息码S输入时,将长度为k的信息码S转换成n-k长度的中间变量e;步骤C、迭代求解方程A*pT=e,得到检验码p。预设迭代起始地址,从起始地址开始迭代,得到检验码,然后实时产生迭代地址,并根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,并根据迭代地址将运算结果写入检验码缓冲器指定位置。本发明提供的实现LDPC码的编码方法采用预设与迭代求解相结合的方式,实现了LDPC线性复杂度设计。
[0074] 其中,本发明提供的实现LDPC码的编码方法及装置仅保存无线局域网协议标准提供的由子块构成的部分宏矩阵,利用简单的方法实现了对子块内部的访问;本发明利用迭代算法自身的特点省去了检验码缓冲器读操作,用单端口替代双端口存储器的设计;同时本发明利用迭代环路特征,用简单的公式替代了不同码长、码率的迭代地址产生,避免了较大较多的迭代地址表;这些措施大大减少了实现LDPC码编码方法的成本。本发明设计了预处理环节,合理安排处理步骤,实现LDPC编码的零延时和高吞吐率。

附图说明

[0075] 图1为本发明实现LDPC码的编码装置一实施例的结构示意图;
[0076] 图2为本发明实现LDPC码的编码方法一实施例的流程示意图;
[0077] 图3为本发明实现LDPC码的编码方法一实施例具体流程示意图;
[0078] 图4为本发明实现LDPC码的编码方法一实施例进行异或处理的流程示意图;
[0079] 图5为本发明实现LDPC码的编码方法一实施例进行一个环路迭代时的周期路线图;
[0080] 图6为本发明实现LDPC码的编码方法一实施例进行迭代地址产生公式表达示意图;
[0081] 图7为本发明实现LDPC码的编码方法一实施例一的流程示意图。

具体实施方式

[0082] 下面结合说明书附图,对本发明实现LDPC码编码的方法及装置的具体实施方式进行说明。
[0083] H=[B A], 则
[0084] H*x=0演变为 则A*pT=B*sT,所以p可以通过解方程组的思想求得。e=B*sT即为预处理过程,而A*pT=e采用迭代求解的方式进行求检验码。
[0085] 本发明实施例基于以上设计思路改进了LDPC码编码方法及装置。
[0086] 本发明提供的实现LDPC码编码的装置,如图1所示,主控制单元10、异或阵列处理器20、e缓冲器30、迭代求解器40、迭代地址产生器50、进程控制计数器60、检验码缓冲器70和宏矩阵表模块80,其中:
[0087] 所述主控制单元10,用于接收用户设定的LDPC码编码的码长n与码率R信息,初始化更新各个部件的参数;协调所述异或阵列处理器和e缓冲器完成预处理操作;在接收预设起始迭代地址信息后,协调所述GF(2)迭代求解器执行运算迭代的操作并根据所述迭代地址产生器产生的迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算结果写入检验码缓冲器指定位置;所述异或阵列处理器20,用于进行信息码S的载入操作时,将长度为K的信息码S转换成n-k长度的中间变量e;
[0088] 所述e缓冲器30,用于保存所述计算结果中间变量e的值;所述e缓冲器包括n-k个1比特的缓冲寄存器;
[0089] 所述迭代地址产生器40,用于从起始地址开始迭代,经过多次迭代得到检验码,根据当前迭代进程,产生迭代地址;所述迭代地址包括当前运算所需的e缓冲器中间变量e地址、所需的检验码缓冲器检验码地址及当前得到的检验码写入检验码缓冲器地址;
[0090] 所述进程控制计数器50,用于对所述GF(2)迭代地址产生器的迭代循环操作次数进行计数;
[0091] 所述检验码缓冲器60,用于保存产生的检验码,用单端口SRAM来实现,只有写操作,避免读操作;所述检验码缓冲器长度为n-k比特;
[0092] 所述GF(2)迭代求解器,用于对当前运算所需的中间变量e地址、所需的已知的检验码地址及当前位置的检验码地址进行异或运算,得到新位置的检验码;所述宏矩阵表模块80,用于将校验矩阵H的分割宏矩阵A和B并保存,即H=[B A]。
[0093] 较佳地,作为一种可实施方式。所述主控制单元包括载入控制模块、第一判断模块和第二判断模块,其中:
[0094] 所述载入控制模块,用于载入信息码S时,每次控制载入到所述异或阵列处理器1比特信息码;
[0095] 所述第一判断模块,用于当先载入信息码S中的第j列信息码Sj时,判断第j列信息码Sj是否为零,若判断结果不为零,则控制所述异或阵列处理器计算对应的中间变量e的值,再将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,控制e缓冲器保存所述计算结果;若判断结果为零,则直接跳转第二判断模块;
[0096] 所述第二判断模块,用于判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;若是,则跳转预设模块执行后续的操作;若否,则返回载入控制模块执行下一列信息码的载入操作。
[0097] 较佳地,作为一种可实施方式。所述主控制单元还包括预设模块和迭代协调控制模块,其中:
[0098] 所述预设模块,用于预设第二个检验码的值为0或者1,且迭代起始地址为1;
[0099] 所述迭代协调控制模块,用于在接收预设起始地址信息后,协调所述GF(2)迭代求解器从起始地址1开始执行迭代运算的操作,并协调进程控制计数器计数,协调迭代地址产生器实时产生当前迭代地址,并根据迭代地址分别从e缓冲器中取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,再根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置;重复经过n-k-1次迭代,得到n-k个检验码。
[0100] 较佳地,作为一种可实施方式。所述主控制单元还包括第三判断模块、重调模块和结束模块,其中:
[0101] 所述第三判断模块,用于直至处理到第n-k次迭代操作时,且将得到的n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则直接跳转结束模块执行结束编码的操作;若否,则跳转重调模块执行相应操作;
[0102] 所述重调模块,用于重新调整迭代操作且调整计算错误的检验码;
[0103] 所述结束模块,用于结束执行LDPC码的编码操作。
[0104] 较佳地,作为一种可实施方式。所述第三判断模块包括第三判断子模块,其中:
[0105] 所述第三判断子模块,用于在判断初始预设条件是否正确时,判断最后一个检验方程中的3个已知检验码满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。
[0106] 较佳地,作为一种可实施方式。所述重调模块包括重调处理子模块,其中:
[0107] 所述重调处理子模块,所述重调处理子模块,用于运算GF(2)过程中,在判断预设错误后,将第一个环路中求解所得的 个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相。
[0108] 在本发明实施例中,信息码从扰动环节串行输入,最后一个信息码输入后,检验码随之串行输出,整个过程需要信息码输入的k个时钟周期加上检验码输出的n-k个时钟周期,即n个时钟周期。整个成本如下所示:
[0109] (1)e缓冲器,n-k个1bit寄存器;
[0110] (2)检验码缓冲器,容量为n-kbit的单端口SRAM;
[0111] (3)异或阵列处理器,n-k个异或门、24个7bit减法器及12个7bit比较器;
[0112] (4)宏矩阵B存储,矩阵长为24×R,宽为24×(1-R),数据位宽为7bit。不同码长及码率组合,共有12个表,容量为3*(144+128+108+80)*7bit,采用ROM保存。
[0113] (5)迭代地址产生器,一个4bit常系数乘法器,两个10bit加法器。
[0114] (6)GF(2)迭代求解器,3个1bit加法器。
[0115] (7)进程控制计数器,10bit计数器。
[0116] 本发明实施例所涉及装置提供零延时、极低成本实现方案。
[0117] 在本发明实施例中,实现LDPC码编码的装置包括进程控制计数器、异或阵列处理器、e缓冲器、迭代地址产生器、检验码缓冲器与迭代求解器。其中各个部件还具有如下特性:
[0118] 1、e缓冲器,n-k个1bit寄存器。用来保存中间变量e,用于检验码求解。
[0119] 2、来自检验码缓冲器求解操作数的读操作设计,具体方法分两方面描述,其一为bit备份,操作方法是,把计算所得检验码写入SRAM的同时,写入在bit0;在每个环路迭代初始,将计算所得检验码(或者预设检验码)备份到bit1;在每个环路第一次迭代到行度为3的前一行时,将计算所得检验码(或者预设检验码)备份到bit2。其二为bit读取,所需从检验码缓冲器中读出的数据直接可以在bit0至bit2中获取,从而省去了读操作,而只保留了一个时钟周期一个写操作。其具体方法是,在每个环路第二次迭代到初始位置时,运算所需检验码使用bit1的值;在每个环路迭代到行度为3的行时,计算所需检验码使用bit0和bit2;其它步骤概使用bit0的值。
[0120]  计算所得当前检验码   第一次备份检验码   第二次备份检验码
  bit0   bit1   bit2
[0121] 3、异或阵列处理器,主要是配合e缓冲器完成BsT=e的计算。异或阵列处理器是随着信息码输入而工作,直到最后一个信息码处理完毕,之后才开始检验码迭代求解,所以这个环节是预处理阶段,主要是为了缩短检验码求解时间。按照程序流程图,当信息码为非0时,将根据码长与码率选择矩阵B并根据某列矩阵元素生成n-k个0/1元素,分别与e缓冲器的n-k个寄存器相加并保存在e缓冲器的原寄存器中。矩阵B列元素生成方法描述如下:在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,每Z个向量中有且仅有一个1。设计24×(1-R)个定位单元,分别对应每个Z长度向量,通过如下方法定位在每Z个向量中1的位置:设当前列为v,则
[0122] sv=MOD (v-1,Z )+1
[0123]
[0124] 4、矩阵B列元素生成设计需要最多24×(1-R)个单元,将各自计算得到的结果映射到长度为n-k向量中。
[0125] 5、迭代地址产生器,输入变量为进程控制计数器的计数,输出迭代地址,用于对迭代求解的操作数与结果读取或者写入缓冲器的位置。其格式如下:
[0126]
[0127] 6、GF(2)迭代求解器的设计,主要完成两个或者三个操作数的异或操作,其结果将按照迭代地址产生器提供地址写入到检验缓冲器,同理,操作数也按照迭代地址产生器提供地址分别从e缓冲器与检验码缓冲器读出。但由于采用单端口来设计检验码缓冲器,同时在一个时钟周期对检验码缓冲器的操作需求有2次或者3次,所以会出现读写冲突问题。这一解决方案在(7)中描述。
[0128] 7、进程控制计数器,计数范围为0至n-k-1,计数器在最后一个信息码输入后启动,在n-k-1个时钟周期后清零。
[0129] 本发明的实施例所提供的实现LDPC码编码的装置,可通过计算机程序实现。本领域技术人员应该能够理解,所述的模块划分方式仅是众多模块划分中的一种,如果划分为其他模块或是不划分模块,只要装置具有上述功能,都应该在本申请的保护范围之内。
[0130] 基于同一发明构思,本发明实施例还提供了一种实现LDPC码的编码方法,由于此方法解决问题的原理与前述用于实现LDPC码编码的装置相似,因此该方法的实施可以参见前述装置的实施,重复之处不再赘述。
[0131] 相应地,作为一种可实施方式。本发明实施例提供的一种实现LDPC码的编码方法,所述LDPC码编码方法具体包括下述步骤:
[0132] 步骤A、设定LDPC码编码的码长n与码率R,初始化并更新各部件的参数;
[0133] 步骤B、当长度为k的信息码S输入时,利用公式e=BsT;将长度为k的信息码S转换成n-k长度的中间变量e;
[0134] 步骤C;迭代求解方程A*pT=e,得到检验码p。
[0135] 其中,A和B为校验矩阵H的分割宏矩阵,即H=[B A], 则H*x=0演变为 则A*pT=B*sT;运算e=B*sT即为预处理过程;求解方程中p即为迭代
求解过程。
[0136] 较佳地,作为一种可实施方式。所述步骤B中,在每个信息码s进入异或阵列处理器时,要同时与宏矩阵表模块存储的宏矩阵B每列所有n-k个元素b相与操作后,再与e缓冲器中的n-k个缓冲寄存器中的现有的中间变量值e异或,最终将整个信息码的运算结果中间变量e保存在e缓冲器中;所述中间变量e:e=BsT;
[0137] 在步骤C中,采用A*pT=e方式求检验码p为迭代求解处理过程:预设迭代起始地址,从起始地址开始迭代,经过多次迭代得到检验码p,实时产生迭代地址,并根据迭代地址分别读取中间变量e,取已知当前位置的检验码p,进行GF(2)迭代求解下一位置的检验码p,并根据迭代地址将运算结果写入检验码缓冲器指定位置;
[0138] 本发明在具体实施时,上述各步骤可以实现LDPC码编码装置来完成。下面对上述各步骤进行详细说明:
[0139] 较佳地,在上述步骤A中,N为码字长度,K为信息位长度,初始化各个部件并更新各个部件的参数。例如,初始化检验码缓冲器与e缓冲器内的相关参数值为0。
[0140] 参见图3,图3示意本发明实施例的实现LDPC码编码的方法的具体流程示意图。
[0141] 进一步地,作为一种可实施方式。所述步骤B具体包括如下步骤:
[0142] 步骤b1、首先载入信息码S,每次载入1比特信息码,载入信息码S中的第j列信息码Sj;
[0143] 步骤b2、当载入信息码S中的第j列信息码Sj后,判断第j列信息码Sj是否为零;若判断结果不为零,则执行步骤b2’;若判断结果为零,则直接执行步骤b3;
[0144] 步骤b2’、计算对应的中间变量e的值,将对应的中间变量e与e缓冲器中现有的中间变量e值模2和,再将计算结果保存在e缓冲器内;
[0145] 步骤b3、判断所述第j列信息码Sj是否为信息码S中的最后一个信息码;若是,则执行下述步骤C;若否,则返回步骤b1执行下一列信息码的载入操作;
[0146] 在上述步骤B中,参见图3,计算中间变量e的值即:e=B*sT为预处理过程,其实质是:矩阵列向量与e缓冲器向量相加,向量sT要与B中每行向量相乘加。这样将当第k个信息码进入后,e缓冲器中个n-k值即为信息码向量与矩阵相乘的结果。至此预处理操作结束。
[0147] 传统的做法是:当向量sT全部到位后,再与B中每行向量相乘加;一般来讲,B的行数要小于列数,所以这样处理需要列数个“与”和“异或”运算单元;而且信息元s是逐比特进入的,在sT全部到位后还需要行数个时钟周期才能完成运算。而本发明实施例采用的做法是:通过仔细观察发现,sT中每个向量要与B中相对应的列相乘,比如s0要与B中的第一列所有向量相乘;
[0148] 另参见图4,在每个信息元比特来到时,可以将该信息元比特与相对应的列中所有的向量进行相乘,并将相乘结果与e缓冲器向量相加,直到最后一个信息元比特,将e缓冲器初始化为0。其中:当第k个信息码进入后,e缓冲器中个n-k值即为信息码向量与矩阵相乘的结果。与现有技术处理方法相比,本发明实施例方法处理列先于行,而现有技术处理方法相反,但结果迥异,体现在两个方面:第一,由于B的行数要小于列数,所以现有技术处理方法要用到更多的“乘加”运算单元;第二,显然,本发明实施例的处理方法在最后一个信息码元输入后,预处理环节结束;相反,传统方法才刚刚开始。
[0149] 进一步地,作为一种可实施方式。所述步骤C具体包括如下步骤:
[0150] 步骤c1、预设第二个检验码的值为0或者1,且迭代起始地址为1;
[0151] 步骤c2、从起始地址1开始迭代,在执行迭代处理的同时,进程控制计数器计数,迭代地址产生器实时产生迭代地址;根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器读取当前位置的检验码,进行GF(2)迭代求解下一位置的检验码;
[0152] 步骤c2’、判断当前进程是否为最后一个进程,若是,则继续直接跳转步骤D执行相应的操作;若否,则执行下述步骤c2”;
[0153] 步骤c2”、根据迭代地址将运算出新位置的检验码的写入检验码缓冲器指定位置,并重复迭代;
[0154] 在上述步骤c1~c2”中,重复经过n-k-1次迭代,可以得到n-k个检验码。
[0155] 进一步地,作为一种可实施方式。其特征在于,在所述步骤C之后还包括如下步骤:
[0156] 步骤D、直至处理到第n-k次迭代操作时,且将产生的n-k个检验码都写入到检验码缓冲器后判断初始预设条件是否正确;若是,则执行步骤F;若否,则执行步骤E;
[0157] 步骤E、重新调整迭代操作且调整计算错误的检验码;
[0158] 步骤F、结束执行LDPC码的编码操作。
[0159] 在上述步骤C~步骤F中,实现LDPC码编码的方法在经过上述预处理结束后进入迭代求解操作,主要经过预设、迭代、纠错、重调的过程才能够实现整个的完整编码及验证的操作。
[0160] 较佳地,作为一种可实施方式。在所述步骤B中,宏矩阵B采用802.11n高速无线局域网标准中Anne×R中的宏矩阵形式,所述宏矩阵B的行数为24×R,宏矩阵B的列数为24×(1-R)。其中R为设定码率。
[0161] 所述宏矩阵B采用一个地址保存一列的方式进行存储,共有24×R个地址,每个存储单元位宽为7×24×(1-R)bit;
[0162] 在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,每Z个向量中有且仅有一个1;设计24×(1-R)个定位单元,分别对应每个Z长度向量,通过如下方法定位在每Z个向量中
1的位置:设当前列为v,则
[0163] sv=MOD(v-1,Z)+1
[0164]
[0165] 其中,宏矩阵B中每一个元素都代表Z×Zbit的循环右移单位矩阵;当宏矩阵B的码长分别为648、1296和1944时,对应的Z的值分别为27、54和81。
[0166] 举例来说,参见表1,表1所示意的是码长为648、码率为1/2时,以循环子矩阵构成的宏矩阵B,其中:矩阵长为24×R计算结果等于12,宽为24×(1-R)计算结果等于12,表1的矩阵可以清楚示意出矩阵长和宽都为12;
[0167] 同时,在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,Z为27为常数(每27个向量中有且仅有一个1),表1所示意的宏矩阵共有12个27长度的向量;在表1中,第二行第一位的值为22,所代表的意思是标准单位矩阵循环向右移22位。
[0168] 对应的,图7所示意的是码长为648、码率为1/2时,以循环子矩阵构成的宏矩阵A,与上述计算公式同样适用,重复之处不再赘述。
[0169] 本发明实施例实现LDPC码的编码方法中,码长648、码率为1/2时,以循环子矩阵构成的宏矩阵B,如下表1所示;
[0170]  0   -1   -1   -1   0   0   -1   -1   0   -1   -1   0
  22   0   -1   -1   17   -1   0   0   12   -1   -1   -1
  6   -1   0   -1   10   -1   -1   -1   24   -1   0   -1
  22   -1   -1   0   20   -1   -1   -1   25   0   -1   -1
  23   -1   -1   -1   3   -1   -1   -1   0   -1   9   11
  24   -1   23   1   17   -1   3   -1   10   -1   -1   -1
  25   -1   -1   -1   8   -1   -1   -1   7   18   -1   -1
  13   24   -1   -1   0   -1   8   -1   6   -1   -1   -1
  7   20   -1   16   22   10   -1   -1   23   -1   -1   -1
  11   -1   -1   -1   19   -1   -1   -1   13   -1   3   17
  25   -1   8   -1   23   18   -1   14   9   -1   -1   -1
  3   -1   -1   -1   16   -1   -1   2   25   5   -1   -1
[0171] 本发明实施例实现LDPC码的编码方法中,码长648、码率为1/2时,以循环子矩阵构成的宏矩阵A,如下表2说明;
[0172]  1   0   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1
  -1   0   0   -1   -1   -1   -1   -1   -1   -1   -1   -1
  -1   -1   0   0   -1   -1   -1   -1   -1   -1   -1   -1
  -1   -1   -1   0   0   -1   -1   -1   -1   -1   -1   -1
  -1   -1   -1   -1   0   0   -1   -1   -1   -1   -1   -1
  -1   -1   -1   -1   -1   0   0   -1   -1   -1   -1   -1
  0   -1   -1   -1   -1   -1   0   0   -1   -1   -1   -1
  -1   -1   -1   -1   -1   -1   -1   0   0   -1   -1   -1
  -1   -1   -1   -1   -1   -1   -1   -1   0   0   -1   -1
  -1   -1   -1   -1   -1   -1   -1   -1   -1   0   0   -1
[0173]  -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   0   0
  1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   0
[0174] 较佳地,作为一种可实施方式。在所述步骤C中,迭代地址采用如下格式:
[0175]
[0176] 较佳地,作为一种可实施方式。在所述步骤C中,所述迭代地址采用如下公式:设定当前进程计数为I,则
[0177] L=CEIL(I/T),K=MOD(I,T)
[0178] 根据LDPC迭代产生的迭代地址由上述公式表达,其中:
[0179] 当码率R分别为5/6、3/4、2/3和1/2时,对应的单次循环最大迭代次数T分别为4、6、8和12。
[0180] 较佳地,作为一种可实施方式。在所述步骤C中,GF(2)迭代求解进行如下操作:
[0181] p(ITER_ADDR[2])=MOD((p(ITER_ADDR[0])+e(ITER_ADDR[1])+p(ITER_ADDR[3])×flag),2)
[0182] 其中,在上述公式中,公式左边表达求解得到的检验码地址,公式的右边表达出通过MOD函数及当前运算所需的e缓冲器中间变量地址、所需的检验码缓冲器检验码地址及当前得到的检验码写入检验码缓冲器地址。
[0183] 较佳地,作为一种可实施方式。在所述步骤D中,判断初始预设条件是否正确时,判断最后一个检验方程中的3个已知检验码满足方程,若是,则判断结果为预设正确;若否,则判断结果为预设错误。
[0184] 较佳地,作为一种可实施方式。在所述步骤F中,重新调整步骤包括:在运算GF(2)过程中,仅需将第一个环路中求解所得的 个检验码逻辑反相,行度为3的行阻止了错误的传播;其中:第一个环路的24×(1-R)次迭代一定错误,错误止于第一个环路;将前24×(1-R)次迭代的结果进行反相操作。
[0185] 本领域技术人员应该可以理解,在上述步骤C~步骤F中,迭代的思想与方法构成了本发明实施例的核心,采用预设、迭代、纠错、重调的形式来达成这一思想与方法。下面是本发明实施例的迭代思想的形成与方法的推演。
[0186] 行业标准组织美国电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)在9月11日批准了802.11n高速无线局域网标准。在802.11n标准中,采用的LDPC码的检验码部分均采样相似的形式来根据信息码产生检验码。这样的情况有利于采用程序的形式迭代求解。编程思路如下描述,由于检验矩阵n-k-Z行的行度为2,z行的行度为3;列度情况与行度相同。所以只要预设p01为0或者为1,则与之同行另一非0位置的p0x可以根据方程求解: 当然这种方式不能顺次用在其它行,因为其它行的2个未知数中可能均未知,而且不能再去预设未知数。所以最好的办法是找到已知检验码位置,有利于已知变量来求解与之同行的另一个变量(检验码)。显然,由于行度与列度为
2或者3,所以每个已知的检验码可求解另一个检验码,共有两条支路搜索求解。这样,第i步执行后,可求得i个检验码。
[0187] 参见图5,值得注意的是,当某次步骤来到行度为3的行,要求解检验码,需要至少2个检验码,所以要去求证是否有至少2个检验码已知。如果没有,则可以等待,希望(一定会)另外一条搜索支路求解出2个未知检验码中的一个,从而使得被暂停的行得以继续搜索求解。可以发现,此时两条路径解决了行度为3的行中两个未知检验码求解的问题,这样就可以求解出第3个检验码。此时,求出的检验码与初始预设的检验码一样,使得重新有一个环路(两条支路与收敛在行度为3的行)来求解更多的检验码,每个环路可以求解得到 个解。行度为3的行不多,但其重要性不言而喻,其不规则性使得迭代求解成为可能。
[0188] 同时可以发现,每求一个检验码,需要消耗一行,所以在预设一个检验码条件下,求解n-k-1个检验码时,需消耗n-k-1个方程(行),共有n-k个方程(检验矩阵满秩)可以使用,所以最后一个方程(行)用来检验p01的预设是否正确,如果最后一个步骤中,3个已知检验码满足方程,预设正确,否则错误。如果错误,则在GF(2)中,仅需将第一个环路中求解所得的 个检验码逻辑反相。行度为3的行阻止了错误的传播。
[0189] 在码长与码率设定的条件下,完整的检验码求解过程需要n-k次迭代,也就需要n-k个迭代地址,每个迭代地址为长度为5的向量;另外802.11n提供有12个列表,所以地址表将会很庞大,需要较大的存储空间。反观迭代思想与方法,可以发现规律并可以用简单的公式来推导这些迭代地址。
[0190] 下面关于本发明实施例的实现LDPC码编码的方法的环路跌代求解的问题,分为四个方面进行解释说明:
[0191] 一、关于预设处理操作
[0192] 由于无线相容性认证(WirelessFidelity,Wi-Fi)定义的无线传输技术中的LDPC码检验矩阵A中行度为2或者3,而且不是倒三角形矩阵,所以在求解开始,我们面临着一个方程两个未知数的情况,这个时候就要预设一个未知数而去求解另一个未知数。同时,由于跌代算法从第一行开始,在第一行中的第一个非零向量的位置为2,所以本发明实施例编码方法的预设检验码的位置为2。
[0193] 二、关于环路跌代操作
[0194] 参见图5,迭代具有周期性,并且一次迭代周期会消耗掉一个行度为3的行。其具体思路是,在已知检验码对应列找到一个非零向量,并与其所在行的另外非零向量构成一个方程,从而求解出这个向量,即检验码,依次类推,直到行度为3的行,这时先放置此行,因为两个未知数一个方程不足以求解。先回到迭代周期初始,找到迭代周期处理的第一行中那个没有利用的向量,再利用前面所述方法进行运算直至行度为3的行,而且在同一个周期里可以保证从上而下与从下而上相遇的行度为3的行一定是同一行,所以利用前面两次求解的结果进行行度为3的行的求解。
[0195] 当码率较小时或者码长较长时,迭代地址非常的多,而且地址表也非常的多,所以采用地址表的方法会非常浪费。所以采用公式法来产生迭代地址显得比较简洁与节省。参见图6,公式的提取来自于对检验矩阵的仔细观察及推导得出。
[0196] 三、关于判断预设检验码是否正确的操作
[0197] 参见表3,在最后一步,得出第二个检验码,它可以与预设检验码进行比较,如果相同,表明检验码预设正确,否则错误。也就是说,我们预设了第二个检验码,通过若干次迭代求解出第二个检验码。N个方程,求解N个未知数。我们预设一个未知数,如果不考虑对错,只需要N-1个方程就可以求解出另外N-1个未知数,而用最后一个方程来验证预设是否正确,这在理论上没有任何问题。
[0198] 四、关于预设纠错的处理操作
[0199] “异或”操作,只要一个操作数反相(错误),则结果一定反相(错误);如果有两个操作数反相,则结果一定同相。所以在第一个迭代周期里的最后一步,阻止了预设错误继续传播。所以有如下结论:如果预设错误,在第一个迭代周期里除行度为3的操作步骤外的所有行求解出的检验码有且一定有错;错误只在第一个迭代周期发生,参见图5。
[0200] 本发明实施例实现LDPC码的编码方法中,在648码长、5/6码率条件下,由迭代地址器产生的完整迭代地址,如下表2说明;
[0201]
[0202]
[0203]
[0204]
[0205] 为了更好地说明本发明实施例提供的实现LDPC码的编码方法,举一个实际的例子加以说明。
[0206] 实施例一:
[0207] 下面结合附图7对本发明实施例一做进一步的描述:
[0208] 步骤S101、初始化。
[0209] 设定LDPC码编码码长与码率,清零检验码缓冲器与e缓冲器及进程控制计数器;
[0210] 步骤S102、预处理。
[0211] 主要是配合e缓冲器完成BsT=e的计算,其结果保存在e缓冲器中。当信息码有效信号为高,首先判断信息码Sj是否为0;如果不为0,则将根据码长与码率选择矩阵B并根据某列矩阵元素生成n-k个0/1元素,分别与e缓冲器的n-k个寄存器相加并保存在e缓冲器的原寄存器中。矩阵B列元素生成方法描述如下:在宏矩阵B每列元素中,共有24×(1-R)个Z长度向量,每Z个向量中有且仅有一个1。设计24×(1-R)个定位单元,分别对应每个Z长度向量,反循环方法定位在每Z个向量中1的位置。矩阵B列元素生成设计需要最多24×(1-R)个单元,即最多为12个单元,将各自计算得到的结果映射到长度为n-k向量中。这种操作持续到处理完最后一个信息码。
[0212] 步骤S103、迭代,包括预设、迭代运算求解、纠错及重调;
[0213] 迭代求解过程具体通过预设、迭代运算、纠错及重调的操作来实现。当预处理完成后,进程控制计数器开始启动,计数范围为0至n-k;首先预设第二个检验码的值为0或者1,且迭代初始地址为1;将计数器的值输入迭代地址产生器中,可计算出新的地址向量,其定义在迭代求解的运算操作数、运算结果存取地址与运算方式,然后取出操作数进行迭代运算,计算结果并按照生成的地址向量写入检验码缓冲器中;在取检验码操作数时,没有从检验码缓冲器中读取,而是采用3bit寄存器备份检验码,需要时直接从备份检验码中获取;最后一个步骤检查初始预设是否正确,如果错误,则将第一个迭代环路所有的运算结果进行反相即可。迭代结束,检验码按照地址由低到高顺次置于检验码缓冲器中,注意的是,在检验码迭代求解时,并没有按照从低到高顺次得到检验码。
[0214] 步骤S104、编码结束。
[0215] 在本发明实施例一中,实现LDPC码的编码方法的其实质是:设计了一个全新的编码方法并通过合理利用该方法的编码规律,利用预设、迭代运算求解、纠错及重调的理论阐述了整个编码过程,这种理论设想还可以用于格雷二进制码(Gray or Reflected Binary Code,RBC)及自然二进制码(Natural Binary Code,NBC)和折叠二进制码(Folded Binary Code,FBC)的编码领域,利用这种方式,同样可以实现例如RBC码的编码,本发明实施例对此不再一一赘述。本发明实施例一提供的一种实现LDPC码编码的方法,较大的降低了成本,并较好的解决了高时延问题,较为实际地提供了一种低成本、零时延、高速实现LDPC码编码的方法。显然,本领域技术人员应该可以理解,预设、迭代、纠错与重调的思路与方法不应限于802.11n,还应包括其它LDPC码编码领域。
[0216] 本发明实施例提供的一种实现LDPC码的编码方法与装置。其中方法包括以下步骤:步骤A、设定LDPC码编码的码长n与码率R,初始化并更新参数。步骤B、当长度为k的信息码S输入时,将长度为k的信息码S转换成n-k长度的中间变量e;步骤C、采用A*pT=e方式求检验码p为迭代求解处理过程:预设起始地址,从起始地址开始迭代,经过多次迭代得到检验码,实时产生迭代地址,并根据迭代地址分别从e缓冲器中读取中间变量e,从检验码缓冲器取已知当前位置的检验码,进行GF(2)迭代求解下一位置的检验码,并根据迭代地址将运算结果写入检验码缓冲器指定位置。本发明实施例提供的实现LDPC码的编码方法采用预设与迭代求解相结合的方式,实现了LDPC线性复杂度设计。
[0217] 其中,本发明实施例提供的实现LDPC码的编码方法及装置仅保存无线局域网协议标准提供的由子块构成的部分宏矩阵,利用简单的方法实现了对子块内部的访问;利用迭代算法自身的特点省去了检验码缓冲器读操作,用单端口替代双端口存储器的设计;同时利用迭代环路特征,用简单的公式替代了不同码长、码率的迭代地址产生,避免了较大较多的迭代地址表;这些措施大大减少了实现LDPC码编码方法的成本。本发明实施例还设计了预处理环节,合理安排处理步骤,实现LDPC编码的零延时和高吞吐率。
[0218] 以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。