webrtc 降噪算法总结

维纳增益

webrtc ns采用的是维纳增益,参考之前写的维纳滤波原理,可得增益函数为,
G ( k , l ) = ∣ X ( k , l ) ∣ 2 ∣ Y ( k , l ) ∣ 2 = 1 − ∣ N ( k , l ) ∣ 2 ∣ Y ( k , l ) ∣ 2 (1) G(k,l)=\frac{|X(k,l)|^2}{|Y(k,l)|^2}=1-\frac{|N(k,l)|^2}{|Y(k,l)|^2} \tag{1} G(k,l)=Y(k,l)2X(k,l)2=1Y(k,l)2N(k,l)2(1)

其中 ∣ Y ( k , l ) ∣ |Y(k,l)| Y(k,l)代表带噪语音的频谱幅度, ∣ X ( k , l ) ∣ |X(k,l)| X(k,l)代表干净语音的频谱幅度, ∣ N ( k , l ) ∣ |N(k,l)| N(k,l)代表噪声频谱幅度, k k k l l l分别代表频率和时间索引,要想得到增益函数的估计,核心就是准确的估计出噪声的频谱能量。

估计噪声

噪声估计采用的是时间递归平滑的方法,同时使用语音存在概率进行加权,即,
λ d ^ ( k , l ) = γ λ d ^ ( k , l ) + ( 1 − γ ) ( ( 1 − p ( k , l ) ) Y ( k , l ) + p ( k , l ) λ d ^ ( k , l − 1 ) ) (2) \hat{\lambda_d}(k,l)=\gamma\hat{\lambda_d}(k,l) + (1-\gamma)((1 - p(k,l))Y(k,l) + p(k,l)\hat{\lambda_d}(k,l-1)) \tag{2} λd^(k,l)=γλd^(k,l)+(1γ)((1p(k,l))Y(k,l)+p(k,l)λd^(k,l1))(2)

γ \gamma γ为平滑因子, p ( k , l ) p(k,l) p(k,l)是基于 { Y , F } \{Y,F\} {Y,F}估计的条件语音存在概率, F F F代表语音特征。

估计基于 { Y , F } \{Y,F\} {Y,F}的条件语音存在概率

每一帧可以分为存在语音和不存在语音两种情况,即,
H 0 ( k , l ) : Y ( k , l ) = D ( k , l ) H 1 ( k , l ) : Y ( k , l ) = X ( k , l ) + D ( k , l ) (3) \begin{aligned} H_0(k,l):Y(k,l) &= D(k,l) \\ H_1(k,l):Y(k,l)&=X(k,l) + D(k,l) \end{aligned} \tag{3} H0(k,l):Y(k,l)H1(k,l):Y(k,l)=D(k,l)=X(k,l)+D(k,l)(3)

根据贝叶斯准则求解 { Y , { F } } \{Y,\{F\}\} {Y,{F}}条件语音存在概率,
p ( H 1 ( k , l ) ∣ Y ( k , l ) , { F } ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( H 1 ( k , l ) ∣ { F } ) p ( { F } ) p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( H 1 ( k , l ) ∣ { F } ) p ( { F } ) + p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) p ( H 0 ( k , l ) ∣ { F } ) p ( { F } ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( H 1 ( k , l ) ∣ { F } ) p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( H 1 ( k , l ) ∣ { F } ) + p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) p ( H 0 ( k , l ) ∣ { F } ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p + p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) ( 1 − p ) = p Δ ( k , l ) p Δ ( k , l ) + ( 1 − p ) = 1 1 + ( 1 − p ) / ( p Δ ( k , l ) ) (4) \begin{aligned} p(H_1(k,l)|Y(k,l),\{F\}) &= \frac{p(Y(k,l)| H_1(k,l),\{F\}) p(H_1(k,l)|\{F\})p(\{F\})}{p(Y(k,l)| H_1(k,l),\{F\}) p(H_1(k,l)|\{F\})p(\{F\}) + p(Y(k,l)| H_0(k,l),\{F\}) p(H_0(k,l)|\{F\})p(\{F\})} \\ &= \frac{p(Y(k,l)| H_1(k,l),\{F\}) p(H_1(k,l)|\{F\})}{p(Y(k,l)| H_1(k,l),\{F\}) p(H_1(k,l)|\{F\}) + p(Y(k,l)| H_0(k,l),\{F\}) p(H_0(k,l)|\{F\})} \\ &=\frac{p(Y(k,l)| H_1(k,l),\{F\}) p}{p(Y(k,l)| H_1(k,l),\{F\}) p + p(Y(k,l)| H_0(k,l),\{F\}) (1-p)}\\ &= \frac{p\Delta(k,l)}{p\Delta(k,l) + (1-p)} \\ &= \frac{1}{1 +(1-p)/(p\Delta(k,l))} \tag{4} \end{aligned} p(H1(k,l)Y(k,l),{F})=p(Y(k,l)H1(k,l),{F})p(H1(k,l){F})p({F})+p(Y(k,l)H0(k,l),{F})p(H0(k,l){F})p({F})p(Y(k,l)H1(k,l),{F})p(H1(k,l){F})p({F})=p(Y(k,l)H1(k,l),{F})p(H1(k,l){F})+p(Y(k,l)H0(k,l),{F})p(H0(k,l){F})p(Y(k,l)H1(k,l),{F})p(H1(k,l){F})=p(Y(k,l)H1(k,l),{F})p+p(Y(k,l)H0(k,l),{F})(1p)p(Y(k,l)H1(k,l),{F})p=pΔ(k,l)+(1p)pΔ(k,l)=1+(1p)/(pΔ(k,l)1(4)

其中p代表基于语音特征 { F } \{F\} {F}的条件语音存在概率(特征 { Y , F } \{Y,F\} {Y,F}的先验语音存在概率), Δ ( k , l ) \Delta(k,l) Δ(k,l)表示似然比。
p ( H 1 ( k , l ) ∣ { F } ) = p (5) p(H_1(k,l)|\{F\})=p \tag{5} p(H1(k,l){F})=p(5)

Δ ( k , l ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) (6) \Delta(k,l)=\frac{p(Y(k,l)| H_1(k,l),\{F\})}{p(Y(k,l)| H_0(k,l),\{F\})} \tag{6} Δ(k,l)=p(Y(k,l)H0(k,l),{F})p(Y(k,l)H1(k,l),{F})(6)

假设干净语音和噪声的短时傅里叶变换系数满足复高斯分布,且不相干,则可以得到概率密度函数为,
p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) = 1 π λ x ( k , l ) e x p ( − ∣ Y ( k , l ) ∣ 2 λ d ( k ) ) , p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) = 1 π ( λ x ( k , l ) + λ d ( k , l ) ) e x p ( − ∣ Y ( k , l ) ∣ 2 λ x ( k ) + λ d ( k ) ) (7) \begin{aligned} p(Y(k,l)| H_0(k,l),\{F\}) &= \frac{1}{\pi\lambda_x(k,l)}exp(-\frac{|Y(k,l)|^2}{\lambda_d(k)}), \\ p(Y(k,l)| H_1(k,l),\{F\}) &= \frac{1}{\pi(\lambda_x(k,l)+\lambda_d(k,l))}exp(-\frac{|Y(k,l)|^2}{\lambda_x(k)+\lambda_d(k)}) \end{aligned} \tag{7} p(Y(k,l)H0(k,l),{F})p(Y(k,l)H1(k,l),{F})=πλx(k,l)1exp(λd(k)Y(k,l)2)=π(λx(k,l)+λd(k,l))1exp(λx(k)+λd(k)Y(k,l)2)(7)

将式(4)带入式(3)得到似然比的值为,
Δ ( k , l ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) , { F } ) p ( Y ( k , l ) ∣ H 0 ( k , l ) , { F } ) = λ d ( k ) λ x ( k ) + λ d ( k ) e x p ( ∣ Y ( k , l ) ∣ 2 λ d ( k ) − ∣ Y ( k , l ) ∣ 2 λ x ( k ) + λ d ( k ) ) = 1 1 + ζ ( k , l ) e x p ( v ( k , l ) ) (8) \begin{aligned}\Delta(k,l) &= \frac{p(Y(k,l)| H_1(k,l),\{F\})}{p(Y(k,l)| H_0(k,l),\{F\})} \\ &= \frac{\lambda_d(k)}{\lambda_x(k)+\lambda_d(k)}exp(\frac{|Y(k,l)|^2}{\lambda_d(k)} -\frac{|Y(k,l)|^2}{\lambda_x(k)+\lambda_d(k)}) &=\frac{1}{1+\zeta(k,l)}exp(v(k,l)) \tag{8} \end{aligned} Δ(k,l)=p(Y(k,l)H0(k,l),{F})p(Y(k,l)H1(k,l),{F})=λx(k)+λd(k)λd(k)exp(λd(k)Y(k,l)2λx(k)+λd(k)Y(k,l)2)=1+ζ(k,l)1exp(v(k,l))(8)

