当前位置: 首页 > 工具软件 > Speex > 使用案例 >

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

薄龙光
2023-12-01

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

speex是一套主要针对语音的开源免费,无专利保护的应用集合,它不仅包括编解码器,还包括VAD(语音检测), DTX(不连续传输),AEC(回声消除),NS(去噪)等实用模块。Speex的增强(去噪)算法性能较好,而一般文档都是侧重于
对应用接口(API)的介绍。 本文对speex去噪算法步骤做一些简要整理和介绍,以提供给对该算法感兴趣的读者参考。
1. preprocess_analysis()包括两部分,主要是加窗交叠傅立叶(fft)变换等常用的信号处理算法。
1.1 预处理
信号输入,加窗,交叠(overlap),时频傅立叶变换(fft)(加窗,分帧,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

 类似资料: