李德鹏,高永安
(1.杭州电子科技大学电子信息学院,杭州 310000;2.中国电子科技集团50所,上海 200063)
频谱利用率是当前通信系统需要考虑的重要方面,而语音通信又是当前通信最重要的应用。所以在语音通信方面,用尽可能小的带宽,传输高质量的语音信号是实际应用的要求。G.729 的出现满足了这两方面的要求。G.729 对8 kHz 采样,16bit 线性PCM量化的输入语音进行编码,是一种8 kbit/s 电话带宽的语音编码标准[1]。但是,算法实现的运算量大,对硬件运算速度要求高。G.729 语音编码算法的运算量主要集中在码书搜索和LP 参数的运算上[2],本文对G.729 自适应码书搜索算法进行研究并做出了改进,在保证语音质量的前提下,降低了运算。
为减小最佳自适应码书时延的搜索的复杂度,先由开环基音分析得到最佳开环基音时延Top,而后闭环搜索在时延Top范围附近进行。每10 ms 帧用加权语音信号xw(n)作一次开环基音估计。最佳开环基音由xw(n)信号的自相关函数决定:
将上式在3个范围内[20,39],[40,79],[80,143]进行最大自相关函数搜索。保留最大的R(ti)(i=1,2,3),然后通过式(2)计算归一化。
在三个归一化自相关值中,将较低范围的时延值选为优胜者。最佳开环时延Top可按照下面方法确定:
100 帧语音的开环基音估计如图1(图中Δt=Ah=0)所示。
图1 100 帧语音G.729 的开环基音估计
第2 子帧的搜索围绕已选第1 子帧基音T1附近进行,搜索边界为tmin-2/3和tmax+2/3。这里,tmin和tmax是由T1按下列方法确定:
闭环基音通常使下式最大化来搜索
这里,x(n)是目标信号,yk(n)是在时延k 的过去滤波激励(过去的激励与h(n)的卷积)。假如最佳整数时延小于85,为了确定T1和T2,必须围绕最佳整数时延的分数作测试。小数时延的搜索可以通过在小数-1/3,0,1/3 处进行过去激励插值,选择使等式(3)最大的小数部分。
G.729A和G.729 一样,也用10 ms 语音帧的CS-ACELP 算法。但在几个算法上做了改进,使得在算法复杂度上比G.729 有50%的降低,可以用10-12MIPS 的来DSP 来实现。主观测试结果显示G.729A和G.729 在大多数情况下没有差别,但在有背景噪声的情况下稍有恶化。同时,G.729A和G.729 相互兼容。用G.729A 编码的语音可以用G.729 进行解码,反之亦然[4]。G729A 开环搜索采用偶样点基音搜索算法,可以概括如下:
G.729A 同G.729 一样也在[20,39],[40,79],[80,143]三个范围内进行最大自相关函数搜索,但是对式(1)搜索进行了简化:
其中,Dc=2为抽取因子。k 在[80,143]范围内取偶数时延进行检测,在得到的最大值处,再围绕偶数时延进行±1 检测[4-5]。开环基音时延Top由使R(k)最大的k值决定。这使得开环基音搜索的运算量减少了一半,因此也使得语音质量稍有下降。100 帧语音的开环基音估计如图2(图2 中Δt=Ah=0)所示。
图2 100 帧语音G.729A 的开环基音估计
G.729A 自适应码书闭环搜索同G.729 相同,只是考虑式(3)的分子最大,来简化搜索。条件如下:
这里,xb(n)是目标信号x(n)与加权综合滤波器的脉冲响应h(n)之间的卷积函数,uk是延迟k 的过去激励。简化自适应码本搜索和G.729 相比音质有所下降。这是由于,被选的1/3 处基音时延与G.729 偶有不同。
通过上面分析得出,自适应码书搜索的计算量主要集中在开环基音搜索阶段,因为闭环搜索是在开环基音搜索的小范围内进行的,运算量远小于开环搜索。开环基音由式(1)得到,要降低搜索量就要对式(1)进行简化搜索。影响计算量的因素有两个,一个是语音样点n,一个是时延k。
首先,可以从G.729A 得到启示,通过增大式(4)中抽取因子Dc的值,来减少自适应码书的搜索量。一般Dc可在[1,10]区间进行整数抽取。这样每个时延的相关性运算可以成倍的降低,但也使语音质量下降。
其次,对式(1)进行分析,可以通过对时延样值k进行抽取,来降低搜索量。在整个时延间隔20≤k≤143 内,对R(k)函数的计算中通过Dt来抽取k。公式可以表示为:
自然这一简化也降低了信号质量。为了减小时延抽取对信号质量的影响,可以考虑围绕抽取得到的最佳时延估值,在间隔0≤Δt≤(Dt-1)内搜索最终的最佳时延Top,这增加了R(k)的计算量,但也提高了信号质量。
但是,如果最终的最佳时延Top远离它抽取得到的最佳时延估值时(即在间隔大于Dt时),将得不到最佳的Top值。对于这一问题,可以通过在k 的三个子区间内分别选取Nt个抽取得到的最佳时延估值,然后围绕这些延时估值在间隔0≤Δt≤(Dt-1)内搜索最终的最佳时延Top。可以取1≤Nt≤3,假如Nt足够大,就可以得到不低于G.729A 的语音信号。
将上面修改方案通过恰当的联合,能够更大程度的减少开环搜索的量。考虑上面所提到的所有修正的贡献,开环阶段所需的M 乘和A 加[5]为
图3 取Dc=5,Dt=4,Δt=2,Nt=1 时,100 帧语音的开环基音估计
取Dc=5,Dt=4,Δt=2,Nt=1 对G.729 的开环基音搜索算法进行改进,闭环搜索采用G.729A 的方案,对得到的编码语音进行主观听觉测试,同G.729A 编码语音相比没有差别。在上述取值改进搜索的条件下得到语音同原始语音及G.729A 的波形对比如下。
图4 语音同原始语音及G.729A 的波形对比
在不同取值下改进开环基音搜索,对得到的语音进行主观听觉测试得到的测试结果如表1。
表1 不同抽取值时音质与计算量
通过上述的表对比可知,对开环基音搜索算法改进,大大降低了搜索计算量,而语音质量基本没有改变。主观测试表明在无误码条件下编码语音质量不低于32 kb/s 自适应差分脉冲编码调制[6-8]。
通过对G.729 自适应码书搜索算法的分析,得出自适应码书搜索的计算量主要集中在开环基音搜索阶段。通过对开环搜索算法的研究和改进,降低了搜索复杂度,所得语音质量不低于G.729A,而计算量大大降低,降低了硬件资源的消耗,更利于实时实现。
[1]ITU-T Recommendation G.729,Coding of Speech at 8kb/s Using Conjugate-Structure Algebraic-Code-Ex-cited Linear-Prediction(CSACELP)[S].1996,3.
[2]权元文.G.729 语音压缩编码算法的分析及DSP 实现[D]:[硕士论文].西安:通信与信息系统,2005.
[3]赵晓群.数字语音编码[M].北京:机械工业出版社,2007.
[4]Salami R,Laflamme C,Bessette B,et al.Description of IUT-T RECommendation G.729 ANNEX A:Reduced Complexity 8 kb/s CSACELP CODEC[C]//IEEE Xplore,1997:775-778.
[5]许丽红,阚海鹰,余小清,等.G.729 CS-ACELP 语音编码算法的优化及其实现[J].上海大学学报,2001,2,7(1):13-17.
[6]Thiago de M Prego,Sergio L Netto.Efficient Search in the Adaptive Codebook for ITU-T G.729 Codec[J].IEEE Signal Processing Letters,2009,16(10):881-884.
[7]Akitoshi Kataoka,Takehiro Moriya,Shinji Hayashi.An 8-kb/s Conjugate Structure CELP Speech Coder[J].IEEE Transactions on Speech and Audio Processing,1996,11(4):401-411.
[8]Salamir,Laflammec,Adoul J P,et al.Design and Description of CS-ACELP:A Toll Quality 8 kb/s Speech Coder[J].IEEE Trans on Speech and Audio Processing,1998,6(2):153-158.