DSP

3G测试系统的Viterbi译码及DSP实现及优化

2019-07-13 20:12发布

引言 随着TD-SCDMA产业化进程的日益明朗,3G之战还未吹号,硝烟味已弥漫了黎明前的市 场。这就要求尽快提供好的手机终端。对手机终端的性能测试越显得迫在眉睫。由于重邮信科3G研究院在TD方面有着很成熟的技术和经验,在此基础上我们不但 推出了3G样机,而且致力于开发好的TD手机测试平台,本文所介绍的Viterbi译码方法是独具特 {MOD}的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.1Viterbi译码的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.3TMS320C55x系统及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开发环境可以很好地得到编码输入和译码输出数据比较图形。通过硬件方针可以知道,该译码效果非常好,它适用于大数据量传 输的3G系统中。很好地解决了接收链路中的瓶颈问题。我们所设计出的该测试平台是针对TD-SCDMA系统的。由于设计中跟TD-SCDMA手机中译码过 程相对照,我们可以有效避免因测试系统与应用系统不相对应而造成的麻烦。