MCRAMCRA1,全称为最小值控制的递归平均,是cohen提出的一种常用的噪声估计方法,处理流程框图 2 如下
在这里插入图片描述
从命名上以及以上框图能看出来着个方法主要包含两个部分,噪声谱递归平均和最小值控制(跟踪),下面分别看看这两个部分

1. 噪声谱估计(递归平均)

还是老套路先定义信号表达式
Y(k,)=n=0N1y(n+M)h(n)ej2πNnk(1) Y(k, \ell)=\sum_{n=0}^{N-1} y(n+\ell M) h(n) e^{-j \frac{2 \pi}{N} n k}\tag1

kk:frequency bin index

\ell:time frame index

hh:analysis window of size N

MM:frame update step in time

定义两个假设,在第 \ell 帧第kk 个频率点上语音不存在和语音存在H0(k,),H1(k,)H_0(k,\ell),H_1(k,\ell)概率如下:
H0(k,):Y(k,)=D(k,)H1(k,):Y(k,)=X(k,)+D(k,)(2) \begin{aligned} &H_0(k,\ell):Y(k,\ell)=D(k,\ell)\\ &H_1(k,\ell):Y(k,\ell)=X(k,\ell)+D(k,\ell)\end{aligned}\tag2
其中X(k,)D(k,)X(k,\ell)和D(k,\ell)分别为纯净语音和噪声的STFTSTFT表示

定义λd(k,)=E[D(k,)2]\lambda_d(k,\ell)=E[\begin{vmatrix} D(k,\ell) \end{vmatrix}^2]kk帧、\ell子带处噪声谱,那么就可以在无语音段用一个时间维度上的递归平滑来更新噪声,用公式表示如下
H0(k,):λ^d(k,+1)=αdλ^d(k,)+(1αd)Y(k,)2H1(k,):λ^d(k,+1)=λ^d(k,)(3) \begin{array}{l}{H_{0}^{\prime}(k, \ell) : \hat{\lambda}_{d}(k, \ell+1)=\alpha_{d} \hat{\lambda}_{d}(k, \ell)+\left(1-\alpha_{d}\right)|Y(k, \ell)|^{2}} \\ {H_{1}^{\prime}(k, \ell) : \hat{\lambda}_{d}(k, \ell+1)=\hat{\lambda}_{d}(k, \ell)}\end{array}\tag3
其中αd(0<αd<1)\alpha_d(0<\alpha_d<1)为平滑因子

pP(H1Y(k,))p^{\prime} \triangleq P(H^{\prime}_1|Y(k,\ell))表示语音存在的条件概率,则(3)式可以写成如下形式
λ~d(k,+1)=α~d(k,)λ^d(k,)+[1α~d(k,)]Y(k,)2(4) \tilde\lambda_d(k,\ell+1)=\tilde{\alpha}_{d}(k, \ell) \hat{\lambda}_{d}(k, \ell)+\left[1-\tilde{\alpha}_{d}(k, \ell)\right]|Y(k, \ell)|^{2}\tag4
其中α~d(k,)\tilde\alpha_d(k,\ell)为时变的平滑参数
α~d(k,)αd+(1αd)p(k,)(5) \tilde\alpha_d(k,\ell)\triangleq \alpha_d+(1-\alpha_d)p^{\prime}(k,\ell)​\tag5
上面的(4)、(5)两式就是递归平均更新噪声谱的核心内容,现在的问题就是要求出时变参数α~d(k,)\tilde\alpha_d(k,\ell),也就是要求出语音存在概率这个关键变量p(k,)p^{\prime}(k,\ell)

2. 语音存在概率(最小值控制)

2.1. 最小值跟踪

​ 语音存在概率由带噪语音当前的能量和指定长度窗内谱最小值的比值来计算,先对带噪语音谱分别做时间、频率两个维度上的平滑

频率平滑:
Sf(k,)=i=wwb(i)Y(ki,)2(5) S_{f}(k, \ell)=\sum_{i=-w}^{w} b(i)|Y(k-i, \ell)|^{2}\tag5
时间平滑:
S(k,)=αs(k,)S(k,1)+Sf(k,)(6) S(k, \ell)=\alpha_s(k,\ell)S(k,\ell-1)+S_f(k,\ell)\tag6
其中αs(0<αs<1)\alpha_s(0<\alpha_s<1)为平滑常数

谱最小值Smin(k,)S_{min}(k,\ell)搜索过程如下:

初始化:

Smin(k,)=S(k,0)S_{min}(k,\ell)=S(k,0)

Stmp(k,)=S(k,0)S_{tmp}(k,\ell)=S(k,0)

然后按样本点(频谱)比较
Smin(k,)=min{Smin(k,1),S(k,)}Stmp(k,)=min{Stmp(k,1),S(k,)}(7) S_{min}(k,\ell)=min\begin{Bmatrix}S_{min}(k,\ell-1),S(k,\ell)\end{Bmatrix}\\S_{tmp}(k,\ell)=min\begin{Bmatrix}S_{tmp}(k,\ell-1),S(k,\ell)\end{Bmatrix}\tag7
这个时候SminStmpS_{min}和S_{tmp}都还是相等的,当比较了L帧(mod(\ell,L)=0)后
Smin(k,)=min{Stmp(k,1),S(k,)}Stmp(k,)=S(k,)(8) \begin{aligned}&S_{min}(k,\ell)=min\begin{Bmatrix}S_{tmp}(k,\ell-1),S(k,\ell)\end{Bmatrix}\\&S_{tmp}(k,\ell)=S(k,\ell)\end{aligned}\tag8
重复(7)、(8)过程得到最小值谱,其中,搜索窗的长度L会影响到噪声的跟踪速度,一般按照经验选0.5s~1.5s左右。

2.2. 语音存在概率计算

​ 定义局部能量与带噪语音能量比Sr(k,)S_r(k,\ell)如下
Sr(k,)S(k,l)Smin(k,)(9) S_r(k,\ell)\triangleq\frac{S(k,l)}{S_{min}(k,\ell)}\tag9
定义二值I(k,)I(k,\ell)如下
I(k,)={1,Sr(k,)>δ0,otherwise(10) I(k,\ell)=\left\{\begin{matrix}\begin{aligned}&1,S_r(k,\ell)>\delta\\&0,otherwise\end{aligned}\end{matrix}\right.\tag{10}
最后,语音存在概率更新如下:
p^(k,)=αpp^(k,1)+(1αp)I(k,)(11) \hat{p^{\prime}}(k, \ell)=\alpha_{p} \hat{p^{\prime}}(k, \ell-1)+\left(1-\alpha_{p}\right) I(k, \ell)\tag{11}
其中δαp(0<αp<1)\delta为预先设定的门限,\alpha_p(0<\alpha_p<1)为平滑常数

References:


  1. Cohen, I., & Berdugo, B. (2002). Noise estimation by minima controlled recursive averaging for robust speech enhancement. IEEE Signal Processing Letters, 9(1), 12–15 ↩︎

  2. Cohen, I., & Berdugo, B. (2001). Speech enhancement for non-stationary noise environments. Signal Processing, 81(11), 2403–2418 ↩︎

相关文章: