谱减法
一、引言
谱减法作为语音降噪处理算法中的经典算法,因其运行和处理快,而被广泛应用。
二、简单谱减法
2.1 谱减法使用场景
1) 噪声为是平稳的(也即在整个时间范围内,噪声的均值和方差基本保持不变);
2) 噪声为加性噪声。
2.2 简单谱减法基本思想
默认混合信号(含噪信号)的前几帧仅包含环境噪声,并利用混合信号的前几帧的平均幅度谱或者能量谱作为估计到一帧噪声的幅度谱或者能量谱。最后利用混合信号(含噪信号)的幅度谱或者能量谱与估计到的幅度谱与能量谱相减,得到估计到的干净信号的幅度谱或者能量谱。
2.3 简单谱减法数学模型
接收到的含噪语音信号时域数学模型如下:
y
(
n
)
=
x
(
n
)
+
n
(
n
)
y(n)=x(n)+n(n)
y(n)=x(n)+n(n) 其中,
y
(
n
)
y(n)
y(n)表示混合信号(含噪信号),也即待降噪信号;
x
(
n
)
x(n)
x(n)表示干净信的语音信号;
n
(
n
)
n(n)
n(n)表示噪声信号。其频域表达式如下所示:
Y
(
ω
)
=
X
(
ω
)
+
N
(
ω
)
Y(\omega)=X(\omega)+N(\omega)
Y(ω)=X(ω)+N(ω) 出增强后语音信号出现幅度谱负数的情况用0替换,
∣
X
^
(
ω
)
∣
=
{
(
∣
Y
(
ω
)
∣
γ
−
∣
N
^
(
ω
)
∣
∣
∣
1
y
∣
Y
(
ω
)
∣
γ
−
∣
N
^
(
ω
)
∣
∣
γ
≥
0
0
else
|\hat{X}(\omega)|=\left\{\begin{array}{cc} \left(|Y(\omega)|^{\gamma}-\left.|\hat{N}(\omega)|^{\mid}\right|^{\frac{1}{y}}\right. & |Y(\omega)|^{\gamma}-|\hat{N}(\omega)|^{\mid \gamma} \geq 0 \\ 0 & \text { else } \end{array}\right.
∣X^(ω)∣=⎩⎨⎧(∣Y(ω)∣γ−∣N^(ω)∣∣∣∣∣y10∣Y(ω)∣γ−∣N^(ω)∣∣γ≥0 else
其中,若
γ
=
1
,
∣
Y
(
ω
)
∣
\gamma=1,|Y(\omega)|
γ=1,∣Y(ω)∣为混合信号(含噪信号)的幅度谱;若
γ
=
2
,
∣
Y
(
ω
)
∣
2
\gamma=2,|Y(\omega)|^2
γ=2,∣Y(ω)∣2为混合信号(含噪信号)的能量谱;
∣
N
^
(
ω
)
∣
∣
γ
|\hat{N}(\omega)|^{\mid \gamma}
∣N^(ω)∣∣γ为混合信号(含噪信号)估计到的幅度谱或者能量谱。其系统框图如下所示:
简单谱减法代码实现步骤:
1) 初始化参数,确定帧长,帧移,傅里叶变换长度,确定估计噪声谱的帧数
2) 读入混合语音信号,根据帧长和帧移计算帧数。
3) 根据确定用于估计噪声谱的帧数,估计噪声谱。
4) 对每一帧混合信号进行stft变换,然后用含噪信号谱减去噪声谱,得到增强后的信号的幅度谱或者能量谱。
5) 若增强后的信号的幅度谱或者能量谱出现负值,则将其替换为0。
6) 利用混合信号的相位和增强后信号的幅度谱进行重构-反变换到时域。
2.4 简单谱减法结果展示
三、经典语音增强方法-过减法
3.1 简单谱减法的缺点
在简单谱减法过程中,如果混合信号的幅度谱与估计出来的噪声谱相减出现负值,说明对噪声出现了过估计问题,仅是简单的将出现的负值设为0,将会导致信号帧频谱的随机位置上出现小的、独立的峰值,称之为音乐噪声。
3.2 改进后的谱减法–>过减法
改进的点如下所示:
1) 在简单谱减法的基础上加上过减因子
α
\alpha
α
2) 对过减后出现的负值用
β
∣
N
^
(
ω
)
∣
\beta|\hat{N}(\omega)|
β∣N^(ω)∣替换,
∣
N
^
(
ω
)
∣
|\hat{N}(\omega)|
∣N^(ω)∣为估计到的噪声的幅度谱。
3.2 过减法数学公式
改进后的过减法数学公式如下所示,
∣
X
^
(
ω
)
∣
=
(
∣
Y
(
ω
)
∣
γ
−
α
∣
N
^
(
ω
)
∣
γ
)
1
γ
|\hat{X}(\omega)|=\left(|Y(\omega)|^{\gamma}-\alpha|\hat{N}(\omega)|^{\gamma}\right)^{\frac{1}{\gamma}}
∣X^(ω)∣=(∣Y(ω)∣γ−α∣N^(ω)∣γ)γ1 出增强后语音信号出现幅度谱负数的情况用
β
∣
N
^
(
ω
)
∣
\beta|\hat{N}(\omega)|
β∣N^(ω)∣替换,
∣
X
^
(
ω
)
∣
=
{
β
∣
N
^
(
ω
)
∣
∣
X
^
(
ω
)
∣
<
β
∣
N
^
(
ω
)
∣
∣
X
^
(
ω
)
∣
else
|\hat{X}(\omega)|= \begin{cases}\beta|\hat{N}(\omega)| & |\hat{X}(\omega)|<\beta|\hat{N}(\omega)| \\ |\hat{X}(\omega)| & \text { else }\end{cases}
∣X^(ω)∣={β∣N^(ω)∣∣X^(ω)∣∣X^(ω)∣<β∣N^(ω)∣ else