传统信号处理方法中降噪方法可分为两个大的步骤:
噪声估计的常用方法:
MCRA的步骤:
考虑带有加性噪声的数据模型: y ( n ) = x ( n ) + d ( n ) y(n)=x(n)+d(n) y(n)=x(n)+d(n)
输入信号经过STFT: Y ( k , l ) = ∑ n = 0 N − 1 y ( n + l M ) h ( n ) e − j 2 π N n k Y(k,l)=\sum_{n=0}^{N-1}y(n+lM)h(n)e^{-j\frac{2\pi}{N}nk} Y(k,l)=∑n=0N−1y(n+lM)h(n)e−jN2πnk,得到时频谱图
其中,
给定两个假设 H 0 ( k , l ) H_0(k,l) H0(k,l)和 H 1 ( k , l ) H_1(k,l) H1(k,l),分别表示“语音不存在”和“语音存在”:
H 0 ( k , l ) : Y ( k , l ) = D ( k , l ) H 1 ( k , l ) : Y ( k , l ) = X ( k , l ) + D ( k , l ) \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} H0(k,l):H1(k,l):Y(k,l)=D(k,l)Y(k,l)=X(k,l)+D(k,l)
对噪声的估计定义为: λ d ( k , l ) = E [ ∣ D ( k , l ) ∣ 2 ] \lambda_d(k,l)=E[|D(k,l)|^2] λd(k,l)=E[∣D(k,l)∣2],也就是噪声的能量
采用时间递归平滑的方式,当“语音不存在”时,迭代更新 λ d ( k , l ) \lambda_d(k,l) λd(k,l)
H 0 ′ ( k , l ) : λ ^ d ( k , l + 1 ) = α d λ ^ d ( k , l ) + ( 1 − α d ) ∣ Y ( k , l ) ∣ 2 H 1 ′ ( k , l ) : λ ^ d ( k , l + 1 ) = λ ^ d ( k , l ) 其中, α d ( 0 < α d < 1 )是平滑因子 \begin{aligned} H'_0(k,l):&\hat{\lambda}_d(k,l+1)=\alpha_d \hat{\lambda}_d(k,l)+(1-\alpha_d)|Y(k,l)|^2\\ H'_1(k,l):&\hat{\lambda}_d(k,l+1)=\hat{\lambda}_d(k,l) \\ 其中,&\alpha_d(0 < \alpha_d < 1)是平滑因子 \end{aligned} H0′(k,l):H1′(k,l):其中,λ^d(k,l+1)=αdλ^d(k,l)+(1−αd)∣Y(k,l)∣2λ^d(k,l+1)=λ^d(k,l)αd(0<αd<1)是平滑因子
语音存在概率(Speech Presence Probability): p ′ ( k , l ) = P ( H 1 ′ ( k , l ) ∣ Y ( k , l ) ) p'(k,l)=P(H'_1(k,l)|Y(k,l)) p′(k,l)=P(H1′(k,l)∣Y(k,l))
对噪声的估计可表示为:
λ ^ d ( k , l + 1 ) = λ ^ d ( k , l ) p ′ ( k , l ) + [ α d λ ^ d ( k , l ) + ( 1 − α d ) ∣ Y ( k , l ) ∣ 2 ] ( 1 − p ′ ( k , l ) ) = α ^ d ( k , l ) λ ^ d ( k , l ) + [ 1 − α ^ d ( k , l ) ] ∣ Y ( k , l ) ∣ 2 其中, α ^ d ( k , l ) = α d + ( 1 − α d ) p ′ ( k , l ) \begin{aligned} \hat{\lambda}_d(k,l+1)&=\hat{\lambda}_d(k,l)p'(k,l)+[\alpha_d \hat{\lambda}_d(k,l)+(1-\alpha_d)|Y(k,l)|^2](1-p'(k,l)) \\ &=\hat{\alpha}_d(k,l) \hat{\lambda}_d(k,l)+[1-\hat{\alpha}_d(k,l)]|Y(k,l)|^2 \\ 其中,\hat{\alpha}_d(k,l)&=\alpha_d+(1-\alpha_d) p'(k,l) \end{aligned} λ^d(k,l+1)其中,α^d(k,l)=λ^d(k,l)p′(k,l)+[αdλ^d(k,l)+(1−αd)∣Y(k,l)∣2](1−p′(k,l))=α^d(k,l)λ^d(k,l)+[1−α^d(k,l)]∣Y(k,l)∣2=αd+(1−αd)p′(k,l)
现在的问题是:如何确定 p ′ ( k , l ) p'(k,l) p′(k,l)
计算 p ′ ( k , l ) p'(k,l) p′(k,l)的思路:在一个短时窗内,计算局部能量 S ( k , l ) S(k,l) S(k,l)与最小能量 S m i n ( k , l ) S_{min}(k,l) Smin(k,l)的比值
局部能量的计算:
最小能量的计算:
计算比值: S r ( k , l ) = S ( k , l ) S m i n ( k , l ) S_r(k,l)=\frac{S(k,l)}{S_{min}(k,l)} Sr(k,l)=Smin(k,l)S(k,l)
语音是否存在的判别式为:
I ( k , l ) = { 1 , S r ( k , l ) > δ 0 , o t h e r w i s e I(k,l)= \left\{\begin{matrix} 1,S_r(k,l)>\delta \\ 0,otherwise \end{matrix}\right. I(k,l)={1,Sr(k,l)>δ0,otherwise
语音存在概率的迭代估计:
估计出噪声后,将带噪语音与增益因子相乘,即可进行噪声抑制
X ^ ( k , l ) = G ( k , l ) Y ( k , l ) 或 ∣ X ^ ( k ) ∣ 2 = G 2 ( k ) ∣ Y ( k ) ∣ 2 \begin{aligned} \hat{X}(k,l)&=G(k,l)Y(k,l) \\ 或 |\hat{X}(k)|^2&=G^2(k)|Y(k)|^2 \end{aligned} X^(k,l)或∣X^(k)∣2=G(k,l)Y(k,l)=G2(k)∣Y(k)∣2
确定增益因子的方法:
谱减法:假设噪声平稳或缓慢变化,从带噪语音谱中,将噪声谱减去
频域维纳滤波:估计出的纯净语音幅度谱与真实幅度谱的均方误差最小
MMSE的推导可参考:Ephraim, Y., and D. Malah. “Speech Enhancement Using a Minimum-Mean Square Error Short-Time Spectral Amplitude Estimator.”