具体实施方式
如图1所示,是本发明准循环LDPC码译码系统的应用环境示意图。该准循环LDPC码译码系统13运行于译码器1中。该译码器1用于接收输入装置16所输入的数据,并利用所述准循环LDPC码译码系统13对所输入的数据进行译码纠错,并将处理后的数据通过输入装置17输出。所述译码器1还包括一级二输入加法器14、一级二输入比较器15及存储芯片12。
所述输入的数据即为信道似然信息,所述存储器12用于存储所述信道似然信息。
准循环低密度奇偶校验码(简称QC-LDPC)是一种特殊的LDPC码,所述QC-LDPC码的校验矩阵H是一个M×N的稀疏矩阵,即有M个校验节点及N个变量节点。每个所述校验节点对应一个行,每行中有N个元素,每个所述变量节点对应一个列,每一列中有M个元素。
矩阵中共有M×N个矩阵元素,每个矩阵元素代表一个p×p的子矩阵,子矩阵或为全0或为一个把单位阵进行循环移位后的矩阵。所述子矩阵中的1表示所述1所在的位置有数值,所述子矩阵中的0表示所述0所在的位置没有数值(即为0)。所述一个把单位阵进行循环移位后的矩阵中每一行或者每一列有且仅有一个1。所述准循环LDPC码译码系统13只对校验矩阵H中非零p×p的子矩阵进行处理。所述p为正整数。
所述准循环LDPC码译码系统13经过多次迭代来处理所述校验矩阵H,在每次迭代的过程中,在多个时钟周期下来完成所述校验矩阵H中的M个校验节点及N个变量节点的信息更新以得到所述校验矩阵H中每一列的所有非零元素之和的符号(即正号或者负号)。所述准循环LDPC码译码系统13在每个时钟周期处理校验矩阵H的一个非零子矩阵,并且按校验矩阵的行方向串行执行完所有非零子矩阵从而完成一次迭代。所述迭代的过程在后续详述。
如图2所示,是本发明准循环LDPC码译码系统的模块图。在本实施例中,所述准循环LDPC码译码系统13包括接收模块130、读取模块131、计算模块132、行操作模块133、行列操作模块134、列操作模块135及输出模块136,其中行操作模块133还包括查找子模块1330,更新符号子模块1331,更新数值子模块1332。本发明所称的模块是指一种能够被处理单元所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储芯片12中。在本实施例中,关于各模块的功能将在图3的流程图中具体描述。
如图3所示,是本发明准循环LDPC码译码方法的较佳实施例的流程图。根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
步骤S10,接收模块130接收通过输入装置16所输入的数据并存入译码器1的存储芯片12中。
步骤S11,读取模块131从存储芯片12中依次读取校验矩阵H中所有非零子矩阵所对应的数据。
步骤S12,计算模块132计算迭代初始值,通过一级二输入加法器14来计算校验矩阵H的每个变量节点中每列的和以初始化每个变量节点的p个列和,并将所计算出的每个变量节点的p个列和存储于存储芯片12。
对每个变量节点,计算模块132对M个p×p的子矩阵中的所有非零子矩阵中每个相同列号的列进行求和,即在每个变量节点中,会计算出p个列和,即所述每个变量节点的p个列和为1×p的矩阵。
在本实施例中,如图4所示,为了简单的说明该步骤,以校验矩阵H由3个校验节点及5个变量节点组成(即为3×5的矩阵)为例,其中用a1、a2、a3…a9表示其所在位置的子矩阵为非零2×2(即p=2)子矩阵。以 表示a1,即-1表示a1中第一行第一列中的1所在位置的数,2表示a1中第二行第二列中的1所在位置的数;同理用 表示a5,则第一个变量节点的2个列和为((-1+6),(2+(-7)),即为(5,-5)。
在后续的迭代中,所述p个列和会不断更新,将在后续详述。
所述一级二输入加法器的方法是将矩阵A及B作为输入,将A的列与B中列号相同的列的非零元素进行相加,从而每列得到一个相加后的数据。
在本实施例中,以M取3,p取4为例,即第一个变量节点中有Q1、Q2及Q3三个4×4非零子矩阵为例,所述计算模块132利用一级二输入加法器先将Q1及Q2作为输入,将Q1的第1、2、3、4列中非零元素与Q2中相应的第1、2、3、4列中非零元素相加得到1×4的矩阵Q4。再将Q4及Q3作为输入,将Q4的第1、2、3、4列中非零元素与Q3中相应的第1、2、3、4列中非零元素相加得到所述每个变量节点的p个列和。
步骤S13,行操作模块133对校验矩阵H的第一个校验节点(即第一行)进行行操作以更新第一个校验节点中每个非零子矩阵中的非零元素。
详细地,为了详述行操作的一般性,下面用i表示校验矩阵H的第i个校验节点,在步骤S13中,i取1。所述行操作是对非零子矩阵中的非零元素进行处理,所述行操作包括:
(a)查找子模块1330查找校验矩阵H的第i个校验节点(即第i行)中的绝对值最小值及绝对值次小值,并存储所述绝对值最小值及其位置、绝对值次小值、第i个校验节点中每个非零子矩阵中每个非零元素的符号到存储芯片12中。
详细地,所述查找子模块1330对所述第i个校验节点中的所有非零的p×p子矩阵进行串行处理。所述查找子模块1330在一个时钟周期内处理一个非零的p×p子矩阵。在本实施例中,以所述第一个校验节点中的所有非零的p×p子矩阵为4个为例,则共需要四个时钟周期才能查找到所述绝对值最小值及绝对值次小值。
在一个时钟周期内,所述查找子模块1330通过一级二输入比较器查找该时钟周期内所处理的非零的p×p子矩阵的绝对值最小值及绝对值次小值。
所述一级二输入比较器的比较方法是将矩阵A及B作为输入,将A矩阵的行/列与B矩阵中行号/列号相同的行/列进行比较,从而每行/列得到一个比较后的数据。
在本实施例中,以第一个校验节点中有T1、T2及T3三个4×4非零子矩阵为例,所述查找子模块1330利用一级二输入比较器先将T1的第一行的非零元素与T2的第一行的非零元素、T1的第二行的非零元素与T2的第二行的非零元素、T1的第三行的非零元素与T2的第三行的非零元素及T1的第四行的非零元素与T2的第四行的非零元素进行比较得到每行中的绝对值最小值及绝对值次小值,从而得到一个4×2即(p×2)的矩阵,再将所述4×2的矩阵的每行的非零元素与T3中行号相同的行的非零元素进行比较得到一个新的4×2的矩阵,再将所述新的4×2的矩阵中第一行的元素与第二行的元素进行比较得到一个绝对值最小值及一个绝对值次小值,再将所得到的一个绝对值最小值及一个绝对值次小值与所述新的4×2的矩阵中第三行的元素进行比较,依次类推,直至与所述新的4×2的矩阵中第四行进行比较后即可找到第一个校验节点的一个绝对最小值及一个绝对值次小值。
每个非零子矩阵中每个非零元素的符号为+1或者-1,当所述非零元素为正数时,即为+1,当所述非零元素为负数时,即为-1。
(b)更新符号子模块1331更新第i个校验节点中每个非零子矩阵中非零元素的符号。
详细地,在M×N的校验矩阵的在第i个校验节点中,有N个p×p子矩阵,所述更新符号子模块1331在所述N个p×p子矩阵中正在处理一个非零子矩阵的一个非零元素,先将该第i个校验节点中所有非零子矩阵中与所述非零元素所在行号相同的所有非零元素的符号相乘,再将相乘后的符号与所记录的所述非零元素的符号相乘,即得到更新后的所述非零元素的符号。
(c)更新数值子模块1332将第i个校验节点中所述绝对值最小值所在位置的元素的绝对值更新为绝对值次小值及将第i个校验节点中其他非零元素的绝对值更新为绝对值最小值。这样就完成了对第i个校验节点中所有非零元素的绝对值及符号的更新。
在本实施例中,如图4所示,为了简单的说明该步骤,以 表示a1, 表示a2, 表示a3, 表示a4为例进行说明,其中元素-2的符号为-1,元素3的符号为+1。在第一个校验节点中,绝对值最小值为2,绝对值次小值为3,第一行第一列的位置为绝对值最小值2(即-2的绝对值)所在的位置,该位置的元素的绝对值用3代替,在计算所述位置的符号时,先将-2的符号为-1乘以-3的符号为-1乘以6的符号+1乘以5的符号+1后即得到+1,再将所得到的+1乘以所述位置中元素-2的符号为-1得到-1,则经过行操作后,第一行第一列的位置的元素为-3,同理按照行操作的步骤更新第一个校验节点中其他非零元素。
步骤S14,行列操作模块134利用迭代方法对校验矩阵H中的当前迭代校验节点进行列操作的同时,并行地对当前迭代校验节点的下一个迭代校验节点进行行操作,直到迭代结束。
在本实施例中,以校验矩阵H有四个校验节点(即M取4为例),三个变量节点为例(N取3为例),如在第一次迭代中,当前迭代校验节点为校验矩阵H的第三个校验节点,其下一个迭代校验节点为第四个校验节点;若当前迭代校验节点为第四个校验节点,其下一个迭代校验节点为第一个校验节点,如此循环。详见图5所示的步骤S14的细化流程图。
步骤S15,列操作模块135对校验矩阵H中第M个校验节点进行列操作以得到每个变量节点中第M个子矩阵的后验似然信息,并记录每个变量节点中第M个子矩阵的后验似然信息中每个非零元素的符号。
当每次迭代中,完成了所述第M个校验节点的列操作时,即完成了所述每个变量节点的p个列和就完成了一次迭代更新。并记录所述每个变量节点的p个列和中每个非零元素的符号以作为译码输出。
步骤S16,输出模块136将存储芯片12中所存储的所述每个变量节点的p个列和中每个非零元素的符号作为译码输出,并通过输出装置17输出。
如图5所示,是本发明准循环LDPC码译码方法的较佳实施例的行列操作的流程图。
步骤S140,行列操作模块134利用行列流水线的方法,在对校验矩阵H的第m-1个校验节点进行列操作以得到每个变量节点中第m-1个子矩阵的后验似然信息时,并行地对第m个校验节点进行行操作以更新第m个校验节点中所有的非零子矩阵中的非零元素。m依次取大于1且不大于M的正整数,即m依次取2、3、….M。
详细地,所述行列流水线是指在任意一次迭代过程中,在对第一个校验节点进行列操作的同时,进行第二个校验节点的行操作;对第二个校验节点进行列操作的同时,进行第三个校验节点的行操作;依次类推,同时对第M-1个校验节点进行列操作和对第M个校验节点进行行操作。所述行操作及列操作都是对校验矩阵H中的非零子矩阵中的非零元素进行处理。
所述对第m-1个校验节点进行列操作,是通过一级二输入加法器计算得到每个变量节点中第m-1个子矩阵(即第m-1个校验节点)的后验似然信息,并根据所述后验似然信息来更新每个变量节点中第m个子矩阵的非零元素。
对每个变量节点中的每个非零子矩阵进行列操作后所计算出的后验似然信息作为每个变量节点的p个列和,这样当完成一次列操作就可更新一次每个变量节点的p个列和,当每个变量节点的所有非零子矩阵的后验似然信息都计算出来后,所述每个变量节点的p个列和就完成了一次迭代更新。
详细地,计算每个变量节点中第m-1个子矩阵的后验似然信息的步骤如下:
在每个变量节点中,会有M个p×p子矩阵,当所述第n个变量节点中第m-1个子矩阵为非零子矩阵时,所述第n个变量节点中第m-1个非零子矩阵的后验似然信息为:第n个变量节点的p个列和的第t列与所述第n个变量节点中第m-1个子矩阵中第t列的非零元素之和再减去所述第n个变量节点中第m个子矩阵中第t列的非零元素所得到的差值。即所得到的每个所述后验似然信息为1×p的矩阵。其中,t依次取1到p间正整数,n依次取1到N间正整数。并将所述1×p的矩阵作为更新后的第n个变量节点的p个列和。
当所述第n个变量节点中第m-1个子矩阵及第m个子矩阵均为非零子矩阵时,所述行列操作模块134将所述第n个变量节点中第m个子矩阵中第t列的非零元素用所述第n个变量节点中第m-1个子矩阵的后验似然信息所对应的所述1×p的矩阵中第t列的元素代替。
当所述第n个变量节点中第m-1个子矩阵为零子矩阵时,所述第n个变量节点中第m-1个子矩阵的后验似然信息不需要更新,所述第n个变量节点中第m个子矩阵的元素也就不用更新,直接对第m个校验节点中第n个子矩阵进行行操作。
所述第m个校验节点的行操作与所述步骤S13中的步骤(a)、(b)、(c)相同。在所述第m个校验节点进行行操作时,需要用到每个变量节点中第m-1个子矩阵的后验似然信息。
在本实施例中,如图4所示,为了清楚地解释上述步骤,以校验矩阵H由3个校验节点及5个变量节点组成(即为3×5的矩阵)为例,其中用a1、a2、a3…a9表示其所在位置的子矩阵为非零p×p子矩阵。在步骤S13中对第一个校验节点进行行操作,由于第一个校验节点中有a1、a2、a3、a4四个非零的p×p子矩阵,需连续的4个时钟周期来完成步骤S13;步骤S140中在对第一个校验节点的非零子矩阵进行列操作时,同时对第二个校验节点的非零子矩阵进行行操作。
在步骤S140中对第二个校验节点的第一个非零子矩阵a5进行行操作时,需要用到第一个变量节点的第1个子矩阵a1的后验似然信息来更新a5,a1的后验似然信息由对第1个校验节点的第1个非零子矩阵a1进行列操作得到,在第5个时钟周期内产生,因此第二个校验节点的a5的行操作将暂停一个时钟周期等待a1的后验似然信息的更新。在第6个时钟周期内,对a5进行行操作时,同时处理第2个变量节点的第1个子矩阵a2的后验似然信息,在第7个时钟周期内,得到第4个变量节点的第1个子矩阵a3的后验似然信息,在第8个时钟周期内,得到第5个变量节点的第1个子矩阵a4的后验似然信息,第9个时钟周期内,对a6进行行操作时,需要由a4的后验似然信息来更新a6,再对a6进行行操作。
同理,对第3个校验节点进行行操作将不需要等待时钟周期,因为第3个校验节点的非零子矩阵是第2、3、4个,而第2个校验节点的第2、3、4个子矩阵是全0子矩阵,所述第2个校验节点的第2、3、4个子矩阵的后验似然信息不需要更新,因此所述第3个校验节点的第2、3、4个非零子矩阵的元素不需要更新,直接在第10个时钟周期内处理第3个校验节点的第2个子矩阵,在第11个时钟周期内处理第3个校验节点的第3个子矩阵,在第12个时钟周期内处理第3个校验节点的第4个子矩阵。
所述每个校验节点的行操作即为由校验节点的信息传递到变量节点上的过程,仅需将由行操作所得到的所述校验节点的绝对值最小值、次小值、所述校验节点的非零子矩阵中每个元素的符号、绝对值最小值的位置存储于存储芯片12中。所述列操作即为每个变量节点传递到校验节点的信息,仅需将由列操作所得到的每个变量节点的p个列和存储于存储芯片12中,而且无需额外的存储芯片来存储信道似然信息,节省了存储资源,从而节省了存储芯片面积。
步骤S141,行列操作模块134根据当前迭代次数Iteration是否达到最大迭代次数Max-Iteration判断是否停止迭代。
当所述当前迭代次数Iteration不等于Max-Iteration时,执行步骤S142;当所述当前迭代次数Iteration等于Max-Iteration时,执行步骤S15。
步骤S142,行列操作模块134利用行列流水线的方法,在对当前迭代次数Iteration中第M个校验节点进行列操作以得到每个变量节点中第M个子矩阵的后验似然信息时,并行地对当前迭代次数Iteration的下一次迭代(Iteration+1)中第一个校验节点进行行操作以更新第一个校验节点中所有的非零子矩阵中的非零元素,完成该步骤后,返回执行步骤S140。
通过本发明,其采用行列流水线的方法对非零子矩阵串行执行,在对校验节点的行操作中利用一级二输入比较器,对变量节点的列操作中利用一级二输入加法器,从而使关键路径降低,同时也保证每次迭代的时钟周期数最少,又能保证码间无间隙,从而提高吞吐率;在译码的过程中,仅需将由行操作所得到的所述校验节点的绝对值最小值、次小值、所述校验节点的非零子矩阵中每个元素的符号、绝对值最小值的位置存储于存储芯片中及将由列操作所得到的每个变量节点的p个列和存储于存储芯片中无,而且无需额外的存储芯片来存储信道似然信息,节省了存储资源,从而节省了芯片面积。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。