本文主要是介绍基于MCRA的语音噪音估计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Minima Controlled Recursive Averaging 噪音估计(MCRA)
MCRA是由Israel Cohen在论文中提出的最小值追踪递归平均法,本文根据此论文总结如何来评估带噪语音中噪音部分,从而可以来做噪音消除任务。
输入信号的时域表示
带噪输入信号公式
y ( n ) = x ( n ) + d ( n ) y(n) = x(n) + d(n) y(n)=x(n)+d(n)
x(n):语音
d(n):噪音
y(n):语音+噪音
输入信号频域表示STFT
k:频域的频率index
l:时域信号的帧index
M:时域信号的帧移
h(n): 窗函数,窗长为N
Y ( k , l ) = ∑ n = 0 N − 1 y ( n + l M ) h ( n ) e − j ( 2 π / N ) n k [ 1 ] Y(k,l) = \sum\limits_{n = 0}^{N - 1} {y(n + lM)h(n){e^{ - j(2\pi /N)nk}}} \left[ 1 \right] Y(k,l)=n=0∑N−1y(n+lM)h(n)e−j(2π/N)nk[1]
频域假设
现在假设H0(k,l) 表示语音不存在,H1(k,l) 表示语音存在,那么这两种情况下可以如下表示 (X(k,l)频域语音,D(k,l)频域噪音)
H 0 ( k , l ) : Y ( k , l ) = D ( k , l ) {H_0}(k,l):Y(k,l) = D(k,l) H0(k,l):Y(k,l)=D(k,l)
H 1 ( k , l ) : Y ( k , l ) = X ( k , l ) + D ( k , l ) [ 2 ] {H_1}(k,l):Y(k,l) = X(k,l) + D(k,l)\left[ 2 \right] H1(k,l):Y(k,l)=X(k,l)+D(k,l)[2]
λ d {\lambda _d} λd定义, a d {a_d} ad是一个平滑因子, 范围在(0,1)之间取值,表示l+1帧的噪音数据和上一帧数据的相关程度;使用 λ d = E [ ( D ( k , l ) 2 ] {\lambda _d} = E\left[ {{{\left( {D(k,l} \right)}^2}} \right] λd=E[(D(k,l)2] 来表示噪音能量值,那么公式2就可以变化成公式3
H 0 ( k , l ) : λ d ( k , l + 1 ) = a d λ d ( k , l ) + ( 1 − a d ) [ Y ( k , l ] 2 {H_0}(k,l):{\lambda _d}(k,l + 1) = {a_d}{\lambda _d}(k,l) + (1 - {a_d}){\left[ {Y(k,l} \right]^2} H0(k,l):λd(k,l+1)=adλd(k,l)+(1−ad)[Y(k,l]2
H 1 ( k , l ) : λ d ( k , l + 1 ) = λ d ( k , l ) [ 3 ] {H_1}(k,l):{\lambda _d}(k,l + 1) = {\lambda _d}(k,l)\left[ 3 \right] H1(k,l):λd(k,l+1)=λd(k,l)[3]
语音存在概率假设 P ( k , l ) P(k,l) P(k,l)
语音存在 P ( k , l ) P(k,l) P(k,l) : λ d ( k , l + 1 ) = λ d ( k , l ) P ( k , l ) {\lambda _d}(k,l + 1) = {\lambda _d}(k,l)P(k,l) λd(k,l+1)=λd(k,l)P(k,l)
语音不存在 1 − P ( k , l ) 1 - P(k,l) 1−P(k,l) : λ d ( k , l + 1 ) = [ a d λ d ( k , l ) + ( 1 − a d ) [ Y ( k , l ] 2 ] ( 1 − P ( k , l ) ) {\lambda _d}(k,l + 1) = \left[ {{a_d}{\lambda _d}(k,l) + (1 - {a_d}){{\left[ {Y(k,l} \right]}^2}} \right](1 - P(k,l)) λd(k,l+1)=[adλd(k,l)+(1−ad)[Y(k,l]2](1−P(k,l))
两者相加得到: λ d ( k , l + 1 ) = [ a d λ d ( k , l ) + ( 1 − a d ) [ Y ( k , l ] 2 ] ( 1 − P ( k , l ) ) + λ d ( k , l ) P ( k , l ) [ 4 ] {\lambda _d}(k,l + 1) = \left[ {{a_d}{\lambda _d}(k,l) + (1 - {a_d}){{\left[ {Y(k,l} \right]}^2}} \right](1 - P(k,l)) + {\lambda _d}(k,l)P(k,l)\left[ 4\right] λd(k,l+1)=[adλd(k,l)+(1−ad)[Y(k,l]2](1−P(k,l))+λd(k,l)P(k,l)[4]
λ d ( k , l + 1 ) = [ a d λ d ( k , l ) + ( 1 − a d ) [ Y ( k , l ] 2 ] ( 1 − P ( k , l ) ) + λ d ( k , l ) P ( k , l ) = a ′ d ( k , l ) λ d ( k , l ) + ( 1 − a ′ d ( k , l ) ) [ Y ( k , l ] 2 {\lambda _d}(k,l + 1) = \left[ {{a_d}{\lambda _d}(k,l) + (1 - {a_d}){{\left[ {Y(k,l} \right]}^2}} \right](1 - P(k,l)) + {\lambda _d}(k,l)P(k,l) = {{a'}_d}(k,l){\lambda _d}(k,l) + (1 - {{a'}_d}(k,l)){\left[ {Y(k,l} \right]^2} λd(k,l+1)=[adλd(k,l)+(1−ad)[Y(k,l]2](1−P(k,l))+λd(k,l)P(k,l)=a′d(k,l)λd(k,l)+(1−a′d(k,l))[Y(k,l]2
a ′ d ( k , l ) = a d + ( 1 − a d ) P ( k , l ) [ 5 ] {{a'}_d}(k,l) = {a_d} + (1 - {a_d})P(k,l)\left[ 5 \right] a′d(k,l)=ad+(1−ad)P(k,l)[5]
能量计算
当前帧的频域能量等于 上一帧能量乘以权重 a s {a_s} as + 当前帧能量* ( 1 − a s ) (1 - {a_s}) (1−as)
S ( k , l ) = a s S ( k , l − 1 ) + ( 1 − a s ) S ( k , l ) [ 6 ] S(k,l ) = {a_s}S(k,l-1) + (1 - {a_s})S(k,l )\left[ 6\right] S(k,l)=asS(k,l−1)+(1−as)S(k,l)[6]
局部最小值追踪
现在需要找到每L帧中的最小能量,公式如下
如何判断语音是否存在
根据当前帧的能量和上一步搜索到的最小能量的比值,这个比值的门限是 δ \delta δ,参考论文取值为5.0
S ( k , l ) S min ( k , l ) > δ [ 12 ] \frac{{S(k,l)}}{{{S_{\min }}(k,l)}} > \delta\left[ 12\right] Smin(k,l)S(k,l)>δ[12]
计算 P ( k , l ) P(k,l) P(k,l)
这里又加入了一个平滑因子,来计算 P ( k , l ) P(k,l) P(k,l),也就是说当前帧的语音存在概率和上一帧语音存在的概率是有一个权重 a p {a_p} ap
P ( k , l ) = a p P ( k , l − 1 ) + ( 1 − a p ) I ( k , l ) [ 13 ] P(k,l ) = {a_p}P(k,l-1) + (1 - {a_p})I(k,l )\left[ 13\right] P(k,l)=apP(k,l−1)+(1−ap)I(k,l)[13]
计算流程总结
参数列表
参数 | 意义 | 值 |
---|---|---|
N | 频域点数 | 512 |
M | 时域每帧大小 | 128 |
L | 最小值追踪窗 | 125 |
a d {a_d} ad | 噪音频谱平滑因子 | 0.95 |
a s {a_s} as | 频谱能量平滑因子 | 0.8 |
a p {a_p} ap | 语音存在概率平滑因子 | 0.2 |
δ \delta δ | 比值门限值,用来确定语音是否存在 | 5.0 |
计算流程图
参考文献
Noise Estimation by Minima Controlled Recursive Averaging for Robust Speech Enhancement 【Israel Cohen, Member, IEEE, and Baruch Berdugo】
这篇关于基于MCRA的语音噪音估计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!