北京佳惠信达科技有限公司

智慧城市网初级2

收藏

G.729语音编码算法在TriMedia TM1300

时间:2014-12-05      阅读:2138

  一、G.729编码器介绍
  
  G.729是电信联盟(ITU,InternationalecommunicationUnion)于1996年推出的采用共轭结构-代数码激励线性预测(CS-ACELP,Conjugate-StructureAlgebraic-Code-ExcitedLinear-Predication)技术的具有8kbit/s码率的语音编码算法建议,该算法是以语音编码方案中的码激励线性预测(CELP,CodeExcitedLinearPredication)技术为基础提出的,其原理如图1所示。
  
  G.729是一种单声道语音信号的压缩编码算法,模拟信号经过话带滤波器后,按8KHz的频率采样并转换成16bit的线性PCM信号(即128kbit/s的码流),这就是图中所示的G.729编码器的输入语音信号。G.729编码器以10ms的输入帧(80个采样点)为单位进行编码。G.729编码器的输出为8kbit/s的码流,因此其压缩比高达16:1。而经G.729解码器还原后的声音质量却达到了相当高的水准,其主观平均得分(MOS,MeanOpinionScore)在4分以上(MOSzui高得分为5分),属于良好级别,人的耳朵几乎察觉不到声音有失真的情况,音质与码率为64kbit/s的G.711编码标准相近,而占用的带宽仅为G.711的1/8。另外G.729编码算法的延时较小,在15ms左右。
  
  虽然G.729具有较低的码率、较高的还原音质和较小的延时等优点,但是由于其存在算法复杂度大和数据存储量大的固有缺陷,在早期并没有得到广泛的实际应用。后来随着超大规模集成电路VSLI工艺的进步,极大地推动数字信号处理器(DSP)技术的发展,各大厂商纷纷推出了各具特色的高性能DSP,也大大降低了实现G.729语音编码算法的成本。目前,G.729已经广泛应用于诸如、会议电视、数字音视频监控等领域。

  
  二、TrimediaTM1300处理器
  

  TM1300处理器是Philips公司推出的一款32位性能优良的多媒体处理芯片,特别针对数字视频和音频应用进行了优化,集成了视频输入/输出接口、音频输入/输出接口、IIC接口、PCI接口、SDRAM控制器等外围设备接口,极大地简化了外围电路的设计,提高了系统的稳定性、可靠性,降低了系统的总体成本。因此TM1300处理器在音视频处理卡、多媒体嵌入式设备中得到了广泛的应用。
  
  TM1300处理器*的的多媒体处理性能得益于其核心CPU、多媒体操作指令集和存储器体系结构的设计。TM1300的核心是32位的超长指令字结构(VLIW,Very-LongInstructionWord)的处理器,内部有11种共27个执行单元,在每一个时钟周期内zui多可以同时安排5个执行单元进行5个操作,如图2所示。
  

TM1300的指令
  
  TM1300有一整套专门针对多媒体运算的DSP操作指令,每一个操作可以执行多个算术运算,比如操作UIFIR8UU(a,b)包括4个乘法运算和1个加法运算,这使TM1300具有强大的多媒体数据处理能力。而这些DSP操作指令都可以在C程序中直接调用,大大方便了编程。TM1300处理器内部含有128个通用寄存器,这些寄存器不是分段的,所有操作都能使用这些寄存器。TM1300使用32位线性寻址,寻址能力达到4GB,同时为了解决高速VLIWCPU和低速外存SDRAM之间的数据交换瓶颈,TM1300内部集成了16KB的高速数据缓存和32KB的高速指令缓存(CACHE),以确保VLIWCPU的全速运行。TM1300的二进制运行代码以压缩的格式存放在SDRAM和指令CACHE中,压缩的代码一方面可以提高指令CACHE的命中率,另一方面可以减少指令CACHE与SDRAM之间的数据交换。指令CACHE中有一个专门的指令解压机构,它负责解压缩指令并以224位的数据位宽向VLIWCPU提供指令。而其数据CACHE是双端口的,其数据位宽达64位,并且VLIWCPU与缓存之间是以CPU的运行频率交换数据的。
  
  TM1300处理器的音频输入单元(AI)外接A/D转换器,支持1个或2个声道的音频输入采样,每个采样点可以设为8位或16位,可以工作在主模式或从模式,支持标准立体声IIS格式和左对齐格式,采样的数据通过双DMA通道直接存放在SDRAM中,通过中断方式通知CPU,减轻了CPU的负担。
  
  三、G.729在TM1300上的优化、实现
  
  电信联盟ITU在推出G.729编解码器算法的建议的同时,给出了G.729算法的一种软件参考实现,也给出了一组测试向量,用以验证软件的正确性。该软件采用移植性较好的ANSIC语言编写的,因此可以在许多硬件平台上编译、运行。但是由于软件采用的是16位定点运算,而且没有针对任何硬件平台做任何优化,也没有考虑并行运算,所以要充分发挥32位的TM1300CPU的强劲性能,降低实现成本,必须经过大量的优化工作。代码优化过程是一个不断调整改造程序、利用测试向量验证正确性和查看系统资源消耗(主要指CPU占用率和所需内存)的过程,我们主要做了下列优化工作。
  
  1、参考软件采用的是16位定点运算,而TM1300是32位的处理器,因此我们把2个
  
  16位的音频采样数据合成一个32位的数据,把绝大部分程序改造成32位定点运算的程序。
  
  2、参考软件中包含了一组用函数实现的基本操作,包括16位加法、减法、乘法、取饱和、左移、右移等函数,从程序运行的角度看,这些基本函数效率十分低,而且不利于提高程序的并行度。我们利用TM1300的DSP操作指令把大部分这种函数改成单操作指令。如原来的16位加法函数:
  
  Word16add(Word16var1,Word16var2)
  
  {
  
  Word16var_out;
  
  Word32L_somme;
  
  L_somme=(Word32)var1+var2;
  
  var_out=sature(L_somme);
  
  return(var_out);
  
  其中sature()又是‘取饱和’函数,把32位带符号整数转换成16位带符号整数。利用TM1300的DSP操作指令,我们把它改成下面这样一个宏定义:
  
  #defineadd(var1,var2)((Word16)DSPIDUALADD((var1),(var2)))
  
  3、充分利用TM1300的128个通用寄存器,函数的临时变量尽量不要使用数组,而是直接用单个整数,因为TM1300编译器把数组编译成内存方式的变量,而单个整数的临时变量则用寄存器来保存,这样不但提高了运行速度,也有利于提高数据CACHE的命中率。
  
  4、通过调整程序的流程来尽量提高程序的并行度,特别是耗时的函数,如改变循环的次数、步长等。TM1300的软件开发工具SDE中包含有测试函数并行度的工具,可以查看单个函数的并行度。我们知道TM1300的zui高并行度为5,即1个时钟周期执行5个操作,经过我们的优化,G.729编码器的几个重点函数的并行度达到了4.2以上。
  
  5、在C语言程序中,直接调用TM1300的汇编指令,特别是针对多媒体运算的DSP操作,尽量选用能并行执行的操作。
  
  6、充分使用TM1300的2个高速缓存:指令CACHE和数据CACHE,提高CACHE的命中率。对于程序,在不影响并行度的前提下,使程序尽量小,避免程序的大范围跳转,这样可以提高指令CACHE的效率;TM1300的数据CACHE是以64字节为单位的,即每次从SDRAM读入数据或把数据调出数据CACHE,至少是64个字节,因此在许多地方,我们对数据的存放位置进行了重新调整,使读入CACHE的数据能被CPU充分利用。
  
  通过上述优化措施,我们花比较低的代价在TM1300DSP上实现了G.729编码器算法。在DSP主频为175MHZ、SDRAM频率为140MHZ的TM1300硬件平台上,G.729编码器完成实时语音编码的CPU占用率为8%左右,并且通过了所有测试向量的验证。
  
  参考文献
  
  1、ITU-TRecommendationG.729,CodingofSpeechAt8kbit/sUsingConjugate-StructureAlgebraic-Code-ExcitedLinear-Prediction(CS-ACELP)
  
  2、TriMediaTM1300DataBook
上一篇: 视音频编解码技术及其实现 下一篇: 嵌入式系统优先级反转问题分析
提示

请选择您要拨打的电话: