网络通信 频道

G_723_1语音编解码在定点DSP上的实时实现


摘 要:介绍了ITU-T G.723.1标准和ADSP2191的特征。分析了以ADSP2191实现多通道编解码系统的设计要点,设计了一个用于IP电话系统的多通道实时语音编解码子系统。该系统实现了包括附录A在内的全部功能,通过了所有测试矢量。在一片160M主频的ADSP2191上,可以全双工实时处理5路话音。

关键词:语音压缩;语音编解码;ADSP2191;ITU-T G.723.1

G.723.1是H.324系列中用于语音和其他声音信号的双速率编解码算法建议,它有两种编码速率,分别是5.27K和6.3K.两种速率的编解码器均有很高的语音质量和较低的延时,并允许在每帧的边界(30毫秒)转换速率以实现变化比特率传输。目前G.7231编解码算法已经在一些常用DSP上得到了实现,例如TI的TMS320C54X和AD的AD218X等,但是大部分是基于单片DSP只能实现一路的语音编解码。为了降低成本,基于单个DSP芯片的多通道话音编解码技术开始受到越来越多的重视和采用。本文就是介绍一种基于ADSP2191的G.723.1的编解码算法的多通道解决方案。
一. G.723.1算法描述



1.1 G.723.1编码器
输入模拟语音信号经话路带宽滤波,被8KHz采样,然后被转换为16位PCM码作为编码器的输入。语音解码器的输出通过同样的方式转换为模拟信号。编码器见图 1.1。


图 1.1 基本的G.723.1编码器原理图



G.723.1语音编码器基于码本激励线性预测模型,尽量减少合成语音和实际语音之间的感知加权误差。编码器每次处理240个样本(相当于30ms)的语音帧,每一语音帧首先高通滤波去除直流分量,然后分为长60个样本的4个子帧。计算每子帧的10阶线性预测滤波器LPC参数,将最后一子帧的10阶LPC参数转换成线谱对,使用预测分割矢量量化(PSVQ)方法量化线谱对。未量化的LPC参数则被用于构造感知加权滤波器,并对信号进行加权,经加权后的语音信号每两个子帧(120个样本),计算一次开环基音周期,基音周期范围为18到145个样本之间。基音搜索和码本搜索是按照子帧进行的。对每一子帧,用搜索到的开环基音周期,计算一个谐波整形滤波器,然后连同合成滤波器、加权滤波器一起构成组合滤波器,计算组合滤波器的冲激响应和零输入响应。使用一个五阶预测器,在开环周期附近搜索闭环基音周期,并将基音激励贡献从目标信号中减去,对得到的残差信号进一步进行矢量量化,高码率使用多脉冲极大似然量化法(MP_MLQ),低码率使用代数码本激励(ACELP)算法。
1.2 G.723.1解码器
解码器将接收到的G.723.1码流解包,得到帧编码参数,然后分别对各个参数解码,重构激励信号,合成语音。解码器见图1.2。


图 1.2 基本的G.723.1解码器原理图



首先,解码线谱对参数,插值并转化成LPC滤波器系数;接着,解码并重构基音激励矢量和码本激励矢量,将二者相加得到总的子帧激励信号,让它通过一基音后置滤波器后输入到线性预测合成滤波器,初步合成语音信号;最后,合成语音信号经共振峰后置滤波和增益控制形成最终语音信号。


二. ADSP2191的基本特征


