发明名称 非规则低密度奇偶校验码的系统码设计方法及其通信系统
摘要 非规则低密度奇偶校验码的系统码设计方法及其通信系统属于通信信道编码技术领域,其特征在于,它提出了一种面向硬件实现的非规则LDPC码的系统码的设计方法:首先用半随机生成法得到一个基校验矩阵H<SUB>b</SUB>,再把基矩阵的每个元素都扩展为一个方块子阵,由此得到非规则LDPC码的校验矩阵;它在生成上述H<SUB>b</SUB>时先对行/列重量分布式作预变换;在扩展时引入了行/列非零元素个数大于1的特殊矩阵E以产生系统码,简化编码器结构;在产生伪随机单位交织阵时,引入了基于伽罗华域域元素乘方的交织方法,以保证不会带来译码损失,也便于硬件实现时对存储器的寻址。它具有编码复杂度低,硬件实现简单和避免纠错性能损失的优点。
申请公布号 CN1558556A 申请公布日期 2004.12.29
申请号 CN200410039235.8 申请日期 2004.02.09
申请人 清华大学 发明人 殷柳国;陆建华
分类号 H03M13/09;H03M13/27 主分类号 H03M13/09
代理机构 代理人
主权项 1.非规则低密度奇偶校验码的系统码设计方法,其特征在于,它是通过一台PC机依次按照以下步骤实现的;(1),初始化:根据设定的M<sub>b</sub>×N<sub>b</sub>维全零基矩阵和ILDPC即非规则低密度奇偶校验码行/列重量分布式参数按下式确定基矩阵中各阶和/积节点的数量以及基矩阵各行/列应有的非零元素个数;根据ILDPC码的行/列重量分布参数以及相应的分布式得到下列对应j阶和节点和i阶积节点的个数n<sub>b</sub>(j)、m<sub>b</sub>(i)分别为:<maths num="001"><![CDATA[ <math><mrow><msub><mi>n</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><msub><mi>N</mi><mi>b</mi></msub><mo>&CenterDot;</mo><mfrac><mrow><msub><mi>&lambda;</mi><mi>j</mi></msub><mo>/</mo><mi>j</mi></mrow><mrow><munderover><mo>&Integral;</mo><mn>0</mn><mn>1</mn></munderover><mi>&lambda;</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mi>dx</mi></mrow></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="002"><![CDATA[ <math><mrow><msub><mi>m</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>=</mo><msub><mi>M</mi><mi>b</mi></msub><mo>&CenterDot;</mo><mfrac><mrow><msub><mi>&rho;</mi><mi>i</mi></msub><mo>/</mo><mi>i</mi></mrow><mrow><munderover><mo>&Integral;</mo><mn>0</mn><mn>1</mn></munderover><mi>&rho;</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mi>dx</mi></mrow></mfrac><mo>;</mo></mrow></math>]]></maths>其中,λ<sub>j</sub>为非零元素个数即重量为j的列在矩阵中所占的份量,d<sub>v</sub>为矩阵中列重量的最大的值;ρ<sub>i</sub>表示重量为i的行在矩阵中所占的份量,d<sub>0</sub>为矩阵中行重量的最小值,d<sub>c</sub>为矩阵中行重量的最大值;对于上述ILDPC码,上述n<sub>b</sub>(j)、m<sub>b</sub>(i)预变换为M<sub>b</sub>×N<sub>b</sub>维基矩阵的各阶和节点、各阶积节点的个数n<sub>b</sub>′(j)、m<sub>b</sub>′(i):<img file="A2004100392350002C3.GIF" wi="593" he="203" /><img file="A2004100392350002C4.GIF" wi="1021" he="337" />(2),生成基矩阵的非零元素:(2.1),把全零矩阵左边M<sub>b</sub>×M<sub>b</sub>部分对角线的‘0’元素置换成‘1’,得到M<sub>b</sub>×M<sub>b</sub>维单位阵I<sub>Mb×Mb</sub>;(2.2),根据上述设定的n<sub>b</sub>′(j)和m<sub>b</sub>′(i),通过随机搜索的方法产生基矩阵右边N<sub>b</sub>-M<sub>b</sub>列的非零元素:(2.2.1),列方向上非零元素的置换:对矩阵中的第k列(M<sub>b</sub><k≤N<sub>b</sub>),从N<sub>b</sub>个列重量中随机抽出一个列重量L<sub>k</sub>作为该列的重量,再从该列的M<sub>b</sub>个行位置中随机选取L<sub>k</sub>个行位置,并把该L<sub>k</sub>个行位置中的零元素置换为非零元素‘1’;若这一置换使矩阵产生了众知的周期为4的小循环,则删除掉这一列的所有非零元素并重新选取L<sub>k</sub>个位置进行非零元素置换,直到使该列得到不产生周期为4的小循环的L<sub>k</sub>个非零元素为止;重复上述步骤,直到所有的列方向上都完成非零元素的生成为止;(2.2.2),行方向上的非零元素的置换,即在避免产生周期为4的小循环的条件下,把非零元素从数量过多的行调整到数量过少的行:计算基矩阵第i行的非零元素个数N<sub>i</sub>,然后判断是否小于该行所设定的值N<sub>i0</sub>;若N<sub>i</sub><N<sub>i0</sub>,则转到基矩阵下一行继续进行调整;如果N<sub>i</sub><N<sub>i0</sub>,则从基矩阵各行中寻找非零元素个数大于设定值的行i’;随后从i’行中选取一个列位置大于M<sub>b</sub>的非零元素,并将该元素转移到第i行的同列位置,再判断这一转移没有带来周期为4的小循环:如果这一转移没有带来周期为4的小循环,则调整保留,使i行的N<sub>i</sub>加1;若有则非零元素被删除;如此循环,一直到i’行所有列位置大于M<sub>b</sub>的非零元素都已经尝试过都已尝试过调整到第i行相应的元素为零的列上为止;再接着重新随机选取非零元素个数大于设定值的行i″,重复以上步骤,直到第i行的非零元素个数满足要求;当所有的行的非零元素个数满足要求以后,所得的基矩阵就是所求的基矩阵,该基矩阵可用下式表示:<maths num="003"><![CDATA[ <math><mrow><msub><mi>H</mi><mi>b</mi></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd><msub><mi>I</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msub><mi>M</mi><mi>b</mi></msub></mrow></msub></mtd><mtd></mtd><mtd><mi>&pi;</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></msub><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></msub><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,<img file="A2004100392350003C2.GIF" wi="112" he="52" />是一个M<sub>b</sub>×M<sub>b</sub>维单位阵,<maths num="004"><![CDATA[ <math><mrow><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow></mrow></msub><mrow><mo>(</mo><mn>3</mn><mo>&le;</mo><mi>j</mi><mo>&le;</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths>是一个M<sub>b</sub>×n<sub>b</sub>′(j)维、每列有j个非零元素的二元矩阵,π(·)代表一个列方向上的伪随机交织;(3),矩阵的扩展:首先,程序产生一个M×N维的全零矩阵H,并分成M<sub>b</sub>×N<sub>b</sub>个L×L维子矩阵,使每个子矩阵与基矩阵的一个元素相对应;再把基矩阵中<img file="A2004100392350003C4.GIF" wi="113" he="52" />部分非零元素所对应的H矩阵的子模块替换成一个行/列非零元素个数大于1的特殊矩阵E,可用下式表示:<img file="A2004100392350003C5.GIF" wi="518" he="347" />再通过随机交织法对基矩阵右边N<sub>b</sub>-M<sub>b</sub>列的非零元素所对应的H矩阵模块进行非零元素填充,其具体步骤为:先对基矩阵右边N<sub>b</sub>-M<sub>b</sub>列的每个非零元素,程序用以下方式选取一组参数<maths num="005"><![CDATA[ <math><mrow><mo>{</mo><mi>k</mi><mo>&Element;</mo><mo>{</mo><mn>0,1,2,3</mn><mo>}</mo><mo>,</mo><msup><mi>&alpha;</mi><msub><mi>j</mi><mn>0</mn></msub></msup><mo>,</mo><msup><mi>&alpha;</mi><msub><mi>j</mi><mn>1</mn></msub></msup><mo>&Element;</mo><mi>GF</mi><mrow><mo>(</mo><msup><mn>2</mn><mi>p</mi></msup><mo>)</mo></mrow><mo>}</mo><mo>,</mo></mrow></math>]]></maths>构成一个伪随机交织器:k=0时:行方向i:1≤i≤n;列方向:<maths num="006"><![CDATA[ <math><mrow><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>1</mn></msub></msup><mo>&CenterDot;</mo><msup><mrow><mo>(</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>0</mn></msub></msup><mo>)</mo></mrow><mi>j</mi></msup><mo>:</mo><mn>0</mn><mo>&le;</mo><mi>j</mi><mo>&le;</mo><mi>n</mi><mo>;</mo></mrow></math>]]></maths>k=1时:行方向:n+1-i:1≤i≤n;列方向:<maths num="007"><![CDATA[ <math><mrow><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>1</mn></msub></msup><mo>&CenterDot;</mo><msup><mrow><mo>(</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>0</mn></msub></msup><mo>)</mo></mrow><mi>j</mi></msup><mo>:</mo><mn>0</mn><mo>&le;</mo><mi>j</mi><mo>&le;</mo><mi>n</mi><mo>;</mo></mrow></math>]]></maths>k=2时:行方向:i:1≤i≤n;列方向:<maths num="008"><![CDATA[ <math><mrow><mi>n</mi><mo>+</mo><mn>1</mn><mo>-</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>1</mn></msub></msup><mo>&CenterDot;</mo><msup><mrow><mo>(</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>0</mn></msub></msup><mo>)</mo></mrow><mi>j</mi></msup><mo>:</mo><mn>0</mn><mo>&le;</mo><mi>j</mi><mo>&le;</mo><mi>n</mi><mo>;</mo></mrow></math>]]></maths>k=3时,行方向:n+1-i:1≤i≤n;列方向:<maths num="009"><![CDATA[ <math><mrow><mi>n</mi><mo>+</mo><mn>1</mn><mo>-</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>1</mn></msub></msup><mo>&CenterDot;</mo><msup><mrow><mo>(</mo><msup><mi>&alpha;</mi><msub><mi>i</mi><mn>0</mn></msub></msup><mo>)</mo></mrow><mi>j</mi></msup><mo>:</mo><mn>0</mn><mo>&le;</mo><mi>j</mi><mo>&le;</mo><mi>n</mi><mo>;</mo></mrow></math>]]></maths>其中,GF(2<sup>p</sup>)为伽罗华域,p为素数,α为域GF(2<sup>p</sup>)中的一个本源元素,且L=2<sup>p</sup>-1;然后,用上述所得伪随机交织器对L×L维单位阵进行交织,得到一个伪随机交织单位阵,再把它用于替换基矩阵中右边相应元素所对应的H矩阵模块;若这一替换不产生周期为4的小循环,则替换保留,重新产生一组参数并产生相应的伪随机交织单位阵,进行下一基矩阵右边N<sub>b</sub>-M<sub>b</sub>列非零元素所对应H矩阵模块的替换;若替换产生了周期为4的小循环,则替换删除,重新产生一组参数并产生相应的伪随机交织单位阵,再次进行替换,直到不产生周期为4的小循环为止;于是得到下述ILDPC码的校验矩阵:<img file="A2004100392350004C6.GIF" wi="1626" he="244" /><img file="A2004100392350004C7.GIF" wi="657" he="202" />相应地,ILDPC码的生成矩阵可以表示成为:<img file="A2004100392350004C8.GIF" wi="1362" he="222" />2.ILDPC码纠正传输差错的通信系统,其特征在于,它依次由产生数字信息流的信源、ILDPC编码器、传输信道以及纠正传输错误的ILDPC译码器串连而成,其中:ILDPC编码器采用M<sub>b</sub>路并行的部分并行结构,它依次由输入存储器阵列MEMI,校验比特生成器PCBGU,以及输出多路选择器Multiplex串联构成,其中:MEMI由Q-M<sub>b</sub>个长度为L的存储器组成,每个存储器与基校验矩阵H<sub>b</sub>右边部分<maths num="010"><![CDATA[ <math><mrow><mi>&pi;</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></msub><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><msubsup><mrow><mo>&times;</mo><mi>n</mi></mrow><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></msub><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></msub><mo>)</mo></mrow></mrow></math>]]></maths>的1个非零元素一一对应;所有存储器的输入端都通过总线的方式实现与编码器数据输入端的连接,矩阵<maths num="011"><![CDATA[ <math><mrow><mi>&pi;</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></msub><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><msubsup><mrow><mo>&times;</mo><mi>n</mi></mrow><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></msub><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></msub><mo>)</mo></mrow></mrow></math>]]></maths>同一列非零元素所对应的存储器都具有相同的写入寻址模式;校验比特生成器PCBGU,它有M<sub>b</sub>个校验比特生成单元,第k个校验比特生成模块PCBGU<sub>k</sub>与上述矩阵<maths num="012"><![CDATA[ <math><mrow><mi>&pi;</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></msub><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><msubsup><mrow><mo>&times;</mo><mi>n</mi></mrow><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></msub><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></msub><mo>)</mo></mrow></mrow></math>]]></maths>第k行的非零元素所对应的所有存储器的输出端相连,1≤k≤M<sub>b</sub>;所述的每一个校验比特生成单元PCBGU<sub>k</sub>都由一个多路求和器与一个卷积电路串联而成,所述卷积电路由一个加法器与一个寄存器串联而成,而寄存器的输出端又与上述加法器的另外一个输入端相连;多路选择器Multiplex具有以M<sub>b</sub>+1个数据输入端和一个数据输出端,它的输入端分别连接到编码器信息比特输入端以及M<sub>b</sub>个校验比特生成单元的输出端,输出端即为编码器的输出端;在编码过程中,多路选择器通过时分复用的方式实现M<sub>b</sub>+1路数据的合路;ILDPC译码器,它的输入信号为来自传输信道的包含差错的码流,该ILDPC译码器是一个采用N<sub>b</sub>路和节点以及M<sub>b</sub>路积节点并行的部分并行结构,它由和节点处理阵列VNCU、积节点处理阵列CNCU、输入输出存储阵列MEMIO、和节点存储阵列MEMV以及积节点存储阵列MEMC构成,其中:和节点存储阵列MEMV和积节点存储阵列MEMC分别由Q+M<sub>b</sub>个长度为L的存储器组成,其中,MEMV阵列的存储器用于存储迭代译码中从积节点输出且经过处理后到和节点的数据,而MEMC阵列的存储器用于存储迭代运算中从和节点输出且经过处理后到积节点的数据;基校验矩阵H<sub>b</sub>右边部分<maths num="013"><![CDATA[ <math><mrow><mi>&pi;</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></msub><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><msubsup><mrow><mo>&times;</mo><mi>n</mi></mrow><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></msub><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msub><mi>P</mi><mrow><msub><mi>M</mi><mi>b</mi></msub><mo>&times;</mo><msubsup><mi>n</mi><mi>b</mi><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>d</mi><mi>v</mi></msub><mo>)</mo></mrow></mrow></msub><mo>)</mo></mrow></mrow></math>]]></maths>的每个非零元素都在MEMV和MEMC阵列中有1个存储器与之对应,而基校验矩阵H<sub>b</sub>左边部分<img file="A2004100392350005C2.GIF" wi="111" he="50" />的每个非零元素都在MEMV和MEMC阵列中分别有两个存储器与之对应,其中一个存储器用于存储E矩阵对角线非零元素所对应的和/积节点输出结果,而另外一个存储器则用于存储次对角线非零元素所对应的和/积节点输出结果;和节点处理阵列VNCU共有N<sub>b</sub>个并行的运算单元,每个单元各含有:一个多路求和电路,它的输入端为一个码元解调软信息的输入端LLR_in以及j个从对应积节点输入到该和节点的数据输入端x1_in~xj_in,即所述和节点处理阵列VNCU第j个处理单元VNCU<sub>j</sub>的一个输入端与MEMV中与基矩阵第i第j列非零元素对应的存储器的输出端相连;相互串联的一个加法器和一个ROM表格,共有j个,其中,j个加法器的“+”端都与上述多路求和电路输出端相连,而“-”端分别与各个输入端xj_in相连,而j个ROM表格的输出端即为x1_out~xj_out,它们是从该和节点输出到对应积节点的迭代数据;M<sub>b</sub>个积节点处理阵列CNCU,每个单元各含有:一个多路求和器,它的输入端为i个从对应和节点输入到该积节点的数据输入端x1_in~xi_in,即所述和节点处理阵列CNCU第i个处理单元CNCU<sub>i</sub>的一个输入端与MEMC中与基矩阵第i第j列非零元素对应的存储器的输出端相连;相互串联的一个加法器和一个ROM表格,共有i个,其中,i个加法器的“+”端都与上述多路求和电路输出端相连,而“-”端分别与x1_in~xi_in各个输入端相连,而i个ROM表格的输出端即为x1_out~xi_out,它们是从该积节点输出到对应和节点的迭代数据,也就是说,MEMV中基矩阵第i第j列非零元素对应的存储器的输入端是连接到和节点处理阵列CNCU第i个处理单元CNCU<sub>i</sub>的一个输出端的;输入输出存储阵列MEMIO由2×N<sub>b</sub>个长为L的存储器构成,其中N<sub>b</sub>个存储器用于存储从信道解调器输入到ILDPC译码器的码元解调软信息,这些存储器的输入端采用总线方式连接形成ILDPC译码器的数据输入端,而它们的输出端分别连接到N<sub>b</sub>个和节点处理单元的LLR_in输入端;另外的N<sub>b</sub>个存储器用于存储译码器迭代译码结果,它们的输出端分别与N<sub>b</sub>个和节点处理单元VNCU<sub>j</sub>的dec_out输出端连接,而它们的输出端采用总线方式连接形成ILDPC译码器的数据输出端;所述的ILDPC编译码器采用现场可编程逻辑门阵列FPGA实现。
地址 100084北京市100084-82信箱