M
C
R
A
MCRA
MCRA1,全称为最小值控制的递归平均,是cohen提出的一种常用的噪声估计方法,处理流程框图 2 如下
从命名上以及以上框图能看出来着个方法主要包含两个部分,噪声谱递归平均和最小值控制(跟踪),下面分别看看这两个部分
1. 噪声谱估计(递归平均)
还是老套路先定义信号表达式
Y
(
k
,
ℓ
)
=
∑
n
=
0
N
−
1
y
(
n
+
ℓ
M
)
h
(
n
)
e
−
j
2
π
N
n
k
(1)
Y(k, \ell)=\sum_{n=0}^{N-1} y(n+\ell M) h(n) e^{-j \frac{2 \pi}{N} n k}\tag1
Y(k,ℓ)=n=0∑N−1y(n+ℓM)h(n)e−jN2πnk(1)
k k k:frequency bin index
ℓ \ell ℓ:time frame index
h h h:analysis window of size N
M M M:frame update step in time
定义两个假设,在第
ℓ
\ell
ℓ 帧第
k
k
k 个频率点上语音不存在和语音存在
H
0
(
k
,
ℓ
)
,
H
1
(
k
,
ℓ
)
H_0(k,\ell),H_1(k,\ell)
H0(k,ℓ),H1(k,ℓ)概率如下:
H
0
(
k
,
ℓ
)
:
Y
(
k
,
ℓ
)
=
D
(
k
,
ℓ
)
H
1
(
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
H0(k,ℓ):Y(k,ℓ)=D(k,ℓ)H1(k,ℓ):Y(k,ℓ)=X(k,ℓ)+D(k,ℓ)(2)
其中
X
(
k
,
ℓ
)
和
D
(
k
,
ℓ
)
X(k,\ell)和D(k,\ell)
X(k,ℓ)和D(k,ℓ)分别为纯净语音和噪声的
S
T
F
T
STFT
STFT表示
定义
λ
d
(
k
,
ℓ
)
=
E
[
∣
D
(
k
,
ℓ
)
∣
2
]
\lambda_d(k,\ell)=E[\begin{vmatrix} D(k,\ell) \end{vmatrix}^2]
λd(k,ℓ)=E[∣∣D(k,ℓ)∣∣2]为
k
帧
、
ℓ
子
带
k帧、\ell子带
k帧、ℓ子带处噪声谱,那么就可以在无语音段用一个时间维度上的递归平滑来更新噪声,用公式表示如下
H
0
′
(
k
,
ℓ
)
:
λ
^
d
(
k
,
ℓ
+
1
)
=
α
d
λ
^
d
(
k
,
ℓ
)
+
(
1
−
α
d
)
∣
Y
(
k
,
ℓ
)
∣
2
H
1
′
(
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
H0′(k,ℓ):λ^d(k,ℓ+1)=αdλ^d(k,ℓ)+(1−αd)∣Y(k,ℓ)∣2H1′(k,ℓ):λ^d(k,ℓ+1)=λ^d(k,ℓ)(3)
其中
α
d
(
0
<
α
d
<
1
)
\alpha_d(0<\alpha_d<1)
αd(0<αd<1)为平滑因子
用
p
′
≜
P
(
H
1
′
∣
Y
(
k
,
ℓ
)
)
p^{\prime} \triangleq P(H^{\prime}_1|Y(k,\ell))
p′≜P(H1′∣Y(k,ℓ))表示语音存在的条件概率,则(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,ℓ+1)=α~d(k,ℓ)λ^d(k,ℓ)+[1−α~d(k,ℓ)]∣Y(k,ℓ)∣2(4)
其中
α
~
d
(
k
,
ℓ
)
\tilde\alpha_d(k,\ell)
α~d(k,ℓ)为时变的平滑参数
α
~
d
(
k
,
ℓ
)
≜
α
d
+
(
1
−
α
d
)
p
′
(
k
,
ℓ
)
(5)
\tilde\alpha_d(k,\ell)\triangleq \alpha_d+(1-\alpha_d)p^{\prime}(k,\ell)\tag5
α~d(k,ℓ)≜αd+(1−αd)p′(k,ℓ)(5)
上面的(4)、(5)两式就是递归平均更新噪声谱的核心内容,现在的问题就是要求出时变参数
α
~
d
(
k
,
ℓ
)
\tilde\alpha_d(k,\ell)
α~d(k,ℓ),也就是要求出语音存在概率这个关键变量
p
′
(
k
,
ℓ
)
p^{\prime}(k,\ell)
p′(k,ℓ)
2. 语音存在概率(最小值控制)
2.1. 最小值跟踪
语音存在概率由带噪语音当前的能量和指定长度窗内谱最小值的比值来计算,先对带噪语音谱分别做时间、频率两个维度上的平滑
频率平滑:
S
f
(
k
,
ℓ
)
=
∑
i
=
−
w
w
b
(
i
)
∣
Y
(
k
−
i
,
ℓ
)
∣
2
(5)
S_{f}(k, \ell)=\sum_{i=-w}^{w} b(i)|Y(k-i, \ell)|^{2}\tag5
Sf(k,ℓ)=i=−w∑wb(i)∣Y(k−i,ℓ)∣2(5)
时间平滑:
S
(
k
,
ℓ
)
=
α
s
(
k
,
ℓ
)
S
(
k
,
ℓ
−
1
)
+
S
f
(
k
,
ℓ
)
(6)
S(k, \ell)=\alpha_s(k,\ell)S(k,\ell-1)+S_f(k,\ell)\tag6
S(k,ℓ)=αs(k,ℓ)S(k,ℓ−1)+Sf(k,ℓ)(6)
其中
α
s
(
0
<
α
s
<
1
)
\alpha_s(0<\alpha_s<1)
αs(0<αs<1)为平滑常数
谱最小值 S m i n ( k , ℓ ) S_{min}(k,\ell) Smin(k,ℓ)搜索过程如下:
初始化:
S m i n ( k , ℓ ) = S ( k , 0 ) S_{min}(k,\ell)=S(k,0) Smin(k,ℓ)=S(k,0)
S t m p ( k , ℓ ) = S ( k , 0 ) S_{tmp}(k,\ell)=S(k,0) Stmp(k,ℓ)=S(k,0)
然后按样本点(频谱)比较
S
m
i
n
(
k
,
ℓ
)
=
m
i
n
{
S
m
i
n
(
k
,
ℓ
−
1
)
,
S
(
k
,
ℓ
)
}
S
t
m
p
(
k
,
ℓ
)
=
m
i
n
{
S
t
m
p
(
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
Smin(k,ℓ)=min{Smin(k,ℓ−1),S(k,ℓ)}Stmp(k,ℓ)=min{Stmp(k,ℓ−1),S(k,ℓ)}(7)
这个时候
S
m
i
n
和
S
t
m
p
S_{min}和S_{tmp}
Smin和Stmp都还是相等的,当比较了L帧(mod(
ℓ
\ell
ℓ,L)=0)后
S
m
i
n
(
k
,
ℓ
)
=
m
i
n
{
S
t
m
p
(
k
,
ℓ
−
1
)
,
S
(
k
,
ℓ
)
}
S
t
m
p
(
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
Smin(k,ℓ)=min{Stmp(k,ℓ−1),S(k,ℓ)}Stmp(k,ℓ)=S(k,ℓ)(8)
重复(7)、(8)过程得到最小值谱,其中,搜索窗的长度L会影响到噪声的跟踪速度,一般按照经验选0.5s~1.5s左右。
2.2. 语音存在概率计算
定义带噪语音能量与局部最小能量与比
S
r
(
k
,
ℓ
)
S_r(k,\ell)
Sr(k,ℓ)如下
S
r
(
k
,
ℓ
)
≜
S
(
k
,
l
)
S
m
i
n
(
k
,
ℓ
)
(9)
S_r(k,\ell)\triangleq\frac{S(k,l)}{S_{min}(k,\ell)}\tag9
Sr(k,ℓ)≜Smin(k,ℓ)S(k,l)(9)
定义二值
I
(
k
,
ℓ
)
I(k,\ell)
I(k,ℓ)如下
I
(
k
,
ℓ
)
=
{
1
,
S
r
(
k
,
ℓ
)
>
δ
0
,
o
t
h
e
r
w
i
s
e
(10)
I(k,\ell)=\left\{\begin{matrix}\begin{aligned}&1,S_r(k,\ell)>\delta\\&0,otherwise\end{aligned}\end{matrix}\right.\tag{10}
I(k,ℓ)={1,Sr(k,ℓ)>δ0,otherwise(10)
最后,语音存在概率更新如下:
p
′
^
(
k
,
ℓ
)
=
α
p
p
′
^
(
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′^(k,ℓ)=αpp′^(k,ℓ−1)+(1−αp)I(k,ℓ)(11)
其中
δ
为
预
先
设
定
的
门
限
,
α
p
(
0
<
α
p
<
1
)
\delta为预先设定的门限,\alpha_p(0<\alpha_p<1)
δ为预先设定的门限,αp(0<αp<1)为平滑常数
3.code & result
整个过程比较简单,参照上述过程编写程序估计噪音,结合谱减法降噪效果如下
对比处理前后可以看到背景噪声有了明显的消除,当然因为谱减法的原因引入了较多的音乐噪声,这个时候还可以尝试其它的谱修改方法如维纳滤波或者OMLSA等
References: