开源speex的语音增强(去噪)算法介绍

speex的语音增强(去噪)算法介绍

speex是一套主要针对语音的开源免费,无专利保护的应用集合,它不仅包括编解码器,还包括VAD(语音检测),

          DTX(不连续传输),AEC(回声消除),NS(去噪)等实用模块。Speex的强(去噪)算法性能较好,而一般文档都是侧重于

          对应用接口的介绍。 本文对speex去噪算法步骤做一些简要整理和介绍,以提供给对该算法感兴趣的读者参考。

1)preprocess_analysis()包括两部分,主要是加窗交叠傅立叶(fft)变换等常用的信号处理算法。
1.1)预处理
      信号输入,加窗,交叠(overlap),时频傅立叶变换(fft)
1.2)计算能量
      计算频域能量ps,而filterbnak_compute_bank32()计算基于Bark带(临界频带)内的带噪信号能量。
2)update_noise_prob()更新噪声能量,使用的方法比较简单,即一般的固定迭代因子平滑算法;
3)更新mel噪声谱能量;
4)计算后验信噪比和进行先验信噪比更新:
post_SNR = ps/noise - 1;
gamma = 0.1 + 0.89*(old/(old+noise))^2;
priori_SNR= gamma*max(0,post) + (1-gamma)*old_ps/noise;
5)先验信噪比平滑(zeta[i]),用于本底增益计算,计算范围包括fft域和Bark域。 
6)计算Bark带(临界频带)内的EM算法增益和线性频域上的EM算法增益。
{注:EM(YARIV EPHRAIM 和 DAVID MALAH) 是语音增强领域的泰斗。}
考虑到在临界频带内幅度谱并不一定符合高斯随机分布,所以EM算法在Bark带内不能严格适用,这一点JEAN-MARC也在c代码中做了说明, 所以此处只以线性频率上的EM增益为例进行说明。
    6.1 )   weiner 滤波:prior_snr=   prior_snr /(   prior_snr +1);
    6.2 )  超几何分布增益参数 theta= prior_snr *(1+post_snr);
    6.3)   超几何分布增益 MM=exp(-theta/2)*[(1+theta)*I0(theta/2)+theta*I1(theta/2)];其中I0和I1是贝塞尔函数。
    6.4)   增益 g=min(1,prior_ratio*mm);
    6.5)   p=gain2[i];gain2是由临界频率计算后的增益扩展到线性频域后的增益。
    6.6)   约束增益:如果 g/3>st->gain  则 g=3*st->gain  ;
    6.7)  gain=g;     如果 gain<gain_floor  则  gain =gain_floor  ;
    6.8) 最终幅度谱增益
             gain2={p*sqrt(g)+(1-p)*sqrt(st->gain_floor  )}^2;
  7)将幅度谱增益gain2作用于fft幅度谱
  8)后处理,包括反傅立叶变换(ifft)、加合成窗函数、交叠相加,最终得到去噪以后的时域信号。

附EM算法的推导和结论:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值