基于TMS320C5416的G.729语音编解码算法的优化和实现

[10-10 20:36:41]   来源:http://www.88dzw.com  电子制作   阅读:8869

文章摘要: www.88dzw.com 在G.729软件仿真时发现运算量较大的部分是LSP系数的矢量量化与激励码本(自适应码本和固定码本)的搜索,这两个部分的运算量大约占全部编解码运算量的60%以上。所以在优化过程中,着重对固定码本Acelp_Code_A()、分数基音分析pitch_fr3()、开环基音分析pitch_ol_fast()、增益量化Qua_gain()等占据绝大多数运算量的函数进行了优化;仅仅简化算法不能满足实时要求,还使用了CCS提供的C优化器进行C语言优化,同时还可以使用内联函数和汇编语句。经过以上处理后,输出的信号满足通信要求。通过分析优化前后这些主要模块的速度对照表(如表1

基于TMS320C5416的G.729语音编解码算法的优化和实现,标签:电子小制作,http://www.88dzw.com

 

www.88dzw.com


    在G.729软件仿真时发现运算量较大的部分是LSP系数的矢量量化与激励码本(自适应码本和固定码本)的搜索,这两个部分的运算量大约占全部编解码运算量的60%以上。所以在优化过程中,着重对固定码本Acelp_Code_A()、分数基音分析pitch_fr3()、开环基音分析pitch_ol_fast()、增益量化Qua_gain()等占据绝大多数运算量的函数进行了优化;仅仅简化算法不能满足实时要求,还使用了CCS提供的C优化器进行C语言优化,同时还可以使用内联函数和汇编语句。经过以上处理后,输出的信号满足通信要求。通过分析优化前后这些主要模块的速度对照表(如表1所示),可以看出各个主要模块的优化效果是比较明显的。一帧语音信号经过处理前后幅频图(如图4所示),可以看出语音信号经过处理后保持良好的语音质量。


    系统运行主要分为四个过程:语音存储,数据编码压缩,数据解压缩,语音回放。将输入的语音数据首先进行抗叠滤波,然后进行模数转换,经DSP采集并存入RAM存储器中,即是语音存储过程;接着运行编码程序,将前面存储的信息进行压缩并存储,这是编码过程;然后进行解码,并将数据存回原来的位置;最后DSP执行输出指令,将解码后的数据送到数模转换器中,实现模拟输出。
    用C5416最终实时实现了G.729声码器,用该声码器分别实时播放纯语音文件、语音加背景音乐文件。对重建语音质量的主观测试结果表明,恢复语音保留了很好的说话人特征,合成语音的清晰度和自然度均较好。该声码器性能测试数据如下:编解码一帧平均时钟周期数为1 010 350,CPU时钟频率为160MHz,所以编解码一帧需要7.31ms时间;程序RAM容量为9.381KB;数据和常数RAM容量为7.146KB。以上数据表明,G.729编解码器在C5416上实时实现的技术,可以很好地应用在电话会议、多媒体通信以及采用宽带语音编码的通信系统中。

www.88dzw.com

2.2 进行C语言优化
    基于G.729标准的声码器最终在定点TMS320C5416上实时实现。在定点TMS320C5416内,浮点数是通过将小数点固定在特定位置来表示的,这是定点TMS320C5416的局限之一。为了区分小数的不同值域,使用了Q-格式。不同的Q-格式在于小数点的位置不同,因此整数域也不同。当两个数相乘时,会产生一个特殊的符号位。如:两个Q4数相乘, 需要附加一个左移的操作以去除这个多余的符号位,乘积应该是一个Q9格式的。如果DSP中的FRST位被置位,这个去除多余符号位的移位操作能够自动完成。对于16位数的乘法运算,应该得到32 位的乘积。但是,由于只需要16位的积,该32位乘积中只有高16位被存储下来,积的低16位被丢弃。为了达到高准确性,在连续的乘法运算过程中(如卷积),应该一直保持32位的计算结果,只对最终的计算结果进行丢弃低16位的截短操作。为了达到更高的准确性,在这一操作过程中会使用到一种双重精度格式, 这种格式仅仅出现在使用单精度不够,而又不必要使用32位精度的时候。两个32位数相乘,只需要32位的乘积,而不是64位,不过注意到TMS320C5416是16位的,所以在双重精度格式中,32位整数分为高位字和低位字。高、低位字中都含有符号位,以进行快乘运算。其格式如下:

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作