自适应语音降噪算法综述

961 阅读9分钟

自适应语音降噪算法综述

语音降噪是语音信号处理中的一个重要研究方向,旨在从包含噪声的语音信号中恢复原始的语音信号。以下是几种常用的传统降噪方法的详细介绍,包括谱减法、维纳滤波、小波降噪和经验模态分解。

1. 谱减法(Spectral Subtraction)

原理

谱减法基于这样一个假设,即噪声是平稳的或缓慢变化的,而语音信号则是非平稳的。通过对包含噪声的语音信号进行傅里叶变换,可以在频域中估计并减去噪声频谱,从而得到去噪后的语音信号。

数学证明过程

假设原始语音信号 s(t)s(t),噪声信号 n(t)n(t),混合信号 y(t)=s(t)+n(t)y(t) = s(t) + n(t)

我们对含噪语音信号 y(t)y(t) 进行短时傅里叶变换(STFT),得到: Y(k,m)=S(k,m)+N(k,m)Y(k, m) = S(k, m) + N(k, m)

其中,Y(k,m)Y(k, m)S(k,m)S(k, m)N(k,m)N(k, m)分别为含噪语音、纯净语音和噪声在第 mm 帧、第 kk 个频点的频谱。

谱减法的目标是估计纯净语音的频谱 S(k,m)S(k, m)。假设噪声是平稳的,并且可以通过噪声的静音段估计其频谱 N^(k,m)\hat{N}(k, m)

谱减法的基本操作为:

S^(k,m)=Y(k,m)αN^(k,m)\hat{S}(k, m) = |Y(k, m)| - \alpha |\hat{N}(k, m)|

其中, α\alpha 是一个减噪系数,用于调节减噪的强度。

为了防止出现负频谱值,我们通常取最大值为零:

S^(k,m)=max(Y(k,m)αN^(k,m),0)\hat{S}(k, m) = \max(|Y(k, m)| - \alpha |\hat{N}(k, m)|, 0)

然后,我们根据相位信息重构频谱:

S^(k,m)=S^(k,m)Y(k,m)Y(k,m)\hat{S}(k, m) = \hat{S}(k, m) \cdot \frac{Y(k, m)}{|Y(k, m)|}

这里 Y(k,m)Y(k,m)\frac{Y(k, m)}{|Y(k, m)|}表示含噪语音频谱的相位。

最后,对所有帧的估计频谱进行逆傅里叶变换(ISTFT),并进行重叠相加,得到降噪后的时域信号。

补充说明

假设噪声和语音信号互不相关,根据 Parseval 定理,有:

E{Y(k,m)2}=E{S(k,m)2}+E{N(k,m)2}E\{|Y(k, m)|^2\} = E\{|S(k, m)|^2\} + E\{|N(k, m)|^2\}

因此,估计噪声能量谱的期望值可以表示为: N^(k,m)=E{Y(k,m)2}E{S(k,m)2}\hat{N}(k, m) = \sqrt{E\{|Y(k, m)|^2\} - E\{|S(k, m)|^2\}}

通过上面的数学推导,我们可以看出,谱减法的核心思想是通过估计噪声的频谱,并从含噪语音的频谱中减去该噪声频谱,从而实现语音降噪。具体的数学证明过程需要考虑信号的统计特性和傅里叶变换的性质,这里简要给出了主要的公式推导过程。

2. 维纳滤波(Wiener Filtering)

维纳滤波(Wiener Filtering)是一种经典的最优线性滤波器,用于在最小均方误差准则下对含噪信号进行估计和降噪。维纳滤波的原理是利用信号和噪声的统计特性,通过线性滤波器将噪声抑制到最低,从而恢复出尽可能接近真实信号的估计值。

维纳滤波的基本原理

维纳滤波器的设计目标是找到一个最优滤波器 H(f)H(f),使得滤波后的输出信号与原始信号之间的均方误差最小。具体步骤如下:

  1. 建模含噪信号:假设观测到的含噪语音信号 y(t)y(t) 是纯净语音信号 s(t)s(t) 和噪声信号n(t)n(t)的叠加: y(t)=s(t)+n(t)y(t) = s(t) + n(t)
  2. 计算信号和噪声的功率谱密度:通过短时傅里叶变换(STFT)计算信号和噪声的功率谱密度 Ps(f)P_s(f)Pn(f)P_n(f)
  3. 设计维纳滤波器:根据信号和噪声的功率谱密度,设计最优滤波器 H(f)H(f),其频域表达式为: H(f)=Ps(f)Ps(f)+Pn(f)H(f) = \frac{P_s(f)}{P_s(f) + P_n(f)}
  4. 应用维纳滤波器:将维纳滤波器应用于含噪信号的频谱,得到估计的纯净信号频谱S^(f)\hat{S}(f)S^(f)=H(f)Y(f)\hat{S}(f) = H(f) \cdot Y(f)
  5. 重构时域信号:对滤波后的频谱进行逆傅里叶变换(ISTFT),得到降噪后的时域信号。

数学推导

最小均方误差准则

y(t)y(t) 为含噪信号, s(t)s(t) 为纯净信号, n(t)n(t) 为噪声信号,有: y(t)=s(t)+n(t)y(t) = s(t) + n(t)

维纳滤波的目标是找到一个滤波器 h(t)h(t),使得输出信号 s^(t)\hat{s}(t) 与原始信号s(t)s(t) 之间的均方误差最小: s^(t)=h(t)y(t)\hat{s}(t) = h(t) * y(t) 其中, * 表示卷积运算。

均方误差(MSE)定义为: MSE=E{(s(t)s^(t))2}\text{MSE} = E\{(s(t) - \hat{s}(t))^2\}

频域表示

通过傅里叶变换,将时域信号转换到频域。含噪信号 Y(f)Y(f)、纯净信号S(f)S(f) 和噪声信号 N(f)N(f)的频域关系为: Y(f)=S(f)+N(f)Y(f) = S(f) + N(f)

滤波器的频域表示为H(f)H(f),输出信号的频域表示为: S^(f)=H(f)Y(f)\hat{S}(f) = H(f) \cdot Y(f)

最优滤波器设计

为了使均方误差最小,我们需要求解最优滤波器 H(f)H(f)MSE=E{S(f)H(f)Y(f)2}\text{MSE} = E\{ |S(f) - H(f)Y(f)|^2 \}

展开并求导,得到:

MSE=E{S(f)H(f)(S(f)+N(f))2}\text{MSE} = E\{ |S(f) - H(f)(S(f) + N(f))|^2 \}

MSE=E{S(f)H(f)S(f)H(f)N(f)2}\text{MSE} = E\{ |S(f) - H(f)S(f) - H(f)N(f)|^2 \}

H(f)H(f) 求导,并使其等于零,得到:H(f)=Ps(f)Ps(f)+Pn(f)H(f) = \frac{P_s(f)}{P_s(f) + P_n(f)}其中, Ps(f)P_s(f)Pn(f)P_n(f) 分别为纯净信号和噪声的功率谱密度。

应用维纳滤波器

将最优滤波器 H(f)H(f) 应用于含噪信号的频谱,得到估计的纯净信号频谱:

S^(f)=H(f)Y(f)=Ps(f)Ps(f)+Pn(f)Y(f)\hat{S}(f) = H(f) \cdot Y(f) = \frac{P_s(f)}{P_s(f) + P_n(f)} \cdot Y(f)

重构时域信号

对估计的纯净信号频谱进行逆傅里叶变换(ISTFT),得到降噪后的时域信号:

s^(t)=ISTFT(S^(f))\hat{s}(t) = \text{ISTFT}(\hat{S}(f))

补充说明

假设噪声和语音信号互不相关,根据 Parseval 定理,有:

E{Y(f)2}=E{S(f)2}+E{N(f)2}E\{|Y(f)|^2\} = E\{|S(f)|^2\} + E\{|N(f)|^2\}

因此,估计噪声能量谱的期望值可以表示为:

Pn(f)=E{Y(f)2}E{S(f)2}P_n(f) = E\{|Y(f)|^2\} - E\{|S(f)|^2\}

通过上面的数学推导,我们可以看出,维纳滤波器的设计基于信号和噪声的统计特性,通过最小化均方误差,得到了一个最优的线性滤波器,用于恢复纯净的语音信号。

3. 小波降噪(Wavelet Denoising)

小波降噪(Wavelet Denoising)是一种基于小波变换的信号处理技术,通过在小波域中对信号进行处理,可以有效地抑制噪声,同时保留信号的细节特征。小波变换能够将信号分解为不同尺度和位置的局部特征,这使得小波降噪在处理非平稳信号(如语音信号)时具有显著的优势。

小波降噪的基本原理

小波降噪的核心思想是利用小波变换将信号分解到不同的尺度上,然后在小波系数上进行阈值处理,去除噪声后再进行逆小波变换以重构信号。具体步骤如下:

  1. 小波变换:对含噪语音信号进行小波变换,将信号分解到不同的尺度上,得到小波系数。
  2. 阈值处理:对小波系数进行阈值处理,去除噪声的影响。
  3. 逆小波变换:对处理后的小波系数进行逆小波变换,重构出降噪后的时域信号。

小波变换

小波变换是一种将信号分解为一组小波基函数的技术。连续小波变换(Continuous Wavelet Transform, CWT)定义为:

Wx(a,b)=1ax(t)ψ(tba)dtW_x(a, b) = \frac{1}{\sqrt{a}} \int_{-\infty}^{\infty} x(t) \psi^*\left(\frac{t - b}{a}\right) dt

其中, x(t)x(t) 是原始信号, ψ(t)\psi(t)是母小波函数, aa 是尺度参数, bb是平移参数,ψ(t)\psi^*(t)表示母小波函数的共轭复数。

离散小波变换(Discrete Wavelet Transform, DWT)在离散时间点进行,公式为:

Wj,k=nx[n]ψj,k[n]W_{j,k} = \sum_{n} x[n] \psi_{j,k}^*[n]

其中, ψj,k[n]=2j/2ψ(2jnk)\psi_{j,k}[n] = 2^{-j/2} \psi(2^{-j}n - k)是离散小波基函数, jj 是尺度参数, kk 是平移参数。

阈值处理

对得到的小波系数进行阈值处理,常用的阈值方法有硬阈值(Hard Thresholding)和软阈值(Soft Thresholding)。

  1. 硬阈值

image.png

  1. 软阈值

image.png

其中, λ\lambda 是阈值参数,通常根据噪声的标准差和信号的统计特性来选择。

逆小波变换

对阈值处理后的小波系数进行逆小波变换,重构降噪后的信号。逆小波变换(Inverse Wavelet Transform, IWT)的公式为:

x(t)=0Wx(a,b)ψa,b(t)dadba2x(t) = \int_{-\infty}^{\infty} \int_{0}^{\infty} W_x(a, b) \psi_{a,b}(t) \frac{da \, db}{a^2}

对于离散小波变换,逆变换为: x[n]=jkWj,kψj,k[n]x[n] = \sum_{j} \sum_{k} W_{j,k} \psi_{j,k}[n]

补充说明

假设含噪语音信号 y(t)y(t) 可以表示为纯净语音信号s(t)s(t)和噪声 n(t)n(t) 的叠加:y(t)=s(t)+n(t)y(t) = s(t) + n(t)

对含噪语音信号 y(t)y(t)进行小波变换,得到小波系数 Wy(a,b)W_y(a, b)

Wy(a,b)=Ws(a,b)+Wn(a,b)W_y(a, b) = W_s(a, b) + W_n(a, b)

根据小波变换的线性性质,信号的分解和重构公式为:

y(t)=j,kWy,j,kψj,k(t)y(t) = \sum_{j,k} W_{y,j,k} \psi_{j,k}(t)

对小波系数 Wy(a,b)W_y(a, b) 进行阈值处理,得到估计的纯净信号的小波系数 W^s(a,b)\hat{W}_s(a, b)

W^s(a,b)=η(Wy(a,b),λ)\hat{W}_s(a, b) = \eta(W_y(a, b), \lambda)

其中, η\eta表示阈值函数, λ\lambda 为阈值参数。

通过逆小波变换,将处理后的小波系数 W^s(a,b)\hat{W}_s(a, b) 重构回时域,得到降噪后的信号 s^(t)\hat{s}(t)

s^(t)=j,kW^s,j,kψj,k(t)\hat{s}(t) = \sum_{j,k} \hat{W}_{s,j,k} \psi_{j,k}(t)

小波降噪利用小波变换将信号分解到不同的尺度上,通过对小波系数进行阈值处理,有效地去除了噪声,并通过逆小波变换重构出降噪后的信号。小波降噪的方法具有很好的时频局部化特性,能够在保留信号细节的同时,有效地去除噪声。

经验模态分解(Empirical Mode Decomposition,简称 EMD)

经验模态分解(Empirical Mode Decomposition,简称 EMD)是一种自适应的信号处理方法,特别适用于处理非线性和非平稳信号。EMD通过分解信号为一组固有模态函数(Intrinsic Mode Functions,简称 IMFs)和一个残余信号,使得每个IMF都具有特定的频率特性。以下是EMD的详细介绍和数学推导。

EMD的基本原理

EMD的核心思想是将复杂信号分解为若干个具有不同频率特性的IMF。每个IMF满足两个条件:

  1. 在整个数据范围内,极值点的数目(包括极大值和极小值)和过零点的数目之差最多为1。
  2. 在任意一点上,IMF的局部平均值为零。

设原始信号为 x(t)x(t),IMF序列为 ci(t)c_i(t),残余信号为 rn(t)r_n(t),则有: x(t)=i=1nci(t)+rn(t)x(t) = \sum_{i=1}^{n} c_i(t) + r_n(t) 具体步骤如下:

步骤1:确定极值点

对原始信号 x(t)x(t) 确定所有的局部极大值和极小值。

步骤2:构造包络线

通过三次样条插值法连接所有的局部极大值,得到上包络线 emax(t)e_{\max}(t)。同理,通过连接所有的局部极小值,得到下包络线 emin(t)e_{\min}(t)

步骤3:计算局部平均值

计算上包络线和下包络线的平均值:

m1(t)=emax(t)+emin(t)2m_1(t) = \frac{e_{\max}(t) + e_{\min}(t)}{2}

步骤4:提取第一模态

将局部平均值从原始信号中减去,得到初步的模态函数:

h1(t)=x(t)m1(t)h_1(t) = x(t) - m_1(t)

步骤5:迭代细化

h1(t)h_1(t)进行重复上述步骤,直到满足IMF条件为止,得到第一个IMF:

c1(t)=h1(t)c_1(t) = h_1(t)

步骤6:去除第一个IMF

从原始信号中减去第一个IMF,得到剩余信号:

r1(t)=x(t)c1(t)r_1(t) = x(t) - c_1(t)

步骤7:重复迭代

对剩余信号 r1(t)r_1(t) 重复上述步骤,直到剩余信号变为单调函数或者不再包含有意义的振荡成分为止,得到所有的IMF和一个残余信号。

EMD的优势

EMD是一种自适应的信号分解方法,无需预设基函数,能够自然地适应信号的局部特性,非常适合处理非线性和非平稳信号。每个IMF具有明确的物理意义,可以对应于信号的不同频率成分。

示例

为了更好地理解EMD,我们可以通过一个简单的示例来说明。例如,假设我们有一个包含多个频率成分的复合信号 x(t)x(t),应用EMD后,我们可以将其分解为多个IMF,每个IMF代表信号中的一种频率成分:

假设信号

x(t)=cos(2πt)+0.5cos(4πt)+0.25cos(8πt)x(t) = \cos(2\pi t) + 0.5\cos(4\pi t) + 0.25\cos(8\pi t)

通过EMD分解后,我们可能得到以下IMF:

c1(t)0.25cos(8πt)c_1(t) \approx 0.25\cos(8\pi t)

c2(t)0.5cos(4πt)c_2(t) \approx 0.5\cos(4\pi t)

c3(t)cos(2πt)c_3(t) \approx \cos(2\pi t)

r3(t)0r_3(t) \approx 0

这种分解方式使得我们可以更清晰地观察和分析信号的不同频率成分。