近年来,随着Internet的日益普及,IP电话的应用方兴未艾。现在IP电话的实现方式已经从PC-PC的软件方式发展到普通电话通过IP电话网关上网。IP电话网关具有建立和维护网络连接,处理数字化语音的功能。IP电话网关的一个主要性能指标是它的处理密度。而IP电话网关的处理密度主要取决于它所使用的语音编解码器处理一帧数据的延迟大小。为了提高IP电话网关的处理密度,本文在实现ITU-T G.729.A语音编解码器时,采用了目前性能的DSP TMS320C6201。研究了在TMS320C6201上实现G.729.A的编解码器的编程技巧;归纳出一系列减少编解码器处理延迟的优化方法。采用这些优先方法和编程技巧,可以实现单片TMS320C6201能同时处理20路路语音。
1 G.729.A编解码器的算法
1.1 编码算法
G.729a是由ITU-T制定、适用于PSTN的第四代低速率语音编解码标准,该标准采用共轭结构一算术码本激励线性预测(CS-ACELP)算法,其编码所需要带宽为8Kbps,可以达到传统长途电话的音质,适用于网络带宽较低、选择使用低比特速率编码方法的语音通信系统。
在开始编码之前,先要对输入的模拟信号进行电话带滤波,然后以8kHz频率对其进行采样,再将其转换为16位线性PCM码,作为编码器的输入。
编码器处理语音的单位是帧,1帧为10毫秒语音,包括80个声音样本(采样频率为8kHz)。编码器对每一帧语音信号进行分析,抽取出其中的CPLD模型的参数,对这些参数进行编码和传送。其编码过程如图1所示。
在预处理阶段,输入信号经高通滤波并乘以比例因子,然后对每一帧预处理之后的信号进行线性预测分析,计算出线性预测滤波器系数,其中,线性预测滤波器系数定义为:.这些系数被转化成线谱对(LSP,Line Spectrum Pairs)并用可预测二阶矢量量化法量化成18位。使用合成分析搜索过程选定激励信号,使得原始信号和重构信号之间的误差在感觉加权失真测量中。
对每个子帧(5毫秒,包括40个样本)求出其激励参数(固定和自适应码本参数)。本帧的量化和未量化的线性插值系数。每一帧根据感觉加权语音信号估计出开环基音延迟。对每一子帧进行以下操作:将线性预测残差通过加权合成滤波器的冲击响应h(n),使用目标信号x(n)和冲击响应h(n)在开环基音延迂回通过周围搜索,并进行闭环基音分析(得出自适应码本延迟和增益)。个子帧的基音延迟编码为8位,第二个子帧采用差分方法编码为5位。通过减去(滤波后的)自适应码本贡献来更新目标信号x(n),新目标x'(n)在固定码本搜索中使用以找到激励。,得到的激励信号被用来更新滤波器状态。所有这些参数封装到80位的压缩数据帧中。
1.2 解码算法
解码器算法框图如图2所示。
首先,从压缩比特流中取得各参数的索引,再从这些索引中得出一帧语音的编码器参数,包括LSP系数、2个部分基音延迟、2个固定码本向量、2套自适应和固定码本延迟,这些参数被用来生成激励信号并合成滤波器参数。LSP系数经插值后,形成每个子帧的LP滤波器。对每个子帧进行以下处理:
·自适应和固定码本向量乘以各自的增益系数得到激励信号;
·激励信号经过线性预测合成滤波器得到重构的语音;
·重构后的语音信号再经过一个后处理阶段,包括基于长时和短时合成滤波器的自适应滤波器,然后再经过高通滤波器并乘以相应的比例因子。
2 ITU-T G.729.A编解码器实现的关键技术
2.1 ITU-T G.729.A编解码器实现的硬件平台
ITU-T G.729.A编解码器实现平台是笔者开发的一种集成式IP电话网关。这种集成式IP电话网关的设计思想是以PC机为基础,集成了市场通用板卡,如LSI/C6200DSP资源卡、Dialogic的语音卡和网关等,并以这些板卡为硬件平台,按照相关协议,开发出一套IP网关软件。集成式IP电话网关的硬件基本结构如图3所示。其中G.729.A编解码器是由LSI/C6200资源卡上的TMS320C6201 DSP来实现。
2.2 ITU-T G.729.A软件模块的设计
G.729.A编解码器运行的硬件平台是TMS320C6201DSP,支持SPOX.SPOX是一种功能很强的实时操作系统。在SPOX操作系统的调度下,可对多路语音进行适时的语音压缩和解码。G.729.A编解码器件主要由调度及命令解释模块、G.729.A数据压缩与解压缩模块和接口模块三部分组成。
(1)调度及命令解释模块
该模块主要用于解释HOST发来的各种命令,如发送或接收编解码数据,查询编解码状态以及启动、停止编解码操作等,该模块不直接与HOST打交道,而是以SPOX提供的服务方式,通过接口功能模块间接地实现与HOST之间数据交换。同时在SPOX的支持下,完成对多路语音编解码的适时调度。
(2)G.729.A数据压缩与解压缩模块
该模块是ITU-T G.729.A编解码器的模块,在很大程序上影响编解码的性能。该模块实现了ITU-T G.729.A全部功能。该部分已单独形成一个TMS320C6201函数库,可与其他任何部分连接。
(3)接口模块
该模块主要实现TMS320C6201与HOST以及与语音卡之间的数据交换,该模块分成两部分。一部分主要负责TMS320C6201 DSP与语音卡之间的数据传输,它负责不断地将语音卡采取的语音数据通过语音总线(如SCbus),采取等时通信方式送入到LSI/PCI6200资源卡RAM中。另一部分主要负责TMS320C6201 DSP与HOST之间的数据交换。编解码器与HOST之间的数据交换采用中断方式进行同步。
2.3 ITU-T G.729.A标准在TMS320C6201上实现的关键技术
如何提高G.729.A语音编码的执行速度是G.729.A编解码器实现的关键技术问题之一。为此,归纳出一系列编程技巧和优优方法,较好地解决了这一难题。
(1)G.729.A标准中规定的算法都是基本算法。因此,在实现时,可以用快速算法。
(2)算法中有很多FIR和IIR运算,如:共振峰滤波器、听觉加权滤波器、联合滤波器等,在设计这些滤波器时,使用较大数组来放滤波器的系数。这样,每计算输出,不需系数更新移位,从而可以减少内存操作次数,因此可以通过牺牲存储器空间来提高代码的执行速度。
(3)多使用指针,尽量减少变量之间的反复拷贝操作。
(4)用查询静态表的方法来代替动态的计算,从而减少计算延迟。例如,在设计cos()函数时,程序在初始化时就生成一个512项的cos()函数表。当需要计算cos()函数值时,可以采用查表方式来代替动态计算。
(5)内存单元的合理分配。TMS320C6201 DS的片内存储器有64KB数据存储器。由于TMS320C6201从片内存储器读入一个字比从片外存储器读入一个字快14倍,因此在编程时,尽量将经常使用的数据分配在片内存储器中。
(6)G.729.A在TMS320C6201上定点实现时,数据也是一个关键问题。在定点信号处理芯片上实现某些浮点算法时,可以采取定点数来表示浮点数,这样可以加快运行速度,但可能导致运算不够。解决的方法是在要求比较高的地方,可以将计算的中间变量用32位表示,甚至用40位表示。
(7)充分利用TMS320C6201的编译器和优化工具来优化C和线性汇编代码,并合理地选择优化参数。有关速度的优化参数是:-o3、-pm、-mt、mi等。并尽量用TMS320C6201的线性汇编或汇编语音来实现G.729.A编解码器的算法。
(8)充分利用TMS320C6201的特点来编写代码。如流水功能,8个功能单元并行操作功能,32位字读写功能以及Intrinsics的使用等;对一些简单循环而前后没有因果关系,合并这些循环也有利于做流水线。
3 性能测试
分别用二种测试工具对G.729.A编解码器的处理延迟作了测试。种测试工具是C6X Simulator,测试条件是假设所有代码装在TMS320C6201片同的程序存储器中,称之为Non cache测试模式。另外一种测试方式是采用TI公司的C6X的EVM卡,测试条件是将TMS320C6201片内64KB RAM作为Cache使用;因此称之为cache模式。二种测试模式的测试结果如表1所示。
表1 G.729.A编解码的时钟数
从表1可看出,TMS320C6201工作在频率为200MHz时,即每Cycles的周期为0.5毫秒,可以算出G.729.A编码一帧(30毫秒)的延迟时间是0.43~0.46毫秒。所以单片TMS320C6201可以同时处理大约20路G.729.A编码。
ITU-T G.729.A语音信号压缩编解码技术集成了众多低速率语音编解码的优点,极大地提高了低速率编解码的语音质量,但算法较复杂。而TMS320C6201 DSP是目前快的定点数字信号处理器,如果在编写程序时,能充分利用上述关键技术,就可以充分发挥TMS320C6201的功能,大大减少G.729.A编解码的处理延迟,并能保持良好的语音品质。将该编解码应用在该IP电话网关中,在很大程度上提高了IP电话网关处理密度,改善了IP电话网关的性能。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。