其中 ζ ( k , l ) = λ x ( k , l ) λ d ( k , l ) \zeta(k,l)=\frac{\lambda_x(k,l)}{\lambda_d(k,l)} ζ(k,l)=λd(k,l)λx(k,l)为先验信噪比, γ ( k , l ) = ∣ Y ( k , l ) ∣ 2 λ d ( k , l ) \gamma(k,l)=\frac{|Y(k,l)|^2}{\lambda_d(k,l)} γ(k,l)=λd(k,l)Y(k,l)2为后验信噪比, v ( k , l ) = γ ( k , l ) ζ ( k , l ) 1 + ζ ( k , l ) v(k,l)=\frac{\gamma(k,l)\zeta(k,l)}{1+\zeta(k,l)} v(k,l)=1+ζ(k,l)γ(k,l)ζ(k,l)是先验后验信噪比的函数。
计算式(8)需要估计先后验信噪比,估计完后将式(8)和式(5)带入式(4)中便可以求得 p ( H 1 ( k , l ) ∣ Y ( k , l ) , { F } ) p(H_1(k,l)|Y(k,l),\{F\}) p(H1(k,l)Y(k,l),{F})

估计基于 { F } \{F\} {F}的条件语音存在概率(式5)

特征介绍

webrtc 在计算时使用了3中特征,似然比,谱平坦度和谱模板差异,3个特征的权重是动态调整的。分别计算似然比,谱平坦度和谱模板差异的数值,同时在线更新三个特征值得阈值,利用映射函数将特征值和阈值映射为基于 { F } \{F\} {F}的条件语音存在概率(也可以理解为基于特征 { Y , F } \{Y,F\} {Y,F}的先验语音存在概率)。

似然比

似然比的定义见等式(8)所示,首先先将对数似然比进行平滑处理,接着将所有频率的对数似然进行平均做为最终的结果。
a v g _ l o g _ l r t ( k , l ) = a v g _ l o g _ l r t ( k , l − 1 ) + 0.5 ∗ ( l o g _ l r t ( k , l ) − a v g _ l o g _ l r t ( k , l − 1 ) ) F 1 = l r t ( l ) = m e a n ( a v g _ l o g _ l r t ( k , l ) ) (8) avg\_log\_lrt(k,l) = avg\_log\_lrt(k,l-1) + 0.5*(log\_lrt(k,l) - avg\_log\_lrt(k,l-1)) \\ F_1 = lrt(l) = mean(avg\_log\_lrt(k,l)) \tag{8} avg_log_lrt(k,l)=avg_log_lrt(k,l1)+0.5(log_lrt(k,l)avg_log_lrt(k,l1))F1=lrt(l)=mean(avg_log_lrt(k,l))(8)

谱平坦度

稳态噪声的基频和谐波成分比语音相对来说小一些,可以利用这个特征来对语音和噪声进行区分。谱平坦度定义为每个频点幅度谱的几何平均与算数平均的比值,即,
F 2 = ∏ i = k K ∣ Y ( k ) ) ∣ K 1 K ∑ k = 0 K ∣ Y ( k ) ∣ (9) F_2 = \frac{\sqrt[K]{\prod_{i=k}^{K}|Y(k))|}}{\frac{1}{K}\sum_{k=0}^{K}|Y(k)|} \tag{9} F2=K1k=0KY(k)Ki=kKY(k)) (9)

K K K次方的运算可以通过先对数运算在指数运算进行简化,已知几何平均的值是小于等于算数平均的值,相等的条件是所有数一样,当语音的频谱分布不均匀时,谱平坦度的计算值就会偏小,噪声的频谱分布均匀,谱平坦度偏大。

谱模板差异

谱模板差异通过计算当前频谱的幅度与预设噪声的频谱幅度差异,当假设噪声是稳态的情况下,可以通过之前语音存在概率低的帧学习得到。

特征映射函数

使用tanh函数将特征值转换到[0,1]的区间,转换方法为,
M ( F n ) = 0.5 ( t a n h ( ± w ( F n − T n ) ) + 1 ) (10) M(F_n)=0.5(tanh(\pm w(F_n-T_n)) + 1) \tag{10} M(Fn)=0.5(tanh(±w(FnTn))+1)(10)

其中 T n T_n Tn是特征的阈值, w n w_n wn是宽带参数。最终的语音存在概率为三个特征映射函数的加权,即,
p = ∑ n = 1 3 w n M ( F n ) (11) p=\sum_{n=1}^3w_nM(F_n) \tag{11} p=n=13wnM(Fn)(11)

直方图更新特征阈值

利用直方图统计的方法确定各个特征的阈值,每500帧数更新一次阈值。

似然比阈值

噪声情况下的似然比小于等于1,利用噪声时的似然比均值代表阈值。实际计算时统计似然比在0~100之间的分布,直方图的大小为1000,首先计算最小10个分布(似然比在0-1之间)的似然比平均值average,在计算所有分布的似然比平均值average_global,如果两个结果差异不大,则认为都是噪声,似然比阈值设置为1,将low_lrt_fluctuations 设置为1(谱模板差异时可以用到),差异比较大的话,则将阈值设置为average*1.2,且将最后的结果限制在0.2~1之间。

谱平坦度阈值

阈值就是噪声的谱平坦度值,噪声的谱平坦度计算利用噪声的特点,即出现次数最多的数值(直方图最大值对应的横坐标)为噪声的谱平坦度。实际计算时只统计谱平坦度在0~50之间的分布结果,直方图的大小为1000,寻找直方图最大数值和第二大数值的位置,如果位置相邻的话,且第二大次数的值大于第一次数数值的一半以上,则认为两个分布可以合并,合并后的数值为两个分布数值的相加,横坐标为两个相邻最大数值对应横坐标的中间值,否则不合并,使用最大值对应的数值和横坐标。
确定好权重spectral_flatness_peak_weight(数值)和阈值spectral_flatness_peak_position(横坐标位置)后,根据下面的等式判断是否使用谱平坦度这个特征,
如果spectral_flatness_peak_weight < 0.3f * 500 或者 spectral_flatness_peak_position < 0.6f 则不使用改特征,否则使用该特征。
如果使用该特征,则平坦度阈值为flatness_threshold = 0.9 * spectral_flatness_peak_position,将最终结果限制在0.1~0.9之间。

谱模板差异阈值

确定谱模板差异阈值的方法和谱平坦度阈值的方法一致,只是存在下面一些细节的差异。
1)只统计谱模板差异在0~100之间的分布。
2)使用标准为use_spec_diff = spectral_diff_peak_weight < 0.3f * 500 || low_lrt_fluctuations ? 0 : 1;意味着只有阈值对应的数值比例大于30%且似然比波动比较大时才使用。
3)谱模板差异阈值等于1.2*spectral_diff_peak_position,结果限制在0.16~1之间。

似然比计算(式8)

分位数噪声估计估计初始噪声

在计算特征时需要用到先验信噪比和后验信噪比,从而需要先进行噪声估计,webrtc 采用的时自适应分位数方法进行噪声估计,具体的内容参考webrtc分位数噪声估计

利用初始噪声估计先验和后验信噪比

利用分位数噪声估计方法估计出初始噪声 d q b n e ( k , l ) d_{qbne}(k,l) dqbne(k,l)的情况下,后验信噪比的估计只需要利用当前帧的能量除以噪声能量即可,即,
γ ( k , l ) = ∣ Y ( k , l ) ∣ 2 d q b n e ( k , l ) (12) \gamma(k,l) =\frac{|Y(k,l)|^2}{d_{qbne}(k,l)} \tag{12} γ(k,l)=dqbne(k,l)Y(k,l)2(12)

而先验信噪比的估计需要利用DD准则进行估计,即,
γ ( k , l ) = 0.98 ∣ Y ( k , l − 1 ) ∣ 2 G ( k , l − 1 ) d q b n e ( k , l − 1 ) + ( 1 − 0.98 ) ∣ Y ( k , l ) ∣ 2 d q b n e ( k , l ) (13) \gamma(k,l) =0.98 \frac{|Y(k,l-1)|^2G(k,l-1)}{d_{qbne}(k,l-1)} + (1-0.98) \frac{|Y(k,l)|^2}{d_{qbne}(k,l)} \tag{13} γ(k,l)=0.98dqbne(k,l1)Y(k,l1)2G(k,l1)+(10.98)dqbne(k,l)Y(k,l)2(13)
将式(12)和式(13)带入式(8)求得似然比。

总结

这里的公式推导采样了倒叙的方式,实际计算时应该反过来,即,
1)利用分位数噪声估计方法估计出初始噪声。
2)利用式(13)和(12)完成先后验信噪比的计算。
3)将先后验信噪比结果和频谱能量带入式(8-11)完成基于特征 { F } \{F\} {F}
的条件语音存在概率(基于特征 { Y , F } \{Y,F\} {Y,F}的先验语音存在概率)和似然比的计算。
4)将似然比和基于特征 { F } \{F\} {F}的条件语音存在概率带入式(4)计算最终的语音存在概率。
5)将最终的语音存在概率带入式(2)更新噪声。
6)将噪声估计值带入式(1)计算增益函数。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值