ADSP2191是美国AD公司最新推出的一种高效的定点DSP,主要应用于通讯,工业控制,语音/话音和医疗等方面。具有以下特征:
16位定点DSP,处理能力160MIPS。
片内有160Kbyte存储器,可配置成32K′16bit数据区和32K′24bit程序区。程序和数据空间统一编址,单周期内可以完成双操作数取址。
外部存储器接口:可以分别配置成8bit或16bit,芯片的地址转换功能和数据打包功能可实现与外部数据总线接口,以及与外部SRAM、FLASH或EPROM相连,同时外部的时钟频率可调以便与低速存储设备接口。
高效DMA主机接口,外部主机可通过16位的主机接口对DSP的整个存储空间、引导加载空间或内部I/O空间进行读写操作;同时也可配置成8位的主机接口,以便与低功耗微控制器接口。
具有3条支持H.100标准、A律、U律以及T1/E1兼容设备的双向多通道串口,支持可高达24、32甚至128条通道的时分多路传输;可与外围设备或其他DSPs/MCUs进行同步串行通讯;可配置成3-16位数据宽度。
可进行DMA操作的UART口,它进行全双工异步通讯的比特率为6.25M-9Mbit/s。
两个可进行DMA操作的全双工SPI兼容口,可与多种SPI兼容设备进行通讯。
3个32bit可编程定时器,包括脉宽计数器,PWM发生器以及外部时钟定时器。
同时可有多达11条DMA通道进行工作。

三. 多通道G.723.1编解码的设计



图3.1是一个IP电话系统框图。它由微控制器,ADSP2191、SDRAM和模拟数字接口电路组成。系统中数据分别沿两个相反的方向流动,一个方向是从网络流向多通道编解码子系统,途经控制单元时被解包并重新拼装成符合G.723.1格式的码流,该码流进入子系统后,ADSP2191调用解码程序Decoder()进行解码,结果由模拟/数字接口电路转换成模拟信号传给用户端。另一个方向是从数字/模拟接口电路流向网络,经过多通道编解码子系统时ADSP2191调用Coder()对其编码,数据由PCM格式被变换成G.723.1格式的码流,然后流入控制单元,码流数据在控制单元中被转换成符合网络传输格式的数据并进入网络传输。


图3.1 IP电话系统框图



3.1多通道编解码子系统设计和工作流程
(1) 数据的组织和管理:ADSP2191的输入数据分别来自模数转换器和控制单元。在SDRAM中有两块相同大小的连续区域分别用A和B表示用来存放这些数据。这两块存储区域是以pingpong方式工作的,如果这一轮的输入数据放在区A,那么下一轮的就放在区B。主控程序设一个指针变量DATA_IN,它指示本轮处理的输入数据起始于何处。它有两个值,一个是区A的首地址,一个是区B的首地址,每处理一轮数据指针值就在这两个地址之间切换一次。ADSP2191的输出数据也采用同样的方法组织。
(2) 多通道子系统的工作流程:工作流程如图3.2所示:

图3.2多通道编解码子系统工作流程图



ADSP2191的主控程序首先执行初始化,它包括对每个通道的环境变量和对DMA的初始化。在初始化时将标志变量DATA_READY置为False,同时把DATA_IN指向区A的首地址,初始化完成后启动DMA中断,主控程序进入主循环。程序在主循环中不断查询DATA_READY,与此同时把来自DMA模数转换器的5路采样语音数据搬到SDRAM中,而控制单元则将来自网络的数据分拆重新拼装后通过ADSP2191的主机接口(HPI)搬到SDRAM中。当DMA搬完全部数据后,它从预装指令寄存器中读取指令,开始新一轮的数据搬运操作,同时产生一个DMA中断。接下来ADSP2191启动DMA的中断服务程序响应这个中断,该服务程序向预装指令寄存器写入新的指令,同时将DATA_READY置为True并返回。这时主控程序查出的DATA_READY值是True便跳出主循环,根据DATA_IN指针确定这一轮输入数据在SDRAM中的位置,把n置为1,然后开始对数据进行逐路处理。在进行第n路的编码和解码时先把这一路的数据和环境变量从片外的SDRAM读入片内数据存储器。再分别调用Coder()和Decoder()。一路数据处理结束后,主控程序将输出数据搬到片外SDRAM中根据DATA_OU所确定的区域中,随后判断n是否为5,若是把DATA-IN的值在两个值之间切换一次,然后进入主循环,等待DATA_READY的值再次变为True。若n不等于5那么把n加1,接着处理下一路数据。

3.2关键问题的解决
整个多通道子系统的最关键的部分是G.723.1算法代码的效率。在编写G.723.1源代码时,以ITU-T G.723.1的C标准源代码为参考。主要是对源代码的优化工作,经过把大部分的C源程序代码通过汇编来实现,而且在C语言级和汇编语言级两个层次上充分利用DSP的资源进行了代码优化,然后对G.723.1在ADSP2191上的运算量进行了测试:在一路全双工实现时在高码率6.3K时运算量约为32MIPS,低码率5.3K时运算量约为30MIPS,那么在ADSP2191上实现了五路的G.723.1的全双工编解码后,就没有了足够的MIPS来实现其他的一些接口功能。解决这个难点的关键问题是要在算法级上减少编解码器的运算量。我们对整个算法的各个模块进行了测试发现,码本搜索占据了很大的计算量,以下是我们在两种码率的码本搜索的算法上做的优化。
3.2.1高码率码本搜索(MP-MLQ)算法优化
根据算法的原理及源代码,采用以下的优化方法
· 因为每一种可能的脉冲组合的脉冲幅度相同,因此在计算插入脉冲的响应时,可以预先计算所有可能位置的响应,而在以后的计算中只需根据脉冲符号执行加减运算即可。
· 当确定了当前激励序列的增益G以后,事先计算出:R’h[j]=GRh[j],0≤j≤59, Rh[j]为冲激响应序列h[n]的自相关
函数。从而在已知第一个脉冲位置来确定后面脉冲的位置时,可直接从当前位置l的互相关函数值中减去R’h[1-j]的值,而不用每次都计算Rh[1-j]乘以前一脉冲对应的幅度(因为实际上同一个脉冲序列中各脉冲的幅度相同,都等于增益G)。
· 事先计算出: h’[n]=GR[n] ,0≤j≤59,从而在计算当前脉序列的滤波码矢量时,即h[n]与当前的脉冲序列的卷积时,不用每次计算Gh[n]。
· 计算当前激励序列v[n]的滤波码矢量时,由于激励序列除脉冲以外的位置全为零,因此,滤波码矢量的计算可以由 简化为



以减少循环累加次数,其中mk为第k个脉冲的位置。另外,当n 3.2.2低码率(ACELP)码本搜索算法优化
根据算法的原理及源代码,采用深度搜索算法代替全搜索进行优化。分奇偶位置依据使得C最大原则首先确定某一脉冲如m2的一个最优位置和次最优位置m21 , m22作为根节点,即选择最大与次大的dφ[m2] ;然后局部搜索对应于已知m2的另一个脉冲的非常好的位置如m3,即计算
,



其中m2=m21,m22;m3=6,14,22,30,38,46,54,62,选择使得C23/e23最大的m2与m3。最后在m2与m3已知的条件下对于剩下的两个脉冲位置m0与m1进行全搜索。由于前面两个脉冲位置不是使用全搜索确定的,而只是全搜索后两个脉冲位置,因此运算量下降了许多。 同时,为了搜索的准确性,重新选择首先确定的两个脉冲,再搜索一遍,如先确定m3和m0,全搜索m1和m2。搜索算法流程见图3.3。

图3.3 次最优搜索流程



经过以上算法优化,重新测试发现一路全双工的G.723.1编解码器的计算量高码率和低码率的计算量分别降至30MIPS和29MIPS,这时已经完全可以在ADSP2191上实现五路的全双工的G.723.1编解码,而且还有10MIPS的剩余留给其他的接口用。


四.结束语


本文首先对G.723.1的算法做了一个简单的描述,并同时介绍了ADSP2191的特征。着重介绍了基于ADSP2191的多通道G.723.1编解码子系统,以及为了在单片ADSP2191上实现五路的语音所做的算法级的优化。该系统实现了ITU G.723.1包括附录A在内的全部功能,通过了所有的矢量测试,能在单片ADSP2191上实现五路的实时话音处理。

 

转载地址:http://www.voipchina.cn/technology/2004-03-22/36704.shtml

0
相关文章