g729源码分析-11-后置滤波处理(二)
2012-07-05 19:59
302 查看
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于杭州
会再次升抽样,用一个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于杭州
相关文章推荐
- g729源码分析-11-后置滤波处理(二)
- g729源码分析-10-后置滤波处理(一)
- g729源码分析-10-后置滤波处理(一)
- Spark修炼之道(高级篇)——Spark源码阅读:第十二节 Spark SQL 处理流程分析
- 【Android消息处理机制】android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 【Linux4.1.12源码分析】VXLAN报文内核协议栈处理
- Tomcat处理HTTP请求源码分析
- Tomcat处理HTTP请求源码分析(上)
- Libevent源码分析-timer和signal处理
- nginx源码分析——http处理流程
- Kprobes源码分析----kprobe的处理
- hashMap(一)——拉链法冲突处理与hashMap源码分析
- Struts2源码分析--请求处理续二
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 蔡军生先生第二人生的源码分析(二十四)人物向前走的键盘消息处理
- twitter storm 源码走读之5 -- worker进程内部消息传递处理和数据结构分析
- java集合框架11——TreeMap和源码分析(二)
- Spring MVC源码分析(续)——请求处理
- android的消息处理机制(图文+源码分析)—Looper/Handler/Message
- 图像处理之双边滤波介绍与源码实现