基于DSP的G.729语音编解码器设计
所谓零开销循环是指处理器在执行循环时,不用在循环终止的判断、循环的跳转及循环计数器的递减上额外花费时间。但这就要求编译器必须知道初始值、更新和结束条件;循环体内部不能调用函数;循环体内不能包含break语句;循环表达式中不能含有随循环体中的条件变化而变化的循环变量;循环计数应该递减等。为了实现零开销循环,本文对标准C代码进行了大量优化,如在文件Qua_lsp.c中有如下循环:

优化前后本段代码所消耗的时钟周期数对比见表1。本文引用地址:https://www.eepw.com.cn/article/150672.htm
3.2.4 使用DSPLIB库优化
TMS320C54X系列提供的通用数字信号处理算法库(DSPLIB库)包含有50多个通用的信号处理程序,全部由汇编语言编写,并可由C语言调用,方便C语言与汇编语言混合编程。在计算量大、对实时性要求又高的G.729中调用DSPLIB库函数,对于提高代码效率具有很大的意义。
DSPLIB几乎包括了当前已经成熟的数字信号处理的大部分算法。如:FFT运算、滤波与卷积运算、自适应滤波运算、相关运算、数学函数运算、三角函数运算、矩阵运算等。
3.2.5 指针寻址
在G.729算法中包含了大量数组元素的存取操作,ITU提供的标准代码直接对数组进行操作,使得浪在地址计算上的时间开销很大。若对数组采用指针寻址方式,可节省很多时间。而通常情况下数组又都应用在循环内部,指针寻址方式更加凸显出了它的必要性。
除了以上几种优化方法外,使用内联函数,合理利用暂存器,使用宏定义等也都对代码的优化起到很好的作用。
4 测试结果及性能分析
利用CCS提供的性能分析工具(profiler)对优化前后的代码进行分析,在TMS320VC5416上实现一帧数据编码所用的时间分别为96 ms与8 ms,其中TMS320VC5416的CPU时钟频率为160 MHz。对几个主要函数优化前后的运行时间进行比较,对比如表2所示。
分析结果表明,优化后的时间比优化前大大缩短,并严格控制在了10 ms以内,保证了系统的实时性。同时,将原始语音和重建语音的语音波形进行对比,如图4所示。观察对比波形可知,编码前后语音波形差别很小,重建语音基本保持了原始语音的信息。通过主观听觉测试,重建语音清晰易懂,质量较高,MOS主观评分在4.0以上,并且整个系统运行稳定。
5 结语
本文实现了基于DSP的语音编译码器设计,该设计对ITU提供的G.729源代码进行了算法精简和代码优化,优化后的代码具有编码效率高、占用资源少、实时性强等优点。与源代码相比,它的编码效率提高了10倍以上,克服了源代码难以应用在实时语音通信系统的缺点。
目前,该设计已经应用在本实验室的语音通信实验系统中,与传统语音实验系统相比,为学生提供了更先进的语音编码实验,模块化的软件设计也更适合学生的参与。同时,该系统采用通用的DSP硬件平台,具有可扩展性强的特点,可实现多种语音编码算法,为学生自主性学习提供了良好的条件。
评论