基于TMS320C54X的RS+变织+卷积的级联纠错码
程序设计的关键在于域中运算的实现。对于中的乘法,可以采用指数形式表示元素,从而将相乘运算转换成相加运算。对于域中的加法,我们采用矢量形式表示,从而将加法运算转换成位异或运算。因而我们需要设计两张查找表,当遇到加法运算时,可以很方便的将元素从指数形式转换成矢量形式;遇到乘法时,可以将元素从矢量从指数形式转换成矢量形式;遇到乘法时,可以将元素从矢量形式转换成多项式形式。下面给出的是GF(2 4)域中,元素从指数形式转换矢量形式查表Alpha_to,由矢量形式转换成指数形式查表Index_of,其中域的生成多项式是g(x)=x5+x2+1。
Int Index_of[]={-1,31,1,18,2,5,19,11,3,29,6,27,20,8,12,23,4,10,30,17,7,22,28,26,21,25,9,16,13,14,24,15};
Int Alpha_to[]={1,2,4,8,16,5,10,20,13,26,17,7,14,28,29,31,27,19,3,6,12,24,21,15,30,25,23,11,22,9,18,1};
由上面我们可以很方便地进行运算,例如伴随式javascript:window.open(this.src);" style="cursor:pointer;"/>的计算程序如下:
for(j=0;j<NN;j++)
if(recd[j]!=0) s^=Alpha_to[(Index_of[j])+i*j]]+i*j)%NN];其中recd[]存储的是Yi的值。是域中的本原元。
2.2 卷积码Viterbi解码的实现
Viterbi解码算法是一种最大似然算法,它不是在网格图上依次比较所有可能的路径,而是接收一段,计算、比较一段,保留最有可能的路径,从而达到整个码序列是一个最大似然序列。虽然如此,Viterbi解码算法的运算量还是巨大的,而且随着卷积码结束长度的增大成几何级数增长。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.2 卷积码Viterbi解码的实现
Viterbi解码算法是一种最大似然算法,它不是在网络图上依次比较所有可能的路径,而是接收一段,计算,比较一段,保留最有可能的路径,从而达到整个码序列是一个最大似然序列。虽然如此,Viterbi解码算法的运算量还是巨大的,而且随着卷积码约束长度的增大成几何级数增长。因而如何减少运算量,尽可能的采用结束长度长的码,成为Viterbi解码程序设计的关键。54X系列DSP中的结构和指令系统,通过精巧的算法和编程,可以使Viterbi解码快速实现。许多卷积码网络图中存在蝶形结构,因而可以利用DSP的相加、比较和存储单元(ACS)快速地实现蝶形运算。DSP的双字节指令,可以在个周期内进行单字节加减运算。指令系统包括单寻址重复和块指令重复操作。总之,通过充分利用DSP芯片的特点进行编程,可以达到较快的速度。蝶形单元运算的宏编程如下:
BFLY_DIR .macro
DADST *AR5,A ;A=Old_Met(2*j)+T//Old_Met(2*j+1)-T
DSADT *AR5+,B ;B=Old_Met(2*j)-T//Old_Met(2*j+1)+T
CMPS A,*AR4+ ;New_Met(j)=(Max (Old_Met(2*j)+T,
;Old_Met(2*j+1)-T)TRN=TRN<<1
;If(Old_Met(2*j)+T=<Old_Met(2*j+1)
;T)Then TRN[0]=1
CMPS B,*AR3+ ;New_Met(j+2^(k-2))=(Max(Old_Met
;(2*j)-T,Old_Met(2*j+1)+T)
;TRN=TRN<<1
;If(Old_Met(2*j)+T=<Old_Met(2*j+1)
;T) Then TRN[0]=1
.endm
(2,1,7)的卷积码共有64个状态,需保留一条重量最大路径(幸存路径)。对每一个节点的组输入解码码元(2个),需要计算码元重量增量,通过32个蝶形运算单元来选择更新64个状态的存储路径。
javascript:window.open(this.src);" style="cursor:pointer;"/>
由于解码处理的一个数据流,不可能等待所有输入完以后再解码,因而需要回溯。实验证明,当存储路径是约束长度的5倍时,每条路径的前端节点就收敛了,因而不需要等接收完成就可以输出。我们在编程中,采用了需要等接收完成就可以输出。我们在编程中,采用了固定长度的Viterbi解码算法,即一个帧长。因而在卷积码的编程器端需要添加0,使编码器的状态因而在卷积码的编码器端需要添加0,使编码器的状态最后归0。同样,在解码器端最后也是收敛于0状态。
结语
本文就在TMS320C54X上实现RS+交织+卷积的级联编码技术进行了探讨,给出了性能仿真和编程实现中的一些关键思想。