MCRA
MCRA(Minima controlled recursive averaging)算法使用了递归平均和最小值跟踪相结合的方法,这里的最小值跟踪体现在语音存在概率是由最小值跟踪确定的。
递归平滑
在噪声段进行语音平滑处理,在语音段不更新噪声,则,
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
)
(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) \end{aligned} \tag{1}
H0′(k,l):λd^(k,l+1)H1′(k,l):λd^(k,l+1)=αdλd^(k,l)+(1−αd)∣Y(k,l)∣2=λd^(k,l)(1)
α
d
\alpha_d
αd是平滑参数,数值过大会导致跟踪较慢,数值过小,容易产生音乐噪声。利用条件语音存在概率
p
′
(
k
,
l
)
p^{'}(k,l)
p′(k,l)进行综合,可得,
λ
d
^
(
k
,
l
+
1
)
=
(
α
d
λ
d
^
(
k
,
l
)
+
(
1
−
α
d
)
∣
Y
(
k
,
l
)
∣
2
)
(
1
−
p
′
(
k
,
l
)
)
+
λ
d
^
(
k
,
l
)
p
′
(
k
,
l
)
=
α
~
d
λ
d
^
(
k
,
l
)
+
(
1
−
α
~
d
)
∣
Y
(
k
,
l
)
∣
2
(2)
\begin{aligned} \hat{\lambda_d}(k,l+1) &= (\alpha_d\hat{\lambda_d}(k,l) + (1-\alpha_d)|Y(k,l)|^2)(1-p^{'}(k,l)) + \hat{\lambda_d}(k,l)p^{'}(k,l) \\ & = \tilde\alpha_d\hat{\lambda_d}(k,l) + (1-\tilde\alpha_d)|Y(k,l)|^2 \end{aligned} \tag{2}
λd^(k,l+1)=(αdλd^(k,l)+(1−αd)∣Y(k,l)∣2)(1−p′(k,l))+λd^(k,l)p′(k,l)=α~dλd^(k,l)+(1−α~d)∣Y(k,l)∣2(2)
其中, α d ~ = α d + ( 1 − α d ) p ′ ( k , l ) \tilde{\alpha_d}=\alpha_d + (1-\alpha_d)p^{'}(k,l) αd~=αd+(1−αd)p′(k,l)
最小值控制语音存在概率
首先对幅度谱在频域进行平滑,得,
S
f
(
k
,
l
)
=
∑
i
=
−
w
w
b
(
i
)
∣
Y
(
k
−
i
,
l
)
∣
2
(3)
S_f(k,l)=\sum_{i=-w}^{w}b(i)|Y(k-i,l)|^2 \tag{3}
Sf(k,l)=i=−w∑wb(i)∣Y(k−i,l)∣2(3)
接着在时域进行平滑,
S
(
k
,
l
)
=
α
s
S
(
k
,
l
−
1
)
+
(
1
−
α
s
)
S
f
(
k
,
l
)
(4)
S(k,l)=\alpha_s S(k,l-1) + (1-\alpha_s )S_f(k,l) \tag{4}
S(k,l)=αsS(k,l−1)+(1−αs)Sf(k,l)(4)
利用分帧最小值跟踪法求出
S
m
i
n
(
k
,
l
)
S_{min}(k,l)
Smin(k,l),
if mod(
λ
\lambda
λ,D) = 0
S
m
i
n
(
k
,
l
)
=
m
i
n
(
S
m
i
n
(
k
,
l
−
1
)
,
S
(
k
,
l
)
)
S_{min}(k,l)=min(S_{min}(k,l-1),S(k,l))
Smin(k,l)=min(Smin(k,l−1),S(k,l))
S
t
m
p
(
k
,
l
)
=
S
(
k
,
l
)
S_{tmp}(k,l)=S(k,l)
Stmp(k,l)=S(k,l)
else
S
m
i
n
(
k
,
l
)
=
m
i
n
(
S
m
i
n
(
k
,
l
−
1
)
,
S
(
k
,
l
)
)
S_{min}(k,l)=min(S_{min}(k,l-1),S(k,l))
Smin(k,l)=min(Smin(k,l−1),S(k,l))
S
t
m
p
(
k
,
l
)
=
m
i
n
(
S
t
m
p
(
k
,
l
−
1
)
,
S
(
k
,
l
)
)
S_{tmp}(k,l)=min(S_{tmp}(k,l-1),S(k,l))
Stmp(k,l)=min(Stmp(k,l−1),S(k,l))
end
定义比值
S
r
(
k
,
l
)
=
S
(
k
,
l
)
/
S
m
i
n
(
k
,
l
)
S_r(k,l)=S(k,l)/S_{min}(k,l)
Sr(k,l)=S(k,l)/Smin(k,l),如果
S
r
(
k
,
l
)
S_r(k,l)
Sr(k,l)大于阈值,则令
I
(
k
,
l
)
=
1
I(k,l)=1
I(k,l)=1,否则为0,条件语音存在概率根据I(k,l)平滑得到,即,
p
′
(
k
,
l
)
=
α
p
p
′
(
k
,
l
−
1
)
+
(
1
−
α
)
I
(
k
,
l
)
(5)
p^{'}(k,l)=\alpha_pp^{'}(k,l-1) + (1-\alpha_)I(k,l) \tag{5}
p′(k,l)=αpp′(k,l−1)+(1−α)I(k,l)(5)
将式(6)带入式(2)得到最终的噪声估计值。
MCRA2
将MCRA算法中最小值跟踪的方法改为连续谱最小值跟踪噪声估计方法,其余部分和MCRA方法一致。即将
S
m
i
n
(
k
,
l
)
S_{min}(k,l)
Smin(k,l)的估计方法改为,
if
S
m
i
n
(
k
,
l
)
<
S
(
k
,
l
)
S_{min}(k,l) < S(k,l)
Smin(k,l)<S(k,l)
S
m
i
n
(
k
,
l
)
=
γ
S
m
i
n
(
k
,
l
−
1
)
+
1
−
γ
1
−
β
(
S
(
k
,
l
)
−
β
)
S
(
k
,
l
−
1
)
S_{min}(k,l)=\gamma S_{min}(k,l-1)+\frac{1-\gamma}{1-\beta}(S(k,l)-\beta)S(k,l-1)
Smin(k,l)=γSmin(k,l−1)+1−β1−γ(S(k,l)−β)S(k,l−1)
else
S
m
i
n
(
k
,
l
)
=
S
(
k
,
l
)
S_{min}(k,l)=S(k,l)
Smin(k,l)=S(k,l)
end
IMCRA
improved minima controlled recursive averaging (IMCRA)算法是在MCRA算法上做了很多优化。
- 式(2)中语音存在概率的计算方式进行了改变,改成了和omlsa中一样的方法。
- 通过控制先验语音缺席概率(而不是语音存在概率)来间接达到最小值控制。
- 对噪声做了一个偏差补偿
- I ( k , l ) I(k,l) I(k,l)通过两个不同比率进行判决,更加可靠。
自适应分位数噪声估计
自适应分位数噪声估计使用的是通用形式如下,
N
^
(
w
,
l
)
=
{
N
^
(
w
,
l
−
1
)
+
λ
δ
+
(
w
,
l
)
,
∣
Y
(
w
,
l
)
∣
≥
N
^
(
w
,
l
−
1
)
N
^
(
w
,
l
−
1
)
−
(
1
−
λ
)
δ
−
(
w
,
l
)
,
∣
Y
(
w
,
l
)
∣
<
N
^
(
w
,
l
−
1
)
\hat{N}(w,l) = \begin{cases} \hat{N}(w,l-1) + \lambda \delta_+(w,l), |Y(w,l)| \geq \hat{N}(w,l-1) \\ \hat{N}(w,l-1) - (1-\lambda) \delta_-(w,l), |Y(w,l)| < \hat{N}(w,l-1) \end{cases}
N^(w,l)={N^(w,l−1)+λδ+(w,l),∣Y(w,l)∣≥N^(w,l−1)N^(w,l−1)−(1−λ)δ−(w,l),∣Y(w,l)∣<N^(w,l−1)
基本思想就是如果当前能量比估计的噪声能量高则增加噪声能量,否则就减少噪声能量,那接下来的重点就是如何设计增加和减少的步长,参考文章[2-3]介绍一些估计的方法,具体可以看文章,这里主要说一下自己对webrtc的自适应分位数噪声估计方法的理解,不一定正确,欢迎指正。
1)对数域平滑
采用对数分位数噪声估计,在对数域进行平滑更新噪声能量,即,
l
o
g
(
N
^
(
w
,
l
)
)
=
{
l
o
g
(
N
^
(
w
,
l
−
1
)
)
+
λ
δ
+
(
w
,
l
)
,
l
o
g
(
∣
Y
(
w
,
l
)
∣
)
≥
l
o
g
(
N
^
(
w
,
l
−
1
)
)
l
o
g
(
N
^
(
w
,
l
−
1
)
)
−
(
1
−
λ
)
δ
−
(
w
,
l
)
,
l
o
g
(
∣
Y
(
w
,
l
)
∣
)
<
l
o
g
(
N
^
(
w
,
l
−
1
)
)
log(\hat{N}(w,l)) = \begin{cases} log(\hat{N}(w,l-1)) + \lambda \delta_+(w,l), log(|Y(w,l)|) \geq log(\hat{N}(w,l-1)) \\ log(\hat{N}(w,l-1)) - (1-\lambda) \delta_-(w,l), log(|Y(w,l)|) < log(\hat{N}(w,l-1)) \end{cases}
log(N^(w,l))={log(N^(w,l−1))+λδ+(w,l),log(∣Y(w,l)∣)≥log(N^(w,l−1))log(N^(w,l−1))−(1−λ)δ−(w,l),log(∣Y(w,l)∣)<log(N^(w,l−1))
2)变步长
d
e
n
s
i
t
y
(
w
,
l
)
=
{
c
o
u
n
t
∗
d
e
n
s
i
t
y
(
w
,
l
)
+
1
/
(
2
d
)
c
o
u
n
t
+
1
,
∣
l
o
g
(
N
^
(
w
,
l
−
1
)
)
−
l
o
g
(
∣
Y
(
w
,
l
)
∣
)
∣
<
d
d
e
n
s
i
t
y
(
w
,
l
−
1
)
,
o
t
h
e
r
s
density(w,l)=\begin{cases} \frac{count*density(w,l) + 1/(2d)}{count + 1} , |log(\hat{N}(w,l-1)) - log(|Y(w,l)|)| < d \\ density(w,l-1),others \end{cases}
density(w,l)={count+1count∗density(w,l)+1/(2d),∣log(N^(w,l−1))−log(∣Y(w,l)∣)∣<ddensity(w,l−1),others
概率密度
d
e
n
s
i
t
y
(
w
,
l
)
density(w,l)
density(w,l)的更新公式如上式,其中阈值
d
=
0.01
d=0.01
d=0.01,如果当前帧的对数能量和噪声对数能量比较接近,绝对差距小于阈值
d
d
d,则将当前的密度与
1
/
(
2
d
)
=
50
1/(2d)=50
1/(2d)=50 进行加权平均(增加当前的概率密度函数的数值),否则不更新。
δ
−
(
w
,
l
)
=
δ
+
(
w
,
l
)
=
{
40
c
o
u
n
t
,
d
e
n
s
i
t
y
(
w
,
l
)
<
1
40
c
o
u
n
t
∗
d
e
n
s
i
t
y
(
w
,
l
)
,
o
t
h
e
r
s
\delta_-(w,l) = \delta_+(w,l)=\begin{cases} \frac{40}{count} , density(w,l)< 1 \\ \frac{40}{count*density(w,l)} ,others \end{cases}
δ−(w,l)=δ+(w,l)={count40,density(w,l)<1count∗density(w,l)40,others
步长的更新公式如上式,当概率密度达到阈值1后则减少步长,我的理解是在密度达到阈值后,表示在目标值附近,进行精细化搜索。
其中
c
o
u
n
t
count
count是从1到200循环计数的,当计数到200则更新噪声估计的值,否则不更新。200是个超参数,至于为什么从小计数到大,我的理解是当
c
o
u
n
t
count
count数值小时,步长大,当当
c
o
u
n
t
count
count数值大时,步长小,类似于算法收敛一样,先进行大范围搜索,当快达到目标时减少收敛速度,搜索更准确。同时webrtc设置了三种conut的初始值,同时更新,谁先达到200使用谁的结果,增加更新速度,相当于每200/3次更新一次结果。
参考
【1】Stahl V, Fischer A, Bippus R. Quantile based noise estimation for spectral subtraction and Wiener filtering[C]//2000 IEEE International Conference on Acoustics, Speech, and Signal Processing. Proceedings (Cat. No. 00CH37100). IEEE, 2000, 3: 1875-1878.
【2】Tiwari N, Pandey P C. Speech Enhancement Using Noise Estimation With Dynamic Quantile Tracking[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2019, 27(12): 2301-2312.
【3】Hammer H L, Yazidi A, Rue H. A new quantile tracking algorithm using a generalized exponentially weighted average of observations[J]. Applied Intelligence, 2019, 49(4): 1406-1420.
【4】Cohen I , Berdugo B . Speech enhancement for non-stationary noise environments[J]. Signal Processing, 2001, 81(11):2403-2418.
【5】Rangachari S , Loizou P C . A noise-estimation algorithm for highly non-stationary environments[J]. Speech Communication, 2006, 48(2):220-231.
【6】Cohen I . Noise spectrum estimation in adverse environments: improved minima controlled recursive averaging[J]. IEEE Transactions on Speech and Audio Processing, 2003, 11(5):466-475.