首页 » 技术文章 » 高速G.729ab声码器设计及其在媒体网关中的应用

高速G.729ab声码器设计及其在媒体网关中的应用

作者:  时间:2010-10-21 10:39  来源:EDN

  在VoIP媒体网关设备中,语音压缩编码是其关键技术之一。在ITU-T发布的应用于VoIP的语音压缩编解码标准中,G729是应用较为广泛的一种。G729采用共轭结构代数码本激励线性预测编码” (CS-ACELP)算法,算法帧长为lO ms,编码后速率为8 KbsG729有两个附件:附件A给出一种低复杂度的算法,可应用于多媒体同步语音和数据;附件B在标准算法的基础上增加了静音检测压缩算法以降低平均传输率,包括静音检测(VAD)和舒适噪音产生(CNG)。文献对G729语音压缩编码算法的具体原理中有详尽的描述,本文的论述重点在算法的汇语言优化、声码器DSP硬件接口设计,以及其在媒体网关中的应用。

  1 G729ab编解码核心算法优化

  本文选择TI公司的TMS320C6203芯片为核心,实现G729ab声码器设计。TMS320C62xx系列DSP的集成开发环境Code Composer Studio(简称CCS)支持标准C语言和汇编混合编程的方式编程,为了提高编解码算法的效率,本文对ITU_T的标准G729abC语言原码进行汇编指令优化设计。同时,对于上层编解码器控制函数,采用C语言开发,以提高声码器的可维护性。

  C62xx采用6级流水线结构,提供了AB两组(32)通用寄存器,8个功能单元(L1,.L2,.S1,.S2,.M1,.M2,.D1 和.D2),最多同时可以有8条指令处在不同的执行阶段并行。流水线结构是DSP实现高速运算的重要技术。由于不同指令的指令周期不同,需要在多周期指令后插入足够的NOP(空操作)指令,以避免流水线冲突。

  在G729ab的标准C代码中,有大量的循环体。循环控制的关键跳转指令B,需要等待5个指令周期,大量的NOP操作将降低代码的效率。为了提高循环效率,可以合理安排指令顺序,在一个汇编循环体内完成多个C循环的运算的流水线操作。用汇编指令实现如下简单的for循环求信号能量的程序段为例:

  上述示例可使用如下汇编程序段实现:

  如上优化后,循环体LOOP仅为一个周期,在这一个周期中有6条并行运行的指令。其中,内存读取指令LDFI4个周期,故乘法指令SMPY是将向前追溯 4个循环周期的内存读取结果相乘。同理,SMPY指令需2个周期,故SADD指令是将2个循环周期之前的相乘结果相加。B0A1配合用于循环控制,在等待跳转指令B有效的5个延时周期内,依次进行随后的后一循环的取数,前第3个循环的相乘,前一个循环的求和、循环控制和跳转指令,依次类推。上述优化实现了最优循环效率。
本设计优化后核心编解码算法代码完全符合ITUT G729ab标准,并通过了ITU-T的所有测试矢量。使用300 MHz主频的TMS320C6203实现声码器,单片可支持31G729ab算法。

  2 声码器的DSP硬件接口设计

  在媒体网关中,声码器的功能是实现PSTNE1语音信号和数据网分组语音压缩信号之间的编解码转化。利用TMS320C6203片内固化设置的 McBSP接口(多通道缓存串行接口)HPI接口(主处理器接口),可以实现DSPE1总线、以及数据网上层处理器的连接。结构示意图如图1所示。

  TM320C6203通过内置McBSPEDMA(Enhanced Directory Memory Access,增强型直接内存访问)控制器配合,可实现与E1标准接口的链接。设置McBSP的接收/发送控制寄存器(RXCR),使串口按照标准E1 数据格式进行数据收发;设置串口管脚控制寄存器(PCR),控制串口采用外部E1总线的时钟和帧同步信号;设置串口控制寄存器(SPCR),控制串口的 RXINT(收/发中断)EDMA响应。

  TMS320C6203支持16EDMA通道,其1215通道可用于响应串口收、发中断。以串口接收数据为例:本设计中设计了乒、乓两个串口数据接收缓存区。

  串口寄存器中的数据通过EDMA模式缓存到乒缓存区,当乒缓存区满时,EDMA参数重载,控制切换,将数据缓存至乓缓存区,同时给出EDMA中断,通知CPU读取一帧数据。通过McBSP接口发送数据的过程完全类似。
声码器通过DSPHPI接口与上层处理器连接,实现数据网分组语音压缩信号的收发。在HPI接口中,设计了以太网数据发送/接收缓存区,并为每个缓存区设计了RP(Read Pointer,读指针)WP(Write Pointer,写指针),用于控制上层处理器和DSP之间的编码数据交互。同时上层处理器通过HPI接口向声码器发送指令,控制通道的打开或关闭。

相关推荐

高速G.729ab声码器设计及其在媒体网关中的应用

在线研讨会
焦点