语音特点
噪声估计在语音降噪中具有重要的作用,噪声估计的准确性决定了降噪效果的好坏,噪声估计算法主要根据语音的特性进行估计,语音具有以下三种特性,
现象一
在闭塞音闭合段和清摩擦音的低频段时候,频谱能量趋近于噪声水平,并且噪声对语音频谱具有不均匀现象,不同频谱的分量可能具有不同的实际信噪比。在某一频带的信噪比很低的时候,可以按照频带来对噪声进行估计和更新。这个现象对应的算法就是递归平均算法。
现象二
即使在语音在活动区间,带噪语音信号的单个频带的功率通常会衰减到噪声的功率水平,可以利用追踪短时窗(0.4~1s)内每个频带的最小值,得到噪声的估计,这个现象对应的是最小值噪声估计算法。
现象三
根据每个频谱能量的直方图,出现频率最高的值对应频带内的噪声水平,这个现象对应的是直方图噪声估计算法。其实webrtc中使用的分位数噪声估计算法也是利用了这个特性。
递归平滑算法噪声估计
递归平滑算法的通用形式为:
λ
d
^
(
k
,
l
+
1
)
=
α
d
(
k
,
l
)
λ
d
^
(
k
,
l
)
+
(
1
−
α
d
(
k
,
l
)
)
∣
Y
(
k
,
l
)
∣
2
\hat{\lambda_d}(k,l+1) = \alpha_d(k,l) \hat{\lambda_d}(k,l) + (1-\alpha_d(k,l) )|Y(k,l)|^2
λd^(k,l+1)=αd(k,l)λd^(k,l)+(1−αd(k,l))∣Y(k,l)∣2
其中$\alpha_d(k,l) $是平滑因子,不同的算法具有不同的计算方式,有采用信噪比的计算的,也有采用语音存在概率进行计算的。
最小值统计噪声估计
通过在一个固定窗长之内跟踪带噪语音频谱幅度平方的最小值来估计噪声,为了减少波动,首先要在时频域内进行平滑,然后利用跟踪平滑后能量在一定窗长内的最小值。估计噪声的性能和窗长和更新最小值得频率有关。如果每一帧都进行更新最小值得话,则延时最小,计算复杂度最高。
分帧最小值跟踪噪声估计方法
另一种更常见的方法是在
D
D
D个连续估计之后再更新最小值,即,
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
其中如果噪声是一直递增的,那么估计的延时可以达到
2
D
2D
2D,类似于下图所示,10个点更新一次,最大延时可以达到20。
连续谱最小值跟踪噪声估计方法
为了减少延时,提出了连续谱最小值噪声估计方法,即,
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
直方图统计噪声估计
首先将带噪语音频谱幅度的平方在时频域内进行平滑,然后更新每个频带内的直方图,统计出现频率次数最多的区间对应着该频带的噪声估计,将估计结果再次在时域内进行平滑得到最终的结果。
分位数噪声估计
利用的语音现象和直方图方法一致,即在给定频带,所观察到的频谱低能量值出现的频率要高于高能量值出现的频率。利用这一现象,简单的将各频带的
q
q
q分位点作为噪声估计,
q
q
q值取值不同,效果不同。
具体做法为将最近
L
L
L帧的语音能量进行排序,
∣
Y
(
k
,
t
0
)
∣
≤
∣
Y
(
k
,
t
1
)
∣
≤
.
.
.
≤
∣
Y
(
k
,
t
L
−
1
)
∣
|Y(k,t_0)| \leq |Y(k,t_1)| \leq ... \leq |Y(k,t_{L-1})|
∣Y(k,t0)∣≤∣Y(k,t1)∣≤...≤∣Y(k,tL−1)∣,q-分位的噪声估计为,
N
(
w
,
l
)
=
∣
Y
(
w
,
t
⌊
q
L
⌋
)
∣
N(w,l) = |Y(w,t_{\left \lfloor qL \right \rfloor})|
N(w,l)=∣Y(w,t⌊qL⌋)∣
分位数噪声估计鲁棒性比较好,但需要对 L L L帧的数据进行排序,内存和计算量比较大。
参考
Loizou P C. Speech enhancement: theory and practice[M]. CRC press, 2007.