您的位置:首页 > 其它

g729源码分析-3-基音周期搜索(上)

2012-04-11 23:08 267 查看
基音周期搜索,是自适应码本搜索的一个重要依据,

自适应码本的搜索就是在基音周期附近进行的.

和g723的基音周期搜索不同,g729的基音周期搜索搜索也更为精细

g729把基音周期的搜索分成3段,取了每一段中自相关的极值,

三段区间分别为[20,39] [40,79] [80,143]

这三个区间的权值是不一样的,以0.85递减

这个选取归规则可以从itu的文档里看出来,选出基音周期的值较小.

避免选则了基音周期的倍数

另外,itu的基音周期较短的情况下,基音周期的搜索会精细的分数级

这里就涉及到一些升抽样的算法,在一些处理上,itu也采用了一些取巧

的做法,这里就分数基音周期的情况做一些分析

首先搜索出整数的基音周期,方法上面已经讲述了

//lsc 开环基音搜索,分成三个区间搜索,不一定会取最大的,而是尽量取基音周期小的,比例阀值大约为0.85

T_op = Pitch_ol(wsp, PIT_MIN, PIT_MAX, L_FRAME);

然后是在整数基音周期附近,搜索分数基音周期,解析度为1/3

先来回顾一来如何进行升抽样的.

我们先来回顾一些信号处理里面的调制与抽样的一些性质.

在离散的抽样处理,实际上是用一个等间隔的单位信号与被抽样的信号进行乘积(这点很容易理解)

即,设 x
是原始离散信号 对它进行每隔3个点一次抽样,抽样的信号可以表示为

y
=x
*t
, 其中t
=1当n%3==0

再从频域角度来看y(e^jw) x(e^jw) t(e^jw) 我们知道时域上的乘积对应频域的卷积(这个奥本海姆的信号与系统中有详细推导)

可以证明t(e^jw)在频域上也是一系列的冲激串组合

y(e^jw)实际是x(e^jw)在频域上复制n份.如果抽样满足香农定理,即只要对y
进行低通滤波,就可以完全是从y
中恢复x

即所谓的升抽样.

当然在g729中不用考虑满不满足香农定量,我们要做的就是升抽样,而且很显然,我们需要的滤波器在频域上就是一个矩形.

它的傅里叶级就是sinc函数(奥氏的信号与系统有详细推导)

于是我们就在g729中看到了相应的升抽样代码,就是将时域的离散信号(原始语音抽样或者相关)与sinc的值(定义在一个数组inter_3)

相乘,就完成了升抽样,然后进行分数级别的基音周期搜索.

很晚了,困了

笔者将在下章结合代码对分数基音周期再做进一步的说明.

祝各位编程愉快!

林绍川

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