美文网首页语音信号处理
单通道语音增强之谱减法与维纳滤波

单通道语音增强之谱减法与维纳滤波

作者: _wjchen_ | 来源:发表于2020-01-07 23:48 被阅读0次

1. 概述

单通道语音增强比较传统的方法是谱减法和维纳滤波, 在平稳噪声的条件下,能够获得较理想的去噪效果。 《语音增强--理论与实践》[@loizou2007speech]里面各有一章详细分析了这两种模型。

假设麦克风采集到的带噪语音序列为y[n],并且噪声都是加性噪声。则带噪语音序列为无噪语音序列与噪声序列的和。 原始语音信号与噪声均可视为随机信号。

y[n] = x[n] + d[n]

常用的语音增强方法都是在频域,需要对带噪信号y[n]进行分帧、加窗、短时傅里叶变换(STFT)后,得到每一帧的频域信号,其中X,Y,D分别是干净语音、带噪信号和噪声的频域信号。

Y(\omega_{k}) = X(\omega_{k}) + D(\omega_{k})

语音增强的目标是对实际信号X(\omega_{k})的幅度和相位进行估计。但是因为相位不易估计、而且研究表明相位对去噪效果影响比较小[@wang1982unimportance],所以大部分方法都只对幅度谱进行增强,而相位则沿用带噪信号的相位。

换句话说,语音增强就是要找出一个频域的实函数H_{\omega_{k}}, 并且将这个函数与带噪信号相乘,得到干净语音的估计。这个实函数称作抑制增益(Suppression Gain)。

\hat{X}(\omega_{k}) = H(\omega_{k})|Y(\omega_{k})|e^{j\theta_{y}(k)}

下面是单通道语音增强系统主要步骤的示意图,系统目标就是估计抑制增益,而抑制增益依赖于两个核心步骤:语音检测VAD和噪声估计模块。只有准确估计噪声谱D(\omega_{k}),才有可能准确估计抑制增益。 详细的VAD和噪声估计方法不在这篇文章里面详述,具体可以看参考文献。 一种简单的想法是先估计出VAD,如过判断此帧没有语音,则更新噪声谱,否则就沿用上一帧的噪声谱。

Fig.1 - 单通道语音增强统计模型流程图

综上,语音增强的典型流程就是:

  1. 对带噪语音y[n]分帧, 每一帧进行DFT得到Y(\omega_{k})

  2. 利用Y(\omega_{k})进行VAD检测和噪声估计。

  3. 计算抑制增益H_{k}

  4. 抑制增益H_{k}与带噪信号谱相乘,得到纯净语音谱\hat{X}(\omega_{k})

  5. \hat{X}(\omega_{k})进行IDFT,得到纯净语音序列的估计x[n]

噪声估计模块可以估计噪声功率,也可以估计信噪比,避免信号幅度变化带来的误差。
定义后验信噪比:

\gamma_k = \frac{P_{yy}}{P_{dd}}

定义先验信噪比:

\xi_k = \frac{P_{xx}}{P_{dd}}

2. 谱减法 Spectral Subtraction

谱减法是最直观的去噪声思想,就是带噪信号减去噪声的频谱,就等于干净信号的频谱。估计信号频谱的表达式如下,其中\hat{D}(\omega_{k})应是噪声估计模块得到的噪声频谱。

\hat{X}(\omega_{k}) = Y(\omega_{k}) - \hat{D}(\omega_{k})

传统的语音增强算法都不恢复准确的相位,而是沿用测量信号Y(\omega_{k})的相位,所以实际谱减法的公式为幅度谱相减:

\hat{X}(\omega_{k}) = \left[|Y(\omega_{k})| - |\hat{D}(\omega_{k})|\right]e^{j\phi_y}

其中\hat{D}(\omega_{k})是估计的噪声幅值。 最终增益函数为

H(\omega_{k}) = \frac{|Y(\omega_{k})| - |\hat{D}(\omega_{k})|}{|Y(\omega_{k})|}

从幅度谱角度做谱减,是架设了测量信号和噪声的相位一样,引入了较大失真。 从功率谱角度做谱减,是更常用的方法。

|Y(\omega_{k})|^2 = |X(\omega_{k})|^2 + |D(\omega_{k})|^2 + X(\omega_{k})^*D(\omega_{k}) + X(\omega_{k})D(\omega_{k})^*

假设语音信号与噪声不相关,于是得到估计的信号功率谱是测量信号功率谱减去估计的噪声功率谱。

|X(\omega_{k})|^2 = |Y(\omega_{k})|^2 - |D(\omega_{k})|^2 P_{xx}(\omega_{k}) = P_{yy}(\omega_{k}) - P_{dd}(\omega_{k})

因此抑制增益函数即为:

H(\omega_{k}) = \sqrt{\frac{P_{yy}(\omega_{k}) - P_{dd}(\omega_{k})}{P_{yy}(\omega_{k})}}

用后验信噪比表示:

H(\omega_{k}) = \sqrt{\frac{\gamma_k - 1}{\gamma_k}}

用先验信噪比表示:

H(\omega_{k}) = \sqrt{\frac{\xi_k}{\xi_k+1}}

    def spec_sub_gain(parameters=None):
        ksi = parameters['ksi']
        gain = np.sqrt( ksi / (1+ ksi)) # gain function
        return gain

3.1 维纳滤波 Wiener Filtering

维纳滤波的思想也很直接,就是将带噪信号经过线性滤波器变换来逼近原信号,并求均方误差最小时的线性滤波器参数。 维纳滤波可以是在时域推导,也可以在频域推导。如第一部分所介绍,语音增强系统通常在频域处理信号,所以下面只讨论频域维纳滤波。

Fig.2 - 线性滤波器进行语音增强

频域上,估计信号即为线性滤波器与输入信号的乘积。可见这个滤波器H(\omega_{k})正是我们要求的抑制增益函数。维纳滤波语音增强的目标就是寻找系数为实数的线性滤波器,使得滤波偶信号与原干净语音信号之间的均方误差最小。

\hat{X}(\omega_{k}) = H(\omega_{k})Y(\omega_{k})

均方误差为:

E\left[|e(\omega_{k})|^2\right] = E\left\{\left[X(\omega_{k}) - H(\omega_{k})Y(\omega_{k})\right]\left[X(\omega_{k}) - H(\omega_{k})Y(\omega_{k})\right]^*\right\}

这是一个优化问题,目标是求使得均方误差最小的参数H

H(\omega_{k}) =\mathop{\arg\min}_{H(\omega_{k})} E\left[|e(\omega_{k})|^2\right]

展开均方误差:

\begin{aligned} E\left[|E(\omega_{k})|^2\right] = &E\left[|X(\omega_{k})|^2\right] + |H(\omega_{k})|^2E\left[|Y(\omega_{k})|^2\right]\\& - H(\omega_{k})E\left[Y(\omega_{k})X(\omega_{k})^*\right] - H(\omega_{k})^*E\left[X(\omega_{k})Y(\omega_{k})^*\right] \end{aligned}

H(\omega_{k})求极值:

\frac{\partial E\left[|E(\omega_{k})|^2\right]}{\partial H(\omega_{k})} = H(\omega_{k})^*E\left[|Y(\omega_{k})|^2\right] - E\left[Y(\omega_{k})X(\omega_{k})^*\right]

得到极值点:

H(\omega_{k})^* = \frac{E\left[Y(\omega_{k})X(\omega_{k})^*\right]}{E\left[|Y(\omega_{k})|^2\right]}

求共轭后得到H(\omega_{k})

H(\omega_{k}) = \frac{E \left[X(\omega_{k}) Y(\omega_{k})^*\right]} {E \left[|Y(\omega_{k})|^2\right]} = \frac{P_{xy}}{P_{yy}}

P_{xy}是互功率,X与D不相关, E\left[X(\omega_{k})D(\omega_{k})^*\right]=0, 那么

\begin{aligned} P_{xy} &= E\left\{X(\omega_{k})\left[X(\omega_{k})+D(\omega_{k})\right]^*\right\}\\ &= E\left[|X(\omega_{k})|^2\right] + E\left[X(\omega_{k})D(\omega_{k})^*\right] \\ &= P_{xx} \end{aligned}

带噪信号功率P_{yy}也可以展开为语音信号和噪声功率之和。

\begin{aligned} P_{yy} &= E \left\{\left[X(\omega_{k})+D(\omega_{k})\right]\left[X(\omega_{k})+D(\omega_{k})\right]^*\right\}\\ &= E\left[|X(\omega_{k})|^2\right] + E\left[|D(\omega_{k})|^2\right] \\ &= P_{xx} + P_{dd} \end{aligned}

用先验信噪比表示

H(\omega_{k}) = \frac{P_{xx}}{P_{yy}} = \frac{P_{xx}}{P_{xx} +P_{dd} } = \frac{\xi_k}{\xi_k + 1 }

用后验信噪比表示:

H(\omega_{k}) = \frac{P_{xx}}{P_{yy}} = \frac{P_{yy}-P_{dd}}{P_{yy} } = \frac{1-\gamma_k}{\gamma_k }

    def wiener_gain(parameters=None):
        ksi = parameters['ksi']
        gain = ksi / (1+ ksi) # gain function
        return gain

参考文献

[1] P. C. Loizou, Speech enhancement: theory and practice. CRC press, 2007.

[2] D.Wang and J. Lim, The unimportance of phase in speech enhancement," IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 30, no. 4, pp. 679-681, 1982.

相关文章

  • 单通道语音增强之谱减法与维纳滤波

    1. 概述 单通道语音增强比较传统的方法是谱减法和维纳滤波, 在平稳噪声的条件下,能够获得较理想的去噪效果。 《语...

  • 单通道语音增强之综述

    1. 概述 单通道语音增强是语音信号处理中广泛研究的课题,主要作为前端去噪模块应用在提升音质、语音通信、辅助听觉、...

  • 单通道语音增强之参考书

    推荐几本适合于学习单通道语音增强的参考书, 这几本书主要是针对传统信号处理方法,因为深度学习的方法是近几年才应用于...

  • 单通道语音增强之统计信号模型

    1. 信号估计理论简述 信号估计理论是现代统计处理的基础课题[@ZhangXianDa2002ModernSP],...

  • 谱减法(Spectral Subtraction)

    本文简要探讨了语音信号的基本特性,并介绍了谱减法的基本原理,同时基于Matlab实现了原始谱减法及其一种改进版。最...

  • 如何还原模糊的车牌----维纳反卷积滤波算法

    Wiener deconv opencv学习笔记---维纳反卷积滤波算法演示 ,算法参考[维基百科:https:/...

  • 四 图像滤波

    图像滤波 图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者...

  • [图像增强][空间滤波]1.噪声消除法

    本篇主要介绍几种常见的噪声消除法:模糊,高斯滤波,盒滤波,中值滤波。 1. 基本原理 邻域 根据图像中像素与像素之...

  • 沉睡的维纳斯

    沉睡的维纳斯 [中国]胡昆彬 裸女,沉睡的维纳斯 古希腊的爱神与女神 生命与灵魂,诱惑和欲望 维纳斯的残缺之美 在...

  • 计算机视觉实战(三)阈值与平滑处理

      本文主要介绍了图像阈值分割的一些基本操作以及一些滤波的函数。 图像阈值 src: 输入图,只能输入单通道图像,...

网友评论

    本文标题:单通道语音增强之谱减法与维纳滤波

    本文链接:https://www.haomeiwen.com/subject/kqhjactx.html