对比IMCRA来研究一下Cohen的TBRR跟踪方法
前言
科恩大神的巅峰之作MCRA是菜鸟容易看懂的一个算法,但不妨碍它成为经典噪声跟踪的天花板,他再接再厉提出了Improved版本和TBRR版本的MCRA,罗爱洲也在专著中改进了一版号称MCRA-2。但这么多烟花缭乱的改进本质上改的是啥呢?答案是语音存在概率!
MCRA1vs2-信噪比门限得出的语音存在概率
MCRA1和MCRA2都是按照最小跟踪方法算出的S_r值,来判断这个值的门限来决定语音存在与否:
i
f
S
r
(
k
,
l
)
>
δ
1
,
2
p
(
k
,
l
)
=
1
语音存在
e
l
s
e
p
(
k
,
l
)
=
0
语音存在
if \ \ S_r(k,l) > \delta_{1,2}\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p(k,l) = 1 \text{语音存在}\\ else\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p(k,l) = 0 \text{语音存在}
if Sr(k,l)>δ1,2 p(k,l)=1语音存在else p(k,l)=0语音存在
MCRA1中的门限是一个常数,而MCRA2中根据不同频段变成了分段常数:
δ
(
k
)
=
{
2
,
1
≤
k
≤
L
F
2
,
L
F
≤
k
≤
M
F
5
,
M
F
≤
k
≤
F
s
/
2
\delta(k) = \begin{cases} 2 ,1 \leq k \leq LF \\ 2 ,LF \leq k \leq MF \\ 5, MF \leq k \leq Fs/2 \end{cases}
δ(k)=⎩⎪⎨⎪⎧2,1≤k≤LF2,LF≤k≤MF5,MF≤k≤Fs/2
IMCRA vs TBRR-的语音存在概率计算:
首先计算推导在OMLSA&IMCRA学习笔记可以找到,这两个进阶算法的语音存在概率都利用了这个结论:
p
(
k
,
l
)
=
{
1
+
q
(
k
,
l
)
1
−
q
(
k
,
l
)
(
1
+
ξ
(
k
,
l
)
)
e
x
p
(
−
v
(
k
,
l
)
)
}
−
1
\begin{aligned} p(k,l) = \big \{1+\frac{q(k,l)}{1-q(k,l)}(1+\xi(k,l))exp(-v(k,l)) \big \}^{-1} \end{aligned}
p(k,l)={1+1−q(k,l)q(k,l)(1+ξ(k,l))exp(−v(k,l))}−1 其中
q
(
k
,
l
)
≜
P
(
H
0
(
k
,
l
)
)
q(k,l)\triangleq P(H_0(k,l))
q(k,l)≜P(H0(k,l))被定义为语音不存在的先验概率。
ξ
(
k
,
l
)
≜
λ
x
(
k
,
l
)
/
λ
d
(
k
,
l
)
\xi(k,l)\triangleq\lambda_x(k,l)/\lambda_d(k,l)
ξ(k,l)≜λx(k,l)/λd(k,l)为先验信噪比,
γ
(
k
,
l
)
≜
∣
Y
(
k
,
l
)
∣
2
/
λ
d
(
k
,
l
)
\gamma(k,l)\triangleq|Y(k,l)|^2/\lambda_d(k,l)
γ(k,l)≜∣Y(k,l)∣2/λd(k,l),
v
(
k
,
l
)
≜
γ
(
k
,
l
)
ξ
(
k
,
l
)
/
(
1
+
ξ
(
k
,
l
)
)
v(k,l)\triangleq\gamma(k,l)\xi(k,l)/(1+\xi(k,l))
v(k,l)≜γ(k,l)ξ(k,l)/(1+ξ(k,l))。而所谓的改进就是改进这个语音不存在的概率,相比上面语音不存在是一个键控开关,改进算法的语音不存在有点概率的味道了。整个跟踪的基础也是local energy通过平滑时频窗口的STFT幅度平方来获取,先定义一个窗函数获取当前频率的附近能量:
S
f
(
k
,
l
)
=
∑
i
=
−
w
w
b
(
i
)
∣
Y
(
k
−
i
,
l
)
∣
2
S_f(k,l)= \sum_{i=-w}^wb(i)|Y(k-i,l)|^2
Sf(k,l)=i=−w∑wb(i)∣Y(k−i,l)∣2
而时域的平滑采用一阶递归方程:
S
(
k
,
l
)
=
α
s
S
(
k
,
l
−
1
)
+
(
1
−
α
s
)
S
f
(
k
,
l
)
S(k,l)=\alpha_sS(k,l-1)+(1-\alpha_s)S_f(k,l)
S(k,l)=αsS(k,l−1)+(1−αs)Sf(k,l),而两种改进的算法对
S
(
k
,
l
)
S(k,l)
S(k,l)进一步平滑和估计,产生了不同的方案。
IMCRA的语音不存在算法
首先还是按照MCRA的算法:
if mod(l/L)=0
S_min(k,l) = min(S_tmp(k,l-1),S(k,l))
S_tmp(k,l) = S_f(k,l)
else
S_min(k,l) = min(S_min(k,l-1),S(k,l))
S_tmp(k,l) = min(S_tmp(k,l-1),S(k,l))
end
找到
S
m
i
n
S_{min}
Smin,此刻整出来两个新名词
γ
m
i
n
(
k
,
l
)
=
∣
Y
(
k
,
l
)
∣
2
B
m
i
n
S
m
i
n
(
k
,
l
)
\gamma_{min}(k,l)=\frac{|Y(k,l)|^2}{B_{min}S_{min}(k,l)}
γmin(k,l)=BminSmin(k,l)∣Y(k,l)∣2和
ζ
(
k
,
l
)
=
S
(
k
,
l
)
B
m
i
n
S
m
i
n
(
k
,
l
)
\zeta(k,l)=\frac{S(k,l)}{B_{min}S_{min}(k,l)}
ζ(k,l)=BminSmin(k,l)S(k,l),
B
m
i
n
B_{min}
Bmin被取名常数偏差因子【5】,再次得出初次的语音判决结果(二值域)
I
(
k
,
l
)
=
{
1
,
γ
m
i
n
(
k
,
l
)
≤
γ
0
,
a
n
d
ζ
(
k
,
l
)
≤
ζ
0
0
,
o
t
h
e
r
\ I(k,l) = \begin{cases} 1 ,\gamma_{min}(k,l)\leq \gamma_0, and\ \zeta(k,l)\leq \zeta_0\\ 0 ,other \\ \end{cases}
I(k,l)={1,γmin(k,l)≤γ0,and ζ(k,l)≤ζ00,other再根据这个结果二次平滑
S
S
S值得到:
S
^
(
k
,
l
)
=
{
∑
i
=
−
I
w
I
w
w
i
n
(
i
)
I
(
k
−
i
,
l
)
∣
Y
(
k
−
i
,
l
)
∣
2
∑
i
=
−
I
w
I
w
w
i
n
(
i
)
I
(
k
−
i
,
l
)
,
∑
i
=
−
I
w
I
w
I
(
k
−
i
,
l
)
≠
0
S
^
(
k
,
l
−
1
)
,
o
t
h
e
r
\hat S(k,l) = \begin{cases} \frac{\sum_{i=-I_w}^{I_w}win(i)I(k-i,l)|Y(k-i,l)|^2}{\sum_{i=-I_w}^{I_w}win(i)I(k-i,l)} ,\sum_{i=-I_w}^{I_w}I(k-i,l)\neq0\\ \hat S(k,l-1) ,other \\ \end{cases}
S^(k,l)=⎩⎨⎧∑i=−IwIwwin(i)I(k−i,l)∑i=−IwIwwin(i)I(k−i,l)∣Y(k−i,l)∣2,∑i=−IwIwI(k−i,l)=0S^(k,l−1),other科恩觉得不过瘾,由加了一级一届的平滑公式
S
^
(
k
,
l
)
=
α
s
S
^
(
k
,
l
−
1
)
+
(
1
−
α
s
)
S
^
(
k
,
l
)
\hat S(k,l) =\alpha_s\hat S(k,l-1) +(1-\alpha_s)\hat S(k,l)
S^(k,l)=αsS^(k,l−1)+(1−αs)S^(k,l)
然后再根据
if mod(l/L)=0
S_min(k,l) = min(S_tmp(k,l-1),S(k,l))
S_tmp(k,l) = S_f(k,l)
else
S_min(k,l) = min(S_min(k,l-1),S(k,l))
S_tmp(k,l) = min(S_tmp(k,l-1),S(k,l))
end
搜索到 S ^ m i n \hat S_{min} S^min,然后计算新名词的估计值 γ ^ m i n ( k , l ) = ∣ Y ( k , l ) ∣ 2 B m i n S ^ m i n ( k , l ) \hat\gamma_{min}(k,l)=\frac{|Y(k,l)|^2}{B_{min}\hat S_{min}(k,l)} γ^min(k,l)=BminS^min(k,l)∣Y(k,l)∣2和 ζ ( k , l ) = S ^ ( k , l ) B m i n S ^ m i n ( k , l ) \zeta(k,l)=\frac{\hat S(k,l)}{B_{min}\hat S_{min}(k,l)} ζ(k,l)=BminS^min(k,l)S^(k,l),这就是第二轮搜索。根据以上计算,再带入下式得出新的不存在概率 q ^ ( k , l ) = { 1 , γ m i n ( k , l ) ≤ 1 , a n d ζ ( k , l ) ≤ ζ 0 γ 1 − γ ^ m i n ( k , l ) γ 1 − 1 , 1 ≤ γ ^ m i n ( k , l ) ≤ γ 1 a n d ζ ( k , l ) ≤ ζ 0 0 , o t h e r \hat q(k,l) = \begin{cases} 1 ,\gamma_{min}(k,l)\leq1, and\ \zeta(k,l)\leq \zeta_0\\ \frac{\gamma_1-\hat\gamma_{min}(k,l)}{\gamma_1-1},1\leq \hat\gamma_{min}(k,l)\leq \gamma_1 and\ \zeta(k,l)\leq \zeta_0\\ 0 ,other \\ \end{cases} q^(k,l)=⎩⎪⎨⎪⎧1,γmin(k,l)≤1,and ζ(k,l)≤ζ0γ1−1γ1−γ^min(k,l),1≤γ^min(k,l)≤γ1and ζ(k,l)≤ζ00,other接着 α ^ d ( k , l ) = α d + ( 1 − α d ) p ′ ( k , l ) \hat\alpha_d(k,l)=\alpha_d+(1-\alpha_d)p^\prime(k,l) α^d(k,l)=αd+(1−αd)p′(k,l)更新平滑因子,以及 λ ^ d ( k , l ) = α ^ d λ ^ d ( k − 1 , l ) + ( 1 − α ^ d ) ∣ Y ( k , l ) ∣ 2 \begin{aligned} \hat\lambda_d(k,l)=\hat\alpha_d\hat\lambda_d(k-1,l)+(1-\hat\alpha_d)|Y(k,l)|^2 \end{aligned} λ^d(k,l)=α^dλ^d(k−1,l)+(1−α^d)∣Y(k,l)∣2最后重新计算后验和先验信噪比。
TBRR的语音存在概率
Transient Beam-to-Reference Ratio 即瞬态波束与参考信号比,这是应用于GSC算法的一种后置滤波的噪声跟踪方法,利用FBF固定波束形成矩阵输出和阻塞矩阵的输出,进一步的优化语音不存在概率的计算,进而得到更加准确的语音存在估计。
根据GSC输出信号的假设,期望语音信号、类平稳噪声和瞬时非平稳噪声,有三种场景
- H 1 H_1 H1:表示存在期望语音信号,则 q = 0 q=0 q=0;
- H 0 s H_{0s} H0s:表示存在类平稳噪声,则 q = 1 q=1 q=1;
- H 0 t H_{0t} H0t:表示存在瞬态非平稳噪声,则 q = 1 q=1 q=1;
根据假设可以看出这种检测方法可以识别出瞬态非平稳噪声,那么除了上述固定的场景(键控值),不属于上述情况的概率该如何计算呢?
- H r H_{r} Hr:tbrr概率= m a x ( γ 0 − γ s γ 0 − 1 , Ω h i g h ( k ) − Ω ( k , l ) Ω h i g h ( k ) − Ω l o w ( k ) ) max(\frac{\gamma_0-\gamma_s}{\gamma_0-1},\frac{\Omega_{high}(k)-\Omega(k,l)}{\Omega_{high}(k)-\Omega_{low}(k)}) max(γ0−1γ0−γs,Ωhigh(k)−Ωlow(k)Ωhigh(k)−Ω(k,l));
上述假设场景如何区分呢?首先令每一个路输出的信号都经过MCRA进行跟踪,主路
F
B
F
FBF
FBF矩阵的输出的广义信噪比
Λ
Y
=
S
(
k
,
l
)
λ
(
k
,
l
)
\Lambda_Y=\frac{S(k,l)}{\lambda(k,l)}
ΛY=λ(k,l)S(k,l)如果这个广义信噪比小于门限,认为主路输出基本上是噪声信号,否则可能是语音信号,这里注意是可能,因为阻塞矩阵的条件可能将这个可能翻转。然后定义辅路阻塞矩阵的广义能量噪声比为
Λ
B
M
=
M
A
X
1
≤
i
≤
M
−
1
{
S
B
M
i
(
k
,
l
)
λ
B
M
i
(
k
,
l
)
}
\Lambda_{BM}=MAX_{1\leq i \leq M-1}\{\frac{S_{BM_i}(k,l)}{\lambda_{BM_i}(k,l)}\}
ΛBM=MAX1≤i≤M−1{λBMi(k,l)SBMi(k,l)}如果辅路的比值较低而且主路广义信噪比较高,毫无疑问是满足
H
1
H_1
H1。反之,如果主路广义信噪比较低,辅路也低,则满足
H
0
s
H_{0s}
H0s,辅路高,则可能是
H
0
t
H_{0t}
H0t。这几种判断比较好解释。
但是如果主辅路两个比值都高意味着什么呢?是瞬态信号,还是辅路泄露了语音信号,则需要进一步的判断,于是引入了一个新的定义,这个定义就是所谓的TBRR:
Ω
(
k
,
l
)
=
S
(
k
,
l
)
−
λ
(
k
,
l
)
M
A
X
1
≤
i
≤
M
−
1
{
S
B
M
i
(
k
,
l
)
−
λ
B
M
i
(
k
,
l
)
}
\Omega(k,l)=\frac{S(k,l)-\lambda(k,l)}{MAX_{1\leq i \leq M-1}\{S_{BM_i}(k,l)-\lambda_{BM_i}(k,l)\}}
Ω(k,l)=MAX1≤i≤M−1{SBMi(k,l)−λBMi(k,l)}S(k,l)−λ(k,l)怎么理解这个TBRR呢?就是我们要相信GSC的输出基本靠谱,即主路主要输出有用的语音,辅路输出噪声,所以主路的频谱能量差如果大于辅路的,更倾向于是语音信号
H
r
H_{r}
Hr,反之认为是
H
0
t
H_{0t}
H0t。同时为了更倾向于得出语音不存在的概率,加入了后验信噪比的参考,得出了
H
r
H_{r}
Hr计算方法:
q
t
b
r
r
(
k
,
l
)
=
{
1
,
H
0
s
,
o
r
H
0
t
m
a
x
(
γ
0
−
γ
s
γ
0
−
1
,
Ω
h
i
g
h
(
k
)
−
Ω
(
k
,
l
)
Ω
h
i
g
h
(
k
)
−
Ω
l
o
w
(
k
)
)
,
H
r
0
,
H
1
q_{tbrr}(k,l) = \begin{cases} 1 ,H_{0s}, or\ H_{0t}\\ max(\frac{\gamma_0-\gamma_s}{\gamma_0-1},\frac{\Omega_{high}(k)-\Omega(k,l)}{\Omega_{high}(k)-\Omega_{low}(k)}),H_{r}\\ 0 , H_1\\ \end{cases}
qtbrr(k,l)=⎩⎪⎨⎪⎧1,H0s,or H0tmax(γ0−1γ0−γs,Ωhigh(k)−Ωlow(k)Ωhigh(k)−Ω(k,l)),Hr0,H1引用【2】中科恩总结的流程图如下:
后续的算法即可以按照imcra的方式,计算语音存在概率,更新噪声,等等。
后记
科恩的这几篇论文没有太多深奥的数学技巧,胜在心思缜密,想法新奇,每每阅知总会发出“我也能想到”和“我怎么就没想到呢”的感慨,嗨。
从上图的实验结果直观的感受一下差别,最后一段是非平稳噪声,确实沙雕了。
参考文献
1.Microphone array post-filterring for non-stationary noise suppression, Isarael Cohen and Baruch Berdugo
2.Adaptive Beamforming and Postfiltering, Speech enhancement, S.Gannot, I.Cohen
3.Noise Spectrum Estimation in Adverse Environments:Improved Minima Controlled Recursive Averaging, Isarael Cohen
4.Optimal Speech Enhancement Under Signal Presence Uncertainty Using Log-Spectral Amplitude Estimator
5.语音增强理论与实践, (美)罗爱洲, (译)高毅等
6.OMLSA&IMCRA学习笔记
7.麦克风阵列广义旁瓣消除及后置滤波算法研究,王贤祥 重庆邮电大学硕士学位论文