用TMS320C54X实现Vertibi译码器

发布者:二进制心灵最新更新时间:2007-03-09 手机看文章 扫描二维码
随时随地手机看文章
摘要:主要介绍卷积编码器Vertibi译码器的基本原理。对用TMS320C54X DSP来实现Vertibi译码器中的两个主要环节——度量值更新和回溯,作了详细说明,并给出具体的实现程序。 关键词:Vertibi译码 TMS320C54X DSP 度量值 回溯 卷积编码 引言 随着差错控制编码理论的完善和数字电路技术的发展,信道编码已经成功地应用于各种通信系统中。其基本做法是:在发送端将被传输的信息序更上附加一些监督码元,这些多余的码元与信息序列之间以某种确定的规则相互约束;接收端按照既定的规则检验信息码元与监督码元之间的关系,一旦传输过程中发生错误,则信息码元与监督码元之间的关系将受到破坏,从而发现错误,甚至纠正错误。按照信息码元和监督码元之间的约速方式,可以分为组码和卷积码。在GSM和IS-95中主要采用了卷积码,在每三代移动通信中,话音信号也主要采了卷积编码。卷积码的译码方法有许多种,其中最重要的就是Vertibi算法。为此,本文讨论用DSP实现Vertibi译码器的方法。 1 卷积编码器简介 卷积码是一种对付突发错误的有效编码方法,通常记作(n,k,N)。它将k个信息编码为n个比特,编码效率为Rc=k/n。N为约束长度。与分组码不同,卷积码中编码后的n个码元不但与当前段的k个信息有关,而且与前面N-1段的信息有关,编码过程中相互关联的码元为Nn个。其纠错能力随着N的增加而增大,而差错率随着N的增加而指数下降。卷积编码器的结构如图1所示。 由图1可知,卷积编码器包括两部分:一个由N段组成的输入移位寄存器,每段有k段,共有N%26;#183;k位移位寄存器;n个模2和相加,其输入分别对应于n个基于生成多项式的线性代数方程组。每输入k个比特,编码器输出n个比特。在编码器复杂度相同的情况下,卷积码的性能优于分组码。 2 Vertibi译码的基本原理 卷积码的译码方法主要包括Vertibi算法、Fano算法和堆栈算法等等,其中最重要的和最常用的就是Vertibi算法。Vertibi算法是一种关于解卷积的最大似然译码法。它不是在网格上依次比较所有的可能路径,而是接收一段,计算一段,保留最有可能的路径,从而达到整个码序列是一个最大似然序列。 Vertibi算法可以算法描述如下:把在时刻i、状态Sj所对应的网格图节点记作(Sj,i),给每个网格图节点赋值V(Sj,i)。节点值按照如下步骤计算: ①设V(S0,0)=0,i=1。 ②在时刻i,对于进入每个节点的所有路径计算其不完全路径的长度。 ③令V(Sj,i)为在i时刻,到达与状态Sj相对应的节点(Sj,i)的最小不完全路径长度,通过在前一节点随机选择一条路径就可产生新的结果,非存留支路将从网格图中删除。以这种方式,可以从(S0,0)处产生一组最小路径。 ④用L表示输入编码段的数目。其中,每段为k比特,m为编码器中最大寄存器的长度。如果i 一旦计算出所有节点值,则从i=L+m时刻,状态S0开始,沿网格图中的幸存路径反向追寻即可。这样被定义支路与解码输出将是一一对应的。关于不完全路径长度,硬判断决解码采用汉明距离,软判决解码采用的是欧几里德距离。软判决的特性比硬判决要好2~3dB。 (n,k,N)卷积编码器共有2 kn个状态,因此Vertibi译码器必须具有同样的2 kn个状态,并且在译码过程中要存储各状态的幸存路径和长度。Vertibi译码器的复杂程度随2 kn指数增加。一般要求n<10。 3 Vertibi译码器的DSP实现 译码过程就是根据接收到的数据符号,按最大似然译码准则找出编码器在网络图上所走过的路径。Vertibi译码的处理过程如图2所示。 3.1 度量值更新 度量值的更新包括以下4个步骤: ①计算每条可能输入路径的度量值; ②为每条支路计算总的距离; ③选择保存最小度量值; ④保存幸存路径。 Vertibi译码时,每收到一个符号就进行状态转移,需要计算前一个状态到各个新状态的分支度量值。我们用DSP设计的译码器采用软判决输入,度量值用欧氏距离表示。当编码速率为1/C时,欧氏距离为: 其中SDn表示接收序列,Gn(j)为网格上每个路径状态的期望输入值,j是路径指示值,C为编码速率的倒数。将(1)式展开得: 对于所有的路径来说, 都是一样的,2只是个常数,在进行各路径度量值比较时,可以不考虑。这样可简化为: 省去胶面的负号,在度量值的比较时取最大值。对于编码速率为1/2的卷积码,分支度量为: T=SD0G0(j)+SD1G1(j) (4) 当编码速率为1/3时,分支度量为: T=SD0G0(j)+SD1G1(j)+SD2G2(j) (5) Gn(j)用双极性表示,即0用+1表示,1用-1表示。这样分支度量值的计算可以进一步简化为接收数据的加和减。 下面给出编码速率为1/3时,DSP实现具体程序。 LD *AR1+,16,A ;A=SD(2*i) ADD*AR1+,16,B,B ;B=SD(2*i)+SD(2*i+1) ADD*AR1-,16,B,B ;B=SD(2*i)+SD(2*i+)+SD(2*i+2) STH B,*AR2+ ;temp(0)=SD(2*i)+SD(2*i+2) SUB*AR1+,16,A,B ;B=SD(2*i)-SD(2*i+) ADD *AR1-,16,B,B ;B=SD(2*i)-SD(2*i+1)+SD(2*i+2) STHB,*AR2+ ;temp(1)=SD(2*i)-SD(2*i+1)+SD(2*i+2) SUB *AR1+,16,A,B ;B=SD(2*i)-SD(2*i+1) SUB *AR1-,16,B,B ;B=SD(2*i)-SD(2*i+1)-SD(2*i+) STH B,*AR2+ ;temp(2)=SD(2*i)-SD(2*i+1)-SD(2*i+2) ADD *AR1+,16,A,B ;B=SD(2*i)+SD(2*i+1) SUB *AR1+,16,B,B ;B=SD(2*i)+SD(2*i+1)-SD(2*i+2) STH B,*AR2 ;temp(3)=SD(2*i)+SD(2*i+1)-SD(2*i+2) 加比选单元是Vertibi译码器的核心单元。它的主要功能是取出当前状态的量度值,分别与其两个后续支路的量度相加并比较,选择罗小的一个作为后续状态的量度,并保存幸存支路。图3给出了该算法的示意图。 C54X片内的比较、选择和存储单元(CSSU)就是专门为Viterbi算法设计的加法/比较/选择(ACS)运算的硬件单元。图3所示的运算包括加法、比较和选择三部分操作。其加法运算由DSP的ALU完成。只要将状态寄存器ST1中的C16位置成1,ALU就被配置成双16位工作方式,这样,就可以在一个机器周期内执行两次加法运算。其结果(Old_Met1+D1和Old_Met2+D2)都是16位数,分别存放在累加器的高16位和低16位中。然后,利用CMPS指令对累加器的高16位和低16位进行比较,并选择出较大的一个数放到指令所指定的存储单元中。在CMPS指令执行的过程中,状态转移寄存器TRN自动记录比较的结果,这一点非常有用。实现一个蝶式运算的程序如下: LD *AR2,T ;T=本地距离 DADST *AR5,A ;A=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=RTN<<1 ;若(Old_Met(2*j)+T=>(K-2) AND ONE,B ;B=B%26;amp;1=msb of State ADD A,1,B ;B=B+A<<1=2*State+msb of State STLM B,T ;T=B(bit position) ;修正转移字 SFTL A,-3,B ;B=A/8=State/8 AND MASK,B ;B=B%26;amp;MASK=(K-5)lsb"sof State/8 STLM AR0 ;AR0=转称字索引 MAR *+AR2(-2K-5) ;修正寄存器值使其复位 MAR *AR2+0 ;加偏移量修正转移字 BITT*AR2-0 ;测试转移字中的比特位 ROLTC A TBEND:STL A,*AR3- BANZD:BACK,*AR1- STM #15,BRC ;指向输出缓冲区的首地址 LD*AR3,A ;将第一个字装入累加器A中 RVS:SFTA A,-1,A STM #15,BRC RPTB RVS2-1 ROL B SFTA A,-1,A RVS2:BANZD RVS,*AR4- ;判断所有的字是否都计算完 STL B,*AR3+ ;保存刚计算完的字 LD *AR3,A ;装入下一个字
引用地址:用TMS320C54X实现Vertibi译码器

上一篇:基于TMS320C6202的主被动复合制导信号处理系统的研制
下一篇:基于DSP控制的数字式双向DC/DC变换器的实现

小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved