您的位置:首页 > 其它

g729源码分析-6-固定码本搜索

2012-04-18 10:17 375 查看
g729自适应激励部分在基音周期中分析了.

g729固定码本搜索和g723极其类似,相应的算法可以参考g723的算法.

但作为编码的一个重要环节,又不得不提一下.

考虑到笔者那已经少得可怜的脑细胞,就一笔带过吧.

首先有这么一行:

gain_pit = G_pitch(xn, y1, g_coeff, L_SUBFR);

gain_pit 其实是自适应码本增益的一个估值(自适应码本的增益会在后继章节接着讲)

利用这个估值,得到固定码本的搜索目标信号

这个估值的计算公式是这样的:

39

Σ x
y

n=0

gain_pit = ------------------

39

Σ x
y

n=0



x
序列,就是代码中的目标语音信号xn

y
序列,就是代码中的y1数组,它是h1与综合滤波器卷积形成的

G_pitch 不但完成了这个估值计算,还计算了一些后继增益量化时会用到的一些项

保存在g_coeff,这些会在后继章节分析(大体也是求偏导之类的)

有了这个估值 gain_pit,就可以从目标语音信号xn中扣除自适应激励成份,

而得到固定码本的目标向量,

代码片段如下:

/* xn2[i] = xn[i] - y1[i] * gain_pit */

//lsc 扣除自适应激励,搜索固定码本

for (i = 0; i < L_SUBFR; i++)

{

L_temp = L_mult(y1[i], gain_pit);

L_temp = L_shl(L_temp, 1); /* gain_pit in Q14 */

xn2[i] = sub(xn[i], extract_h(L_temp));

}

很简单,就是做一个卷积,然后从xn中扣除

目标向量保存在xn2数组里头.

然后是一个看不懂的函数名 ACELP_Codebook

这个函数就是在做固定码本搜索了(g729没有可选项,不做多脉冲激励搜索)

这个函数和g723的ACELP_LBC_code函数算法是一模一样的.

为了节约网络流量,以及csdn的存储空间,以及笔者那少量可怜的脑细胞,不分析了.

有兴趣的读者可以参考笔者之前写g723关于这部分算法的文章:
http://blog.csdn.net/lsccsl/article/details/6842514
接下去的内容稍微做一个前赡介绍,

g729接下来就是做激励编码(自适应激励与固定码本激励),用的方法如前所述.

能量误差最小,求偏导.

林绍川

2012.4.18于杭州
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: