
三G测试系统中的Viterbi译码及其DSP实现及优化(精).doc
8页3G测试系统中的Viterbi译码及其DSP实现及优化来源:EDN电子设计技术 | 刊登于:07月10日本文有关DataSheet:TMS320C54X TMS320C55X TMS320C55x 摘要 简介了一种用于测试TD-SCDMA终端测试平台中的核心技术——Viterbi译码研究用约束度K=9的卷积编码和最大似然Viterbi译码的差错控制方案,在Viterbi译码算法中,提出了原位运算度量、保存途径转移过程和循环存取幸存途径等措施,能有效地减少存储量、减少功耗,使得K=9的Viterbi译码算法可在CCS集成环境平台和TMS320C55XDSP芯片上实现,其性能指标符合3GPP通信合同原则规定,文中给出了合用于DSP编程的算法,给出了DSP具体实现,同步给出了硬件的仿真成果 0、引言 随着TD-SCDMA产业化进程的日益明朗,3G之战尚未吹号,硝烟味已弥漫了黎明前的市场这就规定尽快提供好的终端对终端的性能测试越显得迫在眉睫由于重邮信科3G研究院在TD方面有着很成熟的技术和经验,在此基本上我们不仅推出了3G样机,并且致力于开发好的TD测试平台,本文所简介的Viterbi译码措施是独具特色的TD测试平台中所用到的。
3GPP中TD-SCDMA系统采用了3种信道编码方案:卷积编码、Turbo编码和不编码不同类型的传播信道所使用的编 码方案和编码效率是不同的本文简介针对卷积编码的Viterbi译码方案针对DSP设计的特点,本文在不变化纠错性能的前提下提出了一系列的措施,如原位运算、保存转移、循环存取等,旨在将存储器的容量减到最小,将整体功耗降到最低 1、Viterbi译码原理[1] Viterbi译码算法(简称VA算法)是由Viterbi在1967年一方面提出的,它是一种针对卷积码的最大似然译码算法她不是在网格图上依次比较所有的也许途径,而是接受一段,计算、比较一段,保存最有也许的途径,从而达到整个码序列是一种最大似然序列Viterbi译码算法长处是在码的约束比较小时,它比序列译码算法效率更高、速度更快,译码器也较简朴缺陷就是随着约束长度的增长算法的复杂度增长不久约束长度N为7时要比较的途径就有64条,为8时途径变为128条2<<(N-1))因此Viterbi译码一般应用在约束长度不不小于10的场合中虽然有许多算法减少了复杂性、减少了运算量,但它们必然以牺牲性能为代价本文研究的出发点是立足于不减少算法性能,谋求在实现最大似然译码时的优化措施。
而这点我们重要是通过与硬件实现相结合做到的Viterbi算法重要由途径度量的“加比选”运算、度量的更新、途径的更新、最大似然途径的回溯过程构成 Viterbi译码算法流程图如图1所示图1 Viterbi译码算法解决流程 2、具体DSP实现及优化措施 2.1 分支度量 每收到一种符号就进行状态转移,Viterbi译码算法必须计算前一种状态到各个新状态的分支度量值,当采用硬判决输入时,分支度量值可用汉明距离表达;若用软判决输入时,采用欧氏距离来计算本文实现是运用软判决来实现的具体原理如下[2]: 对于编码速率为R=1/C的卷积码来说,欧氏距离: 其中C为码率的例数即:R=1/C上式可以分解为: 其中的 在一级中都是同样的中间项的2只是一种常数可以不考虑因此分支度量值可以简化为: 省去上式前面的负号,但在分支度量值比较时应取大值将其中的Gn(j)用双极性表达即0用+1表达,1用-1表达则分支度量值变为: 因此在状态转移图中一级中的分支度量值的绝对值只有两个值在译码过程中,由于度量的数值是累加的,会导致溢出,解决的措施是在每一步运算时将各个状态的度量减去前一步所有状态度量的最小值。
那么度量的精度如何控制呢?也就是说,要用多少二进制位来表达度量既不溢出又使存储量最小?对于码率为 1/2,约束度为K的卷积码的硬判决译码,在每一步的度量的最大值与最小值的差不超过2(K-1)由此可以懂得度量跨度的最小二进制比特数为[log2 (2(K-1))]当K=9时,可以用5比特二进制位来运算和存储每一步的度量事实上,这一结论也可以从状态转移状况推得假设在第i步某一状态具有最大度量且为2(K-1)+1+M(设最小度量为M),根据式(1)、(2)的度量递推规则,在第i-1步必有相邻持续两状态的度量不小于2(K-1)-2 +M,在第i-2步必有持续4个状态的度量不小于2(K-1)-4+M,在第i-S步必有持续2S个持续状态的度量不小于2(K-1)-2×S+M,那么在第 i-(K-1)步必有持续2(K-1)个持续状态的度量不小于M,而对约束度为K的卷积码其总状态数只有2K-1个,总存在一种最小状态度量不不小于M,从而导出矛盾,因此度量跨度最大值不也许超过2(K-1) 2.2 度量值更新 (1)计算每一种也许途径的每一步的距离值2)计算各条途径的合计值3)选择并且保存累加值最小的那条途径。
4)保存该条被选出的途径轨迹在老式的Viterbi译码算法中,译码状态的转移导致度量的读出和写入地址不同,这使得度量的更新复杂化,特别是在用DSP硬件实现时需要大的存储空间或减少理解决能力如果可以使度量的读出与写入地址相似,就可使存储空间减小一半或使译码速度提高一倍通过研究可以发现,译码过程中的状态转移具有较好的规律性,如果建立了转移后的新状态与转移前的老状态的地址映射关系,就可使度量迭代在原位进行即新状态的度量是由可以转移达到的两个相邻老状态的度量通过“加比选”运算获得的由于转移前后的状态(地址)不同,度量的读出与写入不能在同一地址进行,也不能在同一片存储器内进行(会破坏其他状态的度量),必需配备相似的读和写空间(各2K-1个字单元),并在每产生一位译码输出后互换读写空间,达到更新度量的目的这在实现时既不以便,又耗费资源但如果我们将新状态的度量放回老状态地址中,至少不会破坏其他状态的度量规定:新状态的内容放回老状态的单元中,构成原位运算ﻫ ﻫ 2.3 回溯 当接受完一帧数据后,添加 尾比特逼迫网格图的最后一种状态为0状态,回溯就是从最后一种状态(0状态)开始,反向追踪最大似然途径,完毕原始数据的译码。
该步中具体实现技巧:按常规,新状态的总的途径值是老状态的总的途径值(L比特)左移一位后加上目前一步途径值,这就需要先读出L比特数据,做一次移位操作,再写入L比特数据,这样若单纯用DSP编程来实现,则很耗费内存在我们所设计的测试平台中,设法将该步用硬件来实现这样,在整个平台的设计中,我们运用了ARM存储数据的特点对RAM的读写比特数为2L由于RAM的功耗正比于单位时间内的读写比特数,我们设法减少每一次途径更新所需的读写比特数研究译码途径中各状态转移可以发现,途径信息已经隐含在状态信息中,因此没有必要保存这一步途径信息,而是要保存真正的“转移”信息,即通过 “加比选”选出的新状态是由哪一种老状态转移来的有了这种“转移”信息就不难逐渐回溯到前L步,作出译码输出判决规定:如果新状态0A K-2A K-3…A 2A 1是由老状态A K-2A K-3…A 2A 10转移来的(通过了“加比选”运算),则途径转移为“0”:如果是由老状态A K-2A K-3…A 2A 11转移来的,则途径转移为“1”;如果新状态1A K-2A K-3…A 2A 1是由老状态A K-2A K-3…A 2A 10转移来的,则途径转移为“0”;如果是由老状态A K-2A K-3…A 2A 11转移来的,则途径转移为“1”。
根据这个规定,每一步各状态的途径转移值唯一拟定了前一步的各相应的状态,从而可以以便地进行途径保存与回溯,更重要的是,每个状态途径的更新只需写1个比特途径 3.1 Viterbi译码的DSP实现流程图 根据Viterbi译码算法和TMS320C55X DSP芯片的特点,我们设计出了适合汇编语言编程的流程图通过2步中的优化算法考虑,我们设计出了译码流程图如图2所示:图中R表达编码效率,可取的值为1/2,1/3图2 DSP实现流程图 3.2 译码核心环节中的DSP程序实现 译码中最核心的部分就是加比选单元(ACSU)的工作在C55x DSP中,可以应用指令ADDSUB,SUBADD和MAXDIFF来完毕各个状态途径度量值的累加,比较和选择工作在一种蝶形循环内,为了以便调用,可以定义两个宏p0,p1 ACSU的DSP程序如下: 该实现中我们使用了并行解决命令 ||MOVAC2,*AR7+,*AR6每一条并行命令节省一种机器周期这样总程序运营时间就会缩短诸多在存储器的使用方面我们考虑到存储空间的有效运用,及时释放掉所占用的不必要内存这样在整个内存分派上减少了不必要的存储冗余从而使得整个程序运营效率更高,运算速度更快。
3.3 TMS320C55x系统及CCS(Code Composer Studio)简介[3,4] C55x是德州仪器公司(TI)新一代定点DSPC5000系列的代表它对C54x的体系构造进行了改善和增强,源代码与C54x完全兼容,目前版本的C55x工作频率可达 160 MHz左右C55x最明显特点是超低功耗,可以预见它有广阔的应用前景从CPU体系构造方面来看,C55x具有如下重要特点:①32×16 bit指令缓冲队列;②双MAC和双AIU单元;③4个40位累加器;④数据与地址总线多达12条{⑤灵活的节能配备增强的构造设计使得C55x具有并行执行功能,这一强大功能可大大节省程序执行周期,特别对于某些运算密集的应用效果更明显在实现维特比算法这一特定应用方面,C55x有精心的设计:它扩增了专门用于VA的指令maxdif,使得计算每个蝶形图单元的所需时钟周期仅为3个(C54x需4周期),同步兼顾到SOVA算法的规定,这种改善是令人鼓舞的}转移寄存器增长到2个,分别为TRN0和TRN1,简化了维特比算法中回溯的实现暂存器Tx多达4个,可减少分支途径度量的搬运存储 CCS2.2(Code Composer Studio)是一种针对原则TMS320调试接口的集成开发环境(IDE)。
由TI公司于1999年推出它提供了环境配备、源文献编辑、程序调试、跟踪和分析等工具,可以协助顾客在一种软件环境下完毕编辑、编译链接、调试和数据分析等工作一种CCS只合用于一种系列的DSP芯片正由于CCS所具有的强大数据分析功能,我们能通过多种方式来分析,检查系统的性能 4、CCS下译码DSP实现图形[4] CCS提供了几种分析工具,其中图形显示功能是最直观的一种,其可以提供的图形显示涉及时频分析、星座图、眼图和图像显示各图形显示所采用的工作原理基本相似,即采用双缓冲区(采集缓冲区和显示缓冲区)分别存储和显示图形采集缓冲区存在于实际或方针目的板,涉及顾客需要显示的数据区显示缓冲区存在于主机内存中,内容为采集缓冲区的拷贝 图3是时频图中的双曲线图(Dual Time),该图形是对显示缓冲区中的数据不加解决,直接画出显示缓冲区中数据的幅度—时间曲线图中虚线构成的曲线是卷积编码输入数据的时频图,实线构成的曲线是Viterbi译码输出数据的时频图图3 Viterbi译码输出与卷积编码输入时频图 5、结论 此前Viterbi译码算法对于大数据量的译码存在局限性,本文运用软件与硬件结合使用来来消除这一限制。
通过原位运算、保存转移、循环存取等优化手段,我们将存储器的容量减到最小,将整体功耗降到最低,通过验证编码输入与译码输出图形,我们可以容易地得到译码效率,运用CCS开发环境可以较好地得到编码输入和译码输出数据比较图形。












