基于Single Block Row QC-LDPC的时间非均匀分配的列-层
译码方法及架构
技术领域
本发明涉及一种适用于Single Block Row QC-LDPC译码方法及架构,属于无线通信技术领域。
背景技术
LDPC码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术条件,缺乏可行的译码算法,此后的35年间基本上被人们忽略,其间由Tanner在1981年推广了LDPC码并给出了LDPC码的图表示,即后来所称的Tanner图。1993年Berrou等人发现了Turbo码,在此基础上,1995年前后MacKay和Neal等人对LDPC码重新进行了研究,提出了可行的译码算法,从而进一步发现了LDPC码所具有的良好性能,迅速引起强烈反响和极大关注。经过十几年来的研究和发展,研究人员在各方面都取得了突破性的进展,低密度奇偶校验码(Low Density Parity Check,LDPC)码的相关技术也日趋成熟,甚至已经开始有了商业化的应用成果,并进入了无线通信等相关领域的标准。现阶段LDPC码有很多种类,单行块准循环低密度奇偶校验码(Single Block Row Quasi-Cyclic Low Density ParityCheck,Single Block Row QC-LDPC)作为一种特殊的LDPC码,其高码率(信息比特个数与码长之比),规律性强的特点,使其更适于高速通信,并且对硬件更加友好。
Single Block Row QC-LDPC存在的主要缺点是,相比较其他类型的LDPC码,这种编码方式使得误码率相对较高,这种缺点来源于其非常高的码率。
发明内容
发明目的:针对Single Block Row QC-LDPC误码率高的问题,本发明提出基于Single Block Row QC-LDPC的时间非均匀分配的列-层译码方法及架构,基于QC-LDPC列-层译码,通过区分层的重要性,对不同层分配不同时间,在不增加时间消耗的情况下,提高了解码器性能。
技术方案:除了最小值来源的变量节点单元(Variable Node Unit,VNU),几乎所有的校验节点到变量节点信息(Check Node to Variable Node Message,c-to-vMessage)的值是由变量节点到校验节点信息(Variable Node to Check Node Message,v-to-c Message)最小值和符号生成的,因此v-to-c信息最小值的正确率很大程度上影响着每次迭代过程的效率。而Single Block Row QC-LDPC码具有很强的规律性,通过选择合适层的划分方法,可以使各个层之间存在循环移位的关系,由此泰纳图连接(Tanner graphinterconnection)可以被大大简化,需要的CNU数量成倍减少,并且可以提高译码性能。
本发明提出一种基于Single Block Row QC-LDPC的时间非均匀分配的列-层译码方法,通过对层合适选取,使每层的CNU至多只和一个VNU相连,当CNU更新时,只用层的序号就可以分辨出具体的VNU;同时通过将列-层解码分为两部分,一部分做遍历式的更新,更新所有层,一部分做特殊层的更新,即含有v-to-c信息最小值的层,两部分交替进行来得到更加好的解码效果,同时只增加少量硬件复杂度,具体包括如下步骤:
1)用来自信道的信息对存储器(Memory)进行初始化,得到k个绝对值最小的v-to-c信息和这k个v-to-c信息所在层序号,以及所有v-to-c信息的符号储存在存储器中;
2)控制模块(Control Module)根据存储器中保存的层的序号产生下一时刻应更新的层的序号,用于更新特殊层,具体实现方法为:翻译单元(Translate Block)从存储器中读出v-to-c最小值所在层的序号,将每个序号通过一个多线译码器成为一串只含有一个‘1’其余为‘0’的序列,然后将这些得到的序列按位逻辑或形成一串新的序列传送给判断单元(Judge Block),判断单元将控制向量C置为100,使得控制单元(Control Block)用来自翻译单元的信息给其寄存器赋值,并将下一时刻要更新的层的序号送给移位器(BarrelShifter);
3)存储器通过移位器把信息送给对应的CNU,完成指定层的更新,具体实现方法为:所有与该层相连的CNU由存储器中的信息产生c-to-v信息传给与其相连的VNU,同时产生临时向量(Temp vector)送给数据分配器(Data Distributor),其中临时向量包括来自存储器的k个绝对值最小的v-to-c信息除去与当前更新层序号相同的v-to-c信息,以及这些v-to-c信息对应的层序号;VNU接到c-to-v信息求得输出信息来做硬判决,求得对应CNU的v-to-c信息并送给数据分配器;数据分配器通过对临时向量和v-to-c信息处理,得到新的得到k个绝对值最小的v-to-c信息和这k个v-to-c信息所在层序号,以及所有v-to-c信息的符号,并送 给存储器保存。
其中,CNU根据从移位器得到的信息产生c-to-v信息和临时向量的具体方法为的具体方法为:比较器(COMP)比较当前更新层的序号与由存储器得到的k个绝对值最小的v-to-c信息的层序号,将结果给两个选择器(MUX),若当前层序号与第一最小值所在层序号相同,则选择器1给出v-to-c信息绝对值第二最小值作为c-to-v信息的绝对值,否则输出v-to-c信息绝对值最小值作为c-to-v信息的绝对值,异或门将除了与该层序号相同的所有v-to-c信息的符号异或后作为c-to-v信息的符号输出;选择器2将k个绝对值最小的v-to-c信息除去与当前更新层序号相同的v-to-c信息,以及这些v-to-c信息对应的层序号作为临时向量输出。
VNU根据接到的c-to-v信息求得输出信息的具体方法为:将接到的c-to-v信息求和。
VNU求得对应CNU的v-to-c信息的具体方法为:用输出信息减去来自该CNU的c-to-v信息。
数据分配器处理的具体方法为:将得到的新的来自VNU的v-to-c信息的绝对值与临时向量中的元素比较,选出绝对值最小的k个值作为k个绝对值最小的v-to-c信息,同时保存他们的层序号,并在原来所有v-to-c信息的符号中更新这k个值的符号得到新的所有v-to-c信息的符号,然后将所有得到的信息送给存储器保存。
4)控制模块产生下一时刻应更新的层的序号,用于继续该更新,具体的实现方法为:判断单元将控制向量C置为010,使得控制单元用来自其寄存器输出序列的每一位与该位前面所有位的非通过与门得到一新序列的该位,新序列经过多线编码器将下一时刻要更新的层的序号送给移位器,并与寄存器输出序列按位异或作为寄存器的输入;
5)VNU首先根据其输出对其对应位的比特进行硬件判决得到码子,如果输出为正则码字的该位比特判为1,否则判为0,然后对得到的码字进行判决,如果得到合法码字或者超时则跳转至9),否则判断单元判断特殊层更新是否完毕,如果完毕跳转至6)进行所有层的更新,否则跳转至3)继续更新特殊层;
6)控制模块产生下一时刻应更新的层的序号,用于更新所有层,具体实现 方法为:判断单元将控制向量C置为001,使得控制单元用一串全为1的比特序列对其中的寄存器赋值,并将下一时刻要更新的层的序号送给移位器;
7)重复步骤3)和4);
8)VNU首先根据其输出对其对应位的比特进行硬件判决得到码子,如果输出为正则码字的该位比特判为1,否则判为0,然后对得到的码字进行判决,如果得到合法码字或者超时则跳转至9),否则判断单元判断一般层更新是否完毕,如果完毕跳转至2)更新特殊层,否则跳转至7)继续更新一般层;
9)输出最后的译码结果。
本发明还提出一种基于Single Block Row QC-LDPC的时间非均匀分配的列-层译码方法的架构,包括:存储器、控制模块、移位器、内部信息模块、CUN、VUN和数据分配器,具体的:存储器用于存储k个绝对值最小的v-to-c信息和这k个v-to-c信息所在层序号,以及所有v-to-c信息的符号;
控制模块用于控制特殊层更新和一般层更新的交替,产生下一时刻应更新的层的序号,包括翻译单元、判断单元和控制单元,其中翻译单元用于将存储器的最小值所在的层信息翻译为一条二进制序列传给控制单元;判断单元用于使控制单元实现对特殊层更新和所有层更新的控制;控制单元用于控制特定序号的层的更新,并将下一时刻要更新的层的序号送给移位器;
移位器用于根据控制信号对存储器进行移位操作,使得CNU能够得到对应存储器中对应层的信息;
内部信息模块用于存储来自信道的信息,在VUN求和时使用;
CNU用于根据从移位器得到的信息产生c-to-v信息,并传给与其相连的VUN;
VUN用于对来自CNU的c-to-v信息与来自内部信息模块的信道信息进行处理,得到VUN输出和对应的v-to-c信息,并将更新的v-to-c信息传给数据分配器;
数据分配器用于根据来自VNU的信息求出得到k个绝对值最小的v-to-c信息和这k个v-to-c信息所在层序号,以及所有v-to-c信息的符号,并传给对应的存储器。
有益效果:本发明在原有列-层译码的算法的基础上进行改进,通过对不同 的层分配不同的时间,使得更重要的层可以被分配更多的时间,从而影响整个译码的性能。经过多次仿真,该方法与传统层-列算法比增益大概有0.3dB,比特误率在信噪比5dB时,下降了约30%。本发明保持了普通列-层译码算法的各种优点,以很小硬件代价换取了较为可观的性能提高。
附图说明
图1为在(1360,1275)的码下各种算法的误码率比较;
图2为在(2115,1974)的码下各种算法的误码率比较;
图3为本发明架构的整体结构示意图;
图4为CNU的结构示意图;
图5为Data distributor结构示意图;
图6为Control module中Translate block结构示意图;
图7为Control module中Judge block结构示意图;
图8为Control module中Control block结构示意图;
图9为Barrel shifter的结构示意图。
具体实施方式
下面结合具体实施案例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
1、传统的层-列算法
初始化:
用信道信息初始化v-to-c信息;
找到k个v-to-c信息绝对值的最小值和这些最小值所在层的序号,并保存下来;
迭代译码:
按顺序依次更新所有的层,每层更新步骤为:CNU将存储器中的c-to-v信息传给VNU,VNU接到c-to-v信息与信道信息求和得到v-to-c信息和用于硬判决的软信息,CNU收到来自VNU的v-to-c信息,并将其处理为新的c-to-v 信息,对软信息做硬判决得到输出码字,若为正,则该位比特为1,否则为0,判断输出是否为合法码字,若为非法码字且迭代次数未到上限,则在此重复上述过程,否则停止译码并输出。
2、时间非均匀分配的列-层译码算法
在传统的列-层算法基础上,通过添加一轮特殊层的更新,即那些包含v-to-cmessage最小值的层,来保证最小知的可靠性,从而取得好的译码效果。
初始化:
用信道信息初始化c-to-v信息;
找到k个v-to-c信息绝对值的最小值和这些最小值所在层的序号,并保存下来;
此外不同于传统的方法,本方法需要保存那些包含v-to-c信息最小值层的序号;
迭代译码:
while clk≤Clknummax and yHT≠0do
与传统方法不同,本方法对那些所有包含c-to-v信息绝对值最小值的层要着重更新一次,每层更新的方法与传统方法相同,对这些层更新完后,输出码字并做判断,如果合法或者迭代次数达到上限,则停止并输出码字。
对那些需要重点关注的层多做一次更新后,下面对所有层遍历更新一次,每层更新方式与前面相同。对所有层更新完后,输出码字并做判断,如果合法或者迭代次数达到上限,则停止并输出码字。
3、本发明具体操作方法和相应的硬件架构
图3给出了该译码器的整体构架,包括存储器(Memory)、控制模块(ControlModule)、移位器(Barrel Shifter)、内部信息模块、校验节点单元(CUN)、变量节点单元(VUN)和数据分配器(Data Distributor),存储器中的信息通过移位器重新分配给CNU,CNU计算出c-to-v信息送给VNU,VNU计算出v-to-c信息送给数据分配器,数据分配器找出最小的三个值及其所在层的序号以及符号送给存储器。
图4给出了CNU的框架。CNU接收来自移位器的数据,这些数据包含最小的三个v-to-c信息的绝对值的最小值、他们所在层的序号和符号信息。CNU判断要更新的VNU的层序号是否与来自移位器的最小值层序号相等,如果是,则c-to-v信息的值等于第二最小值乘以符号位;如果不是,则c-to-v信息的值等于最小值乘以符号位;同时CNU会给数据分配器一个临时向量(temp vector)用于其更新存储器中的信息。
VNU的框架即经典VNU框架,里面由加法器和减法器构成,通过将CNU给的数据与信道信息求和并取符号位得到码字。将求和的数据分别减去来自序号为c的CNU提供的c-to-v信息成为v-to-c信息给数据分配器。
图5给出了数据分配器的构架。数据分配器将临时向量和VNU送来的信息重新组合,选取其中最小的前三个并和该位的符号位一同送给存储器保存,至此完成了以此存储器内容的更新,同时意味着完成了一次层的更新。
图6、图7、图8一起给出了控制模块的结构。存储器将其中最小值所在的层的序号给翻译单元,这些序号通过译码器并按位或运算后得到一个序列,序列长度与层的个数相等,序列为1的位置代表在下个阶段该位对应的层要被更新,该序列被送给控制单元。控制单元由来自判断单元的向量C控制。当从遍历层更新跳转至特殊层更新时,判断模块发送控制向量C=100,控制由翻译单元送来的信息对控制单元的寄存器进行赋值;当由特殊层更新跳转至遍历层更新时,控制单元发送控制向量C=001,使全1比特序列对寄存器赋值;其余情况时C=010,寄存器经过逻辑电路来对自己更新。每个时钟的时候,控制单元都会向移位器送出一个层的序号,使整个***更新对应的层的信息,应用本设计提出的架构,可以做到有选择性的更新层,并且避免了排序等复杂度较高的方法,使得以很小而硬件复杂度作为牺牲,可以较大的增益。
图9给出了移位器的结构,通过给出相应的层的序号,可以相应层的信息正确的送给相应的CNU,这一切都得益于Single block row QC-LDPC的极强规律性。
表1为几种算法在(222,185)码上的硬件比较,通过比较可以看出本发明在硬件上的增加很少,与列-层k=3相比,其VNU,CNU,选择器(MUX),比较器(COMP)的使用个数完全一样,没有增加消耗,而存储器(Memory)的比特数只增加了2%;与列-层k=2相比,列-层k=3和本算法都增加了少量COMP。虽然列-层k=2的Memory bits比列-层k=3和本算减少20%,但的性能最差,在信噪比为5.1dB时,误码率几乎是列-层k=3的3倍,是本算法的10倍。
表1 几种算法在(222,185)码上的硬件比较
复杂度 |
列-层k=2 |
列-层k=3 |
非均匀时间列-层k=3 |
#of VNUs |
6 |
6 |
6 |
#of CNUs |
37 |
37 |
37 |
#of MUX |
(2+3)*18=90 |
(2+3)*18=90 |
(2+3)*18=90 |
#of COMP |
(2+2)*18=72 |
(3+3)*18=108 |
(3+3)*18=108 |
Memory(bits) |
(2*5+2*6+3*6)*37=1480 |
(3*5+3*6+3*6)*37=1924 |
(3*5+3*6+3*6)*37+37+1=1962 |