g729的长时后置滤波,最后还有一些细节处理
会再次升抽样,用一个129的样点对激励进行升抽样,并与search_del的升抽样进行比较,哪个相关大选取哪个
/* Filtering with long filter */
compute_ltp_l(ptr_sig_cadr, ltpdel, phase, ptr_sig_pst0,
&num2_gltp, &den2_gltp, &sh_num2, &sh_den2);//lsc 相同的延迟,用129个样点的插值滤波器重新计算
接来是计算短时后置滤波器的冲激响应的自相关系数Rh(1),
/* Controls short term pst filter gain and compute parcor0 */
calc_st_filt(apond2, apond1, &parcor0, sig_ltp_ptr);//lsc 放大信号,并计算 R,并将sig_ltp_ptr进行放大
完成短时后置滤波
/* 1/A(gamma1) filtering, mem_stp is updated */
Syn_filt(apond1, sig_ltp_ptr, sig_ltp_ptr, L_SUBFR, mem_stp, 1);//lsc 再次滤波(分母),还原了信号,这样就完成了短时后置滤波
做倾斜补偿滤波
/* Tilt filtering */
filt_mu(sig_ltp, sig_out, parcor0);//lsc 倾斜补偿滤波
倾斜补偿滤波处理,依据基本与g723的相似,但细节略有不同
g723对频谱能量的判断是根据感知加权后的语音信号相关性做出来的
g729则不同,是根据 "反感知加权滤波"(姑且这么称呼吧) 的冲激响应相关性做出来的
所以g729的 倾斜补偿滤波的调节机制正好与 g723的相反
先回顾一下g723的调节机制 感知加权的语音信号 自相关 R(1)/R(0) 当R(1)/R(0) 接近于1的时候,说明高频的分量可能较低,对应的倾斜补偿滤波器是一个高通滤波器,反之,如果接近于-1,则是一个低通滤波器
但g729是基本冲激响应的相关性的即 Rh(1)/Rh(0) 即接近于1的时候,说明的是高频分量较高,对应的倾斜补偿是一个"低通滤波器"(从倾斜补偿滤波器的构造,可以看出频谱的幅度总是大于1的,或者说是一个低频高大器更恰当)
反之,Rh(1)/Rh(0)接近于-1时,则说明高频分量低,就要放大高频
原因 判断的依据是 "反感知加权滤波器" 的冲激响应,它与解码的语音信号的频谱分布恰恰是相反的,所以才会有以上的结论
观察itu文档的4.2.3节,式(86) 求它在单位圆上的频谱幅度,自然就知道它是一个频谱放大器
最后,根据信号的差异,做一个增益处理
/* Gain control */
scale_st(signal_ptr, sig_out, &gain_prec);
//lsc 重构后的信号,与做了后置滤波处理的信号 算出一个比列值,然后依次放大sig_out的每个采样
//分别对 sig_in sig_out进行求和,然后按比例混合迭代,求增益
至此g729编解码分析完毕
林绍川
2012-7-5于杭州