不同于g723固定系数的共振峰感知加权
g729的共振峰感知加权是自适应的.
perc_var 这个函数来对共振峰感加权进行估值
我们先看itu的文档 3.3节 的式30,
这是一个判断语音频谱是否平坦的一个条件.
因为人类语音的频谱有个特点,越高频的共振峰的能量会越弱.
而共振峰感知加权要注意这个现象,如果频谱倾斜了(高频共振峰能量弱),要加强加权系数
根据莱文森德宾递推公式:
k1=-R(1)/R(0)
k2 = (1-R(2)/R(0)) / (1-k1^2)
从itu的文档看出,对数面积比,实际上是反k1 与 k2扩展到 负无穷到正无穷上了
也就是对数面积比趋向于负无穷的时候,此时对应的 R(1)/R(0)是接近于 1的, 正无穷时 R(1)/R(0)是-1
即对数面积比系数越小,可以估计出高频分量越低, 对数面积比系数越大,高频分量就越高.
当条件1满足时,我们其实可以计算出 k1差不多为 -55/56 即 R(1)/R(0) = 55/56 即高频分量低
R(2)/R(0)其实对应着次高频分量,再来看k2,R(2)/R(0)大概可以由k2的取值推断出 R(2)/R(0)也是一个非常接近1的值,
即,次高频分量还是低的.(此时k2大约为3/5,由于分母极小,所以分子也不可能太大,推断于R(2)/R(0)是接近于1的值)
结合前一帧是平的,由于高频分量都低了,就可以推断出当前帧应该是倾斜了
同理可以推断于条件2是一个相反的过程,由倾斜,而高频分量高了,认为当前帧的频谱是平坦的
注:人类语音能量集中在前两个共振峰,后面的共振峰能量会依次降低,共振峰对听觉心理的影响最大,
所以感知加权要加强共振峰的强度与带宽
引入的感知加权.
我们可以因式分解成:
1
-----------------------------------------------------------------------
(z^-1 + r*cos(b1) + i*r*sin(b1)) ... (z^-1 + r*cos(b10) + i*r*sin(b10))
我们将 z=(z/a) 0<a<1代入,看其中的一个因子
1
------------------------------------
((z/a)^-1 + r*cos(b1) + i*r*sin(b1))
可化为
1/a
------------------------------------------
(z^-1 + (r/a)*cos(b1) + i*(r/a)*sin(b1))
将 z = e^jw代入,则整个分式的绝对值(对应频域的振幅)
1/a
----------------------------
1+(r/a)^2+ 2*(r/a)cos(w+b1)
我们画一下这个函数的图,观察a变化,引起的幅度变化,自然能得出a越小,共振峰带宽扩展,共振峰加强的结论,b1则表示共振峰的位置
对比723,729引入了感知加权自适应机制,即,两个共振峰的位置如果太接近了,带宽扩展有可能导致两个共振峰出现重合了
也就是最近的两个共振峰越接近,则带宽扩展的加权越低(即a越大)
以上就是分析出来的共振峰加权系数取值的一些推导依据,代码就相应简单了,基本上照本宣科
最终求得两个共振峰感知加权系数
得到加权系数后,对信号进行滤波,比较简单,不详述了
//lsc 处理两个子帧,分别对它们进行感知加权滤波
Weight_Az(&A_t[0], gamma1[0], M, Ap1);
Weight_Az(&A_t[0], gamma2[0], M, Ap2);
Residu(Ap1, &speech[0], &wsp[0], L_SUBFR);//lsc 对应加权滤波器分子的滤波
Syn_filt(Ap2, &wsp[0], &wsp[0], L_SUBFR, mem_w, 1);//对应加权滤波器分母的滤波
Weight_Az(&A_t[MP1], gamma1[1], M, Ap1);
Weight_Az(&A_t[MP1], gamma2[1], M, Ap2);
Residu(Ap1, &speech[L_SUBFR], &wsp[L_SUBFR], L_SUBFR);//lsc 对应分子的
Syn_filt(Ap2, &wsp[L_SUBFR], &wsp[L_SUBFR], L_SUBFR, mem_w, 1);//lsc 对应分子的
林绍川
2012.4.11于杭州