本文主要是介绍g729源码分析-7-增益量化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现在来分析g729的增益量化,这里包含两个增益,一个是自适应码本的增益gp,一个是固定码本的增益gc
由于自适应码本与固定码本已经被搜索出来了,
就可以根据这两级码本,与反量化的Az系数进行卷积,得到解码的语音信号(包含未知变量gc与gp)
利用这个解码的语音信号与目标语音信号方差最小为准则,
在增益码本里做搜索,搜索出最佳增益
即itu文档中的3.9节,公式63.
笔者把这个公式简略推导列在下面(实际上这个公式太简单了,根本不需要推导,读者即可看出端倪)
首先我们把目标语音信号记作x[n]
反量化Az系统的冲激响应已经之前的代码中得到了,记作h[n]---h[n]的计算过程,笔者在这个系列的第五章节分析过了
自适应码本与h[n]的卷积记作y1[n]
固定码本与h[n]的卷码记作y2[n]
自然,我们可以这么表示解压的语音信号与目标语音信号的方差(是方差吧?笔者的统计学不过关,呵呵)
E = Σ (x[n] - gp*y1[n] - gc*y2[n])^2 --- 笔者注:^2表示平方
展开
E = Σ (x[n]^2 + (gp*y1[n])^2 + (gc*y2[n])^2 - 2gp*x[n]*y1[n] - 2gc*x[n]*y2[n] + 2gp*gc*y1[n]*y2[n])
这就是itu文档里的式63,只不过itu是用矩阵乘法来表达的
Corr_xy2:
这个函数会计算出式63中相应的已经系数如 (y1[n])^2, -2x[n]*y[n]等 其中x[n]^2是不需要计算的,
因为在搜索过程,对于当前子帧,这个项相当于常数项
也就是我们只需要将码本里的增益gp gc代入,计算出最小的E即可
这里itu实际有做一些预估搜索,即通过一个估值手段,来缩小码本的搜索范围为原来的1/4.
笔者将在下一章节分析这一块内容
这篇关于g729源码分析-7-增益量化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!