基于ACE约束的S-IRA编译码器设计
扫描二维码
随时随地手机看文章
摘要:考虑到结构化非规则重复累积码具有准循环的结构便于硬件实现,采用了结构化非规则重复累积码进行编码器设计。准循环矩阵的构造采用了基于ACE约束的PEG填充构造方法。结合所用码型的特点,设计出了简单有效的编码流程图。译码方面,采用了分层修正最小和译码算法,并设计出了译码器结构。
关键词:结构化非规则重复累积码;分层修正最小和译码算法;编码器结构;译码器结构
O 引言
重复累积码(Repeat-Accumulate Codes)是由D.Divsalar等人于1998年提出的,作为LDPC码与Turbo码的一个子集,在译码方面它具有LDPC码优异的性能以及并行译码的优势,在编码方面又同时具有Turbo码线性复杂度的特点,因此受到广泛关注。在实际应用方面,欧洲DVB-S2标准中的信道编码部分采用了RA码的技术。经过近几年的研究,重复累积码有了一些新的发展,如非规则重复累积码(IRA)、扩展重复累积码(elRA)、累积重复累积码(ARA)、结构化的非规则重复累积码(S-IRA)等,这些码对RA码的误码性能、误码平层、编码复杂度以及码率的灵活性等方面进行了改善。
为了减少硬件实现的复杂度,提高编译码器的吞吐量,将校验矩阵构造成准循环形式是一种普遍被采用的方法。因此,考虑到S-IRA码具有准循环形式,本文采用了基于ACE约束的S-IRA码进行编码器设计,使用分层最小和译码算法进行译码器设计。
1 编码器设计
1.1 RA码校验矩阵设计
RA码编码就是将信息位u中的每一位重复q次,经过交织以后输入传输函数为的累加器,经过累加即得到校验位p,完成编码。RA码可分为非系统码和系统码两类,RA码与IRA码系统码的校验矩阵可以表示为H=[H1H2]。H1的列重为{db,t},行重为{dc,i}。H2具有差分形式:
由于H2的差分形式,可以直接使用校验矩阵H进行编码,为了降低编码复杂度,将H1设计成准循环形式,即为结构化的IRA码(S-IRA)。但如果将H1直接构造成准循环形式,H2的双对角线形式会使构造出的校验矩阵最小汉明距离太小,而先构造与H1相同大小的准循环矩阵P,再将P进行行交织得到H1则可以避免这个问题。
在设计校验矩阵时,采用了中提出的基于近似环外信息度(Approximate Cycle Extrinsic Message Degree)约束的边增长算法(PEG)来构造准循环矩阵P。
1.2 编码器结构
编码器最复杂的部分在于信息位u通过准循环矩阵PT,即进行uPT的运算。本文采用上海交通大学无线通信研究所LDPC小组提出的SRAA(shift-register-identity-matrix-ad-der-accumulator)结构进行uPT的运算。
假设准循环矩阵P的大小为M×Q行,K×Q列。其中Q×Q为P中循环置换矩阵和全零矩阵的大小。将信息序列u顺序分成K段,每段长为Q比特,即u=(u1,u2,…,uK),其中。将准循环矩阵P写作:
其中Pi,j为P中的循环置换矩阵或者全零矩阵。在硬件中存储P时,只需存储每个Pi,j第一列“l”元素的位置,当Pi,j为全零矩阵时,存储的位置为O。
假设v=uPT,v=(v1,v2,…,vM),其中,有下式成立:
由(2)式以及(3)式,计算vi的电路如下:
图中的第i个RAM储存对应循环置换矩阵的参数,即的第一行“1”元素的位置,因此每个RAM存储K个“1”元素位置。编码时,每输入Q个信息位,SRAA电路便从RAM中读入循环置换矩阵的参数。
交织器使用一段RAM存储交织顺序,并按存储的顺序读出SRAA中运算结果v,即完成交织。
基于上面的SRAA计算电路本文提出了图5所示的编码器结构。
为了使编码连续进行,在交织器之后以及编码器输出端使用乒乓RAM,如图5中的RAMl和RAM2,以及RAM3和编码流程可分为三步:
Stagel:串行输入信息u,每个输入的信息ui分成两路,一路依次存入Bufferl缓存器,另一路输入uPT计算电路,计算结果v保存在SRAA电路的寄存器中。
Stage2:从Buffer2中将信息位依次读至RAMl、RAM2,Bufferl中的信息依次读至Buffer2,而Bufferl中继续存入新的信息位。交织器将uPT计算电路的计算结果按交织顺序读至累加器,并将产生的校验位输入RAM3、RAM4。
Stage3:将RAMl或RAM2中的信息位u以及RAM3或RAM4中的校验位p依次读出,完成码字的串行输出。
2 译码器设计
译码方面采用了LMMSA算法。为了便于硬件的并行处理,本文采用LMMSA译码算法,在分层上保证每层的列重至多为1。对于前面所提到的S-IRA码,则可以对校验矩阵按照每行为一层进行分层,即从列上看每一层只有一个循环位移矩阵或全零矩阵。
针对上面提到的S-IRA码本文提出了如图6所示的译码器结构。
其中Q=36,M=14,K=14,设计成输入缓存部分以及外信息计算部分。其中外信息计算部分每次计算一层的校验位,因此并行度为Q=36,将接收到的通过信道串行输入的每个信息比特的接收值量化成7位定点数,为了让译码器能连续地接收通过信道传递的信息,输入缓存部分也采用乒乓RAM的形式。由于外信息计算部分的并行度为Q=36,因此输入缓存部分与下一级之间的每次输出/输出均为Q×7位。由于RAMl、RAM2储存外信息值,因此直接对其中的外信息进行硬判决。
对于外信息计算部分,由于每层的列重至多为1,因此每一个外信息计算单元可以在每一层的计算中更新该单元对应行的外信息。
从输入缓存部分输入的外信息与RAMl中的相减得到,将存人RAM2,并输入比较/选择器。当该行的全部计算完毕后,从比较/选择器输出,经过乘法器得到的存入RAMl,并与缓存在RAM2中的相加,得到,即完成一次迭代。由于RAM2中的数据输出可以连续地输入输出,因此在输入完该次迭代的所有后,马上可以接着输入下一次迭代的,从而译码可以连续地进行。
比较/选择器的作用是计算,即2.1.3式的后半部分。由于输出的绝对值只有两种:最大值和次最大值,因此只需得到最大值和次最大值以及各自对应的位置,并记录对应的正负符号,就可以完全确定。
在译码的横向计算过程中,对于某一行,比较/选择器首先初始化,其输入端输入前一级加法器输出的,将输入的符号存入符号寄存器(其中符号寄存器增加一位符号累加位,计算该行的符号),并将||首先与存储器中的最小值比较,如果输入值小于最小值存储器中所存储的值,则将最小值存储器中所存储的值存入次小值存储器,然后将输入值存入最小值存储器,并在最小/次小选择寄存器中记录最小值位置,接着开始下一个值的比较;如果输入值大于最小值存储器中所存储的值,则接着与次小值存储器中的值比较,如果输入值小于次小值存储器中的值,则将输入值存入次小值存储器,接着进行下一个输入值的比较,如果输入值大于次小值存储器中的值,则直接进行下一个输入值的比较。当该行所有都处理完毕后,则按照符号寄存器中的符号依次输出,并按照最小/次小选择寄存器中记录选择依次输出最小值或次小值,即。
3 仿真结果及分析
图lO中黑色曲线为本文提出的RA码构造方法所构造出码字的误码率曲线和误帧率曲线。仿真选择码长为1008,码率1/2,b=7,列重分布尽量符合密度进化算法的结果。采用BPSK调制,AWGN信道,采用log-BP算法译码,最大迭代次数为50次。
红色曲线为传统的基于PEG边增长算法构造出码字的误码率曲线和误帧率曲线。为便于对比,仿真时选择的码长同样为1008,码率l/2,采用。BPSK调制,AWGN信道,采用log-BP算法译码,最大迭代次数为50次。
从仿真结果来看,本文提出的码字构造方法所构造码字的误码平层在10-6左右,而传统的基于PEG边增长算法构造出码字的误码平层则在10-7,性能要更好。这是因为在RA码的校验矩阵中存在一列列重为1的列,H2的双对角形式使得其最小码距太小,RmD码便是针对这一问题而产生的。针对H2的优化已有很多文章专门讨论,文献所介绍了几种有效的处理方法。但本文所提的码字构造方法构造简单,便于硬件实现时的并行处理,有利于实现编译码器的高吞吐量。
对于不同码长、码率的S-IRA码,都可以采用上面所提到的方法得到,当然Q越小,资源消耗就越大。对于编码器,码长、码率不同,则uPT需改变各个存储器的大小,而计算电路则需改变SR从计算电路的数量。对于译码器同样需要改变各个存储器的大小以及外信息计算单元的数量。
4 结论
使用单位阵的循环移位矩阵作为非零子矩阵构造LDPC码的循环矩阵结构十分适合于部分并行译码实现,而RA码则具有编码复杂度低的特点。本文结合两者的特点设计出了硬件实现时的编译码器结构,由于采用的循环矩阵结构因而实现时可以占用很少的资源。