网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: TI德州中文网 >> 技术文库 >> C5000文章 >> TMS320C54x >> 正文
  [组图]基于DSP的多通道G.728语音编码器实现           ★★★ 【字体:
基于DSP的多通道G.728语音编码器实现
作者:谢 兄,胡…    文章来源:数据采集与处理    点击数:    更新时间:2006-12-1    

谢 兄,胡瑞敏,艾浩军,涂卫平 (武汉大学多媒体网络通信工程湖北省重点实验室,武汉,430079

 

摘  要:介绍了G.728的算法原理和TMS320C5410定点DSP芯片,针对TMS320C5410芯片的硬件结构和编译系统特点,设计了一套运行在该DSP芯片上的多通道G.728语音编解码器。分析了多通道G.728在定点DSP芯片上实时实现时存在的困难和相应的关键技术,详细论述了G.728编解码算法在该DSP芯片上实现时采用的优化技术,以及为了降低计算量对码本搜索模块及Levinson-Durbin算法的改进。
  关键词:语音编码;低延时码激励线性预测编码;定点数字信号处理器


  随着数字移动通信和多媒体通信技术的飞速发展,对低码率和低延时的高质语音编码器的需求越来越大,G.728以其低延时高质量等优点被广泛应用,不仅用作干线电话网16 Kbit/s速率编码标准,而且已列为ITU H.323会议电话系统标准语音编码中的一种。该编码器采用后向自适应预测器(Backward-adaptive predictor)技术,保证有高的合成语音质量和系统的稳定性,它的算法延时是0.625 ms,达到全双工通信延时要小于2 ms的要求,MOS分可达到4.0,完全满足移动通信和多媒体实时通信的要求[1]
  TMS320C54X DSP芯片具有很强的运算能力,由于芯片内设有各种常用的数字信号处理算法所需的硬件结构,所以用它来完成像G.728这些庞大的运算是比较好的选择[2]
  笔者设计了一种基于DSP的解决方案,针对DSP的特点,对G.728的算法实现作了充分的优化。将G.728的编解码降到34MIPS以下,4片DSP集成的媒体处理器可以完成16个通道的语音编解码。
  本文首先简要介绍了ITU G.728 Annex G编解码技术和定点TMS320C5410芯片,然后着重分析了G.728 Annex G在定点TMS320C5410芯片上实现的难点和相应的关键技术,并给出实验结果。
1 G.728算法
  G.728标准是对电话频带语音信号进行处理,采样频率为8 kHz。该算法与一般CELP编解码器不同之处在于G.728利用后向自适应预测技术对短时谱包络和增益进行预测,预测系数是用先前量化过的语音信号来提取和更新。首先由5个连续的语音样点形成一个5维语音矢量,码本激励中共有1 024个5维的码矢量,对于每个输入语音矢量,编解码利用合成分析法从码本中搜索出最佳码矢量,然后将10 bits的码本标号送出去。每4个相邻的输入矢量构成一个自适应周期(或称为帧),每帧更新一次LP系数;激励的增益也是利用先前量化激励信号的增益信息逐矢量地进行提取和更新[1]
  解码端也是逐矢量地进行,根据接收到的10bits码本标号,从激励码本中找到相应的激励矢量,经过增益调整后,得到激励信号。将激励信号输入综合滤波器、合成语音信号。再将合成的语音信号进行自适应后滤波处理,以增强语音的主观感觉质量[1]。文[3]详细论述了G.728 Annex G算法的原理和细节。图1给出了LD-CELP编码器和解码器的原理框图。


  为了提高预测性能,G.728标准[4]中采用了50阶的线性预测滤波器,并且采用比前向自适应技术精度更高的数据表示[5];为了使G.728能够在16位定点运算的硬件上实现,设计了G.728 AnnexG,它能够与浮点G.728互通,产生相同质量的语音。G.728 Annex G与G.728协议主要的不同之处是:
  (1)算法操作的类型不同及状态变量的精度不同。在G.728 Annex G中,所有操作数都有精确的位数,定点算法字长为16,有些数的精度超过了16位表示的范围,需要用32位来表示;有些数值的范围是动态的,就需要用块浮点表示。
  (2)后向矢量增益自适应预测的过程不同,但原理相同。利用查表来计算对数函数,节省了大量的DSP指令。后向矢量增益适配器是利用以前的增益和波形码书的索引来预测当前增益。
  (3)在G.728中,数都是用浮点表示,值的动态范围较大,G.728 Annex G为了与G.728互通,大量使用了块浮点,造成了有些数的精度是浮动的。在Levinson-Durbin算法中系数的精度是浮动的。
2 定点TMS320C5410芯片原理
  Texas Instrument公司的TMS320C5X系列DSP是高性能、低功耗的处理器,DSP同微处理器相比,具有并行度高、实时性能、灵活性、可靠性等特点,其功能强大的寻址方式和指令系统可以增加系统性能,降低系统成本[6]
  TMS320C54X DSP芯片的CPU采用哈佛(Harvard)结构,程序和数据存储器是两个相互独立的存储器。每个存储器独立编址,独立访问。系统中设置了程序总线和数据总线两条总线,从而使数据的吞吐率提高了一倍。该DSP芯片拥有定时器、时钟产生单元、同步串口等外围设备。在TMS320C54X中采用了深度为6级的流水线:预取指(programprefetch)、取指令(program fetch)、译码(decode)、取值(access)、读数据(read)、执行(execute)。以上6个步骤可以并行操作,提高了系统整体的并行度。
  该DSP芯片拥有一个40位的算术逻辑单元,1个17×17的乘法器和1个40位的桶形移位器,并且集成了两个相互独立的40位累加器,它们可以在一个指令周期内同时操作。支持多种寻址方式,如立即寻址、绝对寻址、累加器寻址、直接寻址、间接寻址、内存映射寄存器寻址和堆栈寻址。这些寻址方式的灵活应用可以使软件设计人员有更多的选择。寻址方式的正确应用还可以更充分地利用存储空间,以便有效地使用片内存储器。TMS320C54X可以使用代数指令系统或者记忆指令系统中的任意一种指令系统。指令和寻址方式的结合应用,可以完成丰富、强大的功能。
3 G.728的算法实现
  G.728算法为了获得高质量的合成语音,采用了高阶的线性预测滤波器和合成滤波器,并且采用了精度很高的数据表示方式,计算量很大。
3.1 数据表示方法
  在Annex G中数的表示分整数和小数两部份,为了表示小数就要确定十进制的点在哪两位之间,即它的格式为Qn,用n位表示小数。有些数的大小是浮动的,需用Q格式表示,如果一个数对应一个Q格式,那么此格式被称为标量浮点。如果n个不同的数有相同的标值,即n个数用n+1个字表示,其中有一个字表示标值,则被称为块浮点格式。在进行算术运算时,为了保证精度,要对参加运算的数进行移位或取整。例如:两个16位的数,它们的标值为Qn和Qm,如果相乘,结果为32位数Q(m+n+1),所以相乘之后要左移一位,得到正确的标值;如果相加,就要求两个数有相同的Q格式,其中标值大的数就要右移k=max(n,m)-min(m,n)位。如果以后要用到或要存储计算得到的结果,就必须对结果进行移位或取整。因为该DSP指令一次移动的位数不能大于16,所以在移位过程中如果不能确定k值的大小且k值可能大于16时,就要判断k是否大于16,如果大于,就要先移16位,再移(k-16)位。
3.2 线性预测
  在G.728中,估计线性预测[7]系统的系数需较大的计算量,所以计算合成语音需要不小的计算量。信号在进行线性预测分析之前,需要进行混合加窗处理,混合窗由递归与非递归两部分组成,非递归部分自相关系数的计算量较大,然后利用Levinson-Durbin算法计算预测系数。
  在Levinson-Durbin算法中,为了使定点算法与浮点算法更好地协同工作,系数使用了块浮点,首先把所有系数定标为Q15,更新系数过程中设有溢出检测位,如果没有溢出,那么最后所有系数均为Q15格式;如果更新系数时判断计算出的系数溢出,则所有系数右移一位,格式为Q14,以后用Q14格式的系数进行递归计算;用Q14格式时可能还要发生溢出,同样再右移一位,所有系数均为Q13,以后用Q13格式的系数进行递归计算。最后计算出的系数格式为Q15或Q14或Q13,即预测系数范围在(0,4)之间。在带宽扩展过程中,为了把系数定标为Q14,就要判断输入系数的标值x,系数乘以扩展因子后相应的左移(16-x)位,这样的更新过程占用了较多的DSP处理能力(MIPS)。
3.3 后滤波器
  后滤波器作用是增强解码语音的主观感觉质量,由三部分组成:长时后滤波器,短时后滤波器,输出增益调节单元。其中长时后滤波器是一个具有谱峰值在基频倍数上的梳状滤波器,其传输函数是
    Hl(z)=gl(1+bz-p
式中p是基音周期。因为采用了自相关法从解码信号中检测基音周期,所以计算量较大。基音提取范围为(20,140),首先对降低采样率后的语音提取基音周期kmax,然后对解码语音在(4*kmax-3,4*kmax+3)范围内提取基音周期kp,对应的自相关系数为cormax,最后以前一帧基音kp1为候选基音,对解码语音在(kp1-6,kp1+6)范围内提取基音周期ktmp,对应的自相关系数为cmax,其中cormax和cmax中较大者为最后所求基音周期。
4 G.728语音编解码器在DSP芯片上的优化
  采用TMS320C5410实现G.728 Annex G16Kb/s语音压缩算法时,为了尽可能地减少语音编解码所占用的系统资源,提高算法的执行效率,满足实时性的要求,需要根据TMS320C54X系统硬件及编译系统特点,运用各种方法对编解码算法进行优化。
4.1 使用算术指令
  在TMS320C54X的指令集中提供了一些指令,可以充分利用这个特性,有效地提高编程效率。如均方差指令(SQDST)在一个指令周期内,用B累加器作为最终寄存器进行矢量差的平方和计算,同时A累加器中进行下一对数值的差值计算。还有MAX,MIN,LMS等指令,充分利用这些指令,可以减少运算所需的指令周期,提高编程效率。
4.2 循环语句的实现
  在语音编解码的过程中有很多循环语句,如for,while等,都是由条件判断和跳转实现的。在DSP芯片上具体实现时,要合理安排条件判断语句,尽可能减少跳转发生的次数,提高程序运行的效率。而且,能够在循环体外计算的过程就不要放到循环体内计算,避免重复操作的发生,防止资源和时间的浪费。
4.3 变量及函数处理
  由于从内存中读出全局变量需要3个时钟周期,所以可以变全局变量为局部变量,然后利用寄存器对变量进行存取,节省了访问时间。函数调用需要一些额外的开销,所以在移植过程中要尽量减少函数调用,以节省系统开销。例如,用Rnd指令来代替取整运算。
4.4 流水线冲突的解决
  当前一条指令对某个存储区单元进行写操作而其后的指令对该单元进行读操作时,通常会发生流水线冲突。一般情况下,发生流水线冲突时,由DSP自动插入延迟解决冲突问题。有些情况下,TMS320C54XDSP无法自动解决问题,需要手工通过调整程序语句的次序或在程序中插入一定数量的NOP来解决。代码优化总的原则是尽可能使每个时钟周期内的6个时间片得到充分利用,减少流水线冲突。
4.5 算法优化
4.5.1 降低码本搜索计算量
  在码本搜索过程中,用码本与目标矢量的相关性(aa0)的绝对值进行增益索引搜索:

  其中,GB为相邻两个增益的中点,Y2为波形码矢能量,j为波形码矢的下标。这样的码本搜索过程保存了符号,避免了分支的发生和重新计算,似乎更有效,但实际上它是以增加额外的指令为代价。
  为了降低码本搜索的计算量,且不引入误差,观察表GB中的值递增,所以改动后的搜索增益索引过程如下:
  (1)如果码本与目标矢量的相关性aa0<GB[0]*Y2[j],那么增益索引idxg=0,跳过下两次判断;
  (2)如果aa0<GB[1]*Y2[j],那么增益索引idxg=1,跳过下一次判断;
  (3)如果aa0<GB[2]*Y2[j],那么增益索引idxg=2,否则idxg=3。
  在计算误差时,把aa0左移2位,使用累加器的高16位,这样充分利用了DSP指令。在搜索之前,要根据系统的频响函数计算各个码本矢量的能量,由于系统各滤波器系数每四个编码矢量更新一次,因此每四个矢量只需计算一次码本能量表,在计算过程中要充分利用DSP指令的特性,及已知数据,同时观察频响函数是一个下三角矩阵,每条斜对角线上的元素相同,所以在计算能量时,把循环体拆分,尽量用同一个寻址寄存器,避免存取操作,从而有效地降低了算法实现所占用的系统开销。
4.5.2 Levinson-Durbin算法的改进
  在实际过程中,合成滤波器的预测系数一般不会超过4,为了降低更新系数所用的时间,在Levinson-Durbin算法中所有的预测系数使用同一个标值,即Q13,保证每次更新系数时不会发生溢出,就不需判断溢出问题;同时利用了C5410的语法特性,对Levinson-Durbin算法流程做了相应调整,提高了算法的并行性。以50阶的预测滤波器为例,优化前Levinson-Durbin算法的第二层循环的计算量在最好的情况下为33 124个指令周期;而优化后,只需3 822个指令周期。在计算反射系数时调用了除法函数,至少需50×186=9 300条指令周期,而优化后只需重复指令(rpt)和条件减指令(subc)就可以完成除法操作,把商和余数存放在同一个累加器中进行计算,只需50×2=100条指令周期。
  系数定标为Q13,虽然降低了时间,但引入了误差,精度没有浮点算法的精度高。如果定标为Q14,误差会更大些,但这种误差采用主观测试没有什么差别。在相应的带宽扩展过程中,系数乘以因子不会溢出,所以不需要判断输入系数的标值。
5 多通道的语音编解码
  每片DSP处理器必须承担多路G.728编解码任务,因此所有的算法必须在多通道实现上。为了保证每一个通道逐帧访问正确的存贮器,每一个函数必须具有可重入的特征。因为DSP不便于实现像Windows操作系统上的多线程内存管理的复杂功能,每一个通道维护一个独立的静态变量和状态区。而且在DSP中,片上存贮器本身是一种宝贵的资源,决定了空间的分配必须仔细考虑。一般地,在一个给定的过程中,有两种类型的变量:局部变量和全局变量。局部变量可以是自动变量和寄存器变量,每次在进入这个过程时,必须分配新的空间。在执行完后,变量不再包含有意义的值。用堆栈来管理这些临时局部变量是最简单的可行方法。这样过程的调用、返回以及参数的传递、局部变量空间的分配与释放,都可以通过修改堆栈指针来实现[8]
  在多通道程序中,每个必须保存它自己的状态变量在自己的存贮空间内。我们可以定义一个结构来描述编解码器逐帧运行时需要保存、更新的状态,为每一个通道声明一个该结构的实例,这样就拥有独立的相对集中的存贮空间,在运行时逐帧更新、通道切换时不会产生混乱。该多通道系统设计的目的是同时运行多路编解码[8]
  在G.728 Annex G编解码器中,为提高系统的可靠性和利用DSP访问内部存储器快于外部存储器的特性,我们采用数据重定位的方法,在系统初始化时,直接将常数表下载到RAM中,而不必在程序空间中保存这些常数,节省了空间,保证DSP运行在最佳状态[8]
  本系统整体上可以划分三个部分,主体控制程序,串口中断处理程序,语音信号的编解码程序。主体控制程序用C语言编写,可读性强,可移植性高,易于系统改进。语音编解码部分,是程序的核心部分,完成对语音信号的编码和对已经进行压缩语音的合成重建过程,语音编解码的任务由TI汇编语言完成,并进行了优化和改进,保证了程序有较高的效率,充分利用DSP芯片的快速运算特性。
6 实验与分析
  该系统程序以C程序作为框架,采用TMS320C54X语言编写,在作者研究所研制的C5410板上进行了实时测试,TMS320C5410芯片的运算速度为120MIPS,片内RAM空间为64 K。图2是G.728 Annex G在该DSP芯片上实现过程中对码本搜索模块及Levinson-Durbin算法优化前后编解码器占用系统开销情况。算法优化前,编码器与解码器占用系统开销分别是27 MIPS、18MIPS;算法优化后,编码器与解码器占用系统开销分别是19 MIPS,15 MIPS。

  对算法改动后的编解码进行主观性能测试,测试结果表明,由该系统合成的语音质量MOS可达到4.0,是一种优质语音编解码系统。
7 
  本文系统地介绍了基于TMS320C5410的多通道G.728 Annex G语音编解码系统。通过综合运用以上各种方法对G.728算法的定点实现作了优化;并在Levinson-Durbin算法中,对预测系数的标值作了调整,大大降低了计算量;同时在码本搜索过程中,调整了算法流程,降低了编码器占用的系统开销。实验结果表明,优化后在一片TMS320C5410芯片上可以并行实时实现三路G.728 Annex G全双工工作。由该系统合成得到的语音信号,经过主观测试,具有很高的自然度和可懂度,全面达到了CCITT的要求。本文提出的语音编解码系统可以应用于可视电话、多媒体终端、视频会议系统等领域,实用性很强。

参考文献

[1] 杨行峻,迟惠生.语音信号数字处理[M].北京:电子工业出版社,1995.251~265.
[2] 胡剑凌,陈 健.TMS320C54X实现ITU G.728语音编码标准[J].数据采集与处理,1999,14(3):343~346.
[3] ITU-T Recommendation G.728-Annex G.16 Kb/sfixed point specification[S].Coding of speech at 16Kb/s using low-delay code excited linear prediction,1994.
[4] CCITT.Recommendation G.728[S].Coding of sp-eech at 16 Kb/s using low-delay code excited linearprediction.Geneva,1992.
[5] Kleijn W B,Paliwal K K.Speech coding and syn-thesis[M].Elsevier,1995.209~251.
[6] Texas Instruments.TMS320C54Xuser′sguide[M].U.S.A,1995.
[7] 姚天任.数字语音处理[M].武汉:华中理工大学出版社,1999.177~219.
[8] 艾浩军,胡瑞敏.H.323多点处理器任务调度策略[J].计算机工程与应用,2001,37(8):6~8.

欢迎点击进入:"61IC中国电子在线"官方网站     文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:TC 湘ICP备06016957号