语音降噪初探——谱减法

3,884 阅读4分钟

目录

1. 谱减法原理

2. 谱减法的实现

3. Berouti谱减法的实现

语音降噪是语音信号处理的初始步骤,目前已经有很多成熟的算法。而谱减法作为经典的降噪算法实现简单,运行处理快,被广泛的应用在语音降噪领域。

1. 谱减法原理

谱减法顾名思义,就是用带噪信号的频谱减去噪声信号的频谱(幅度谱和功率谱均可)。谱减法基于一个简单的假设:假设语音中的噪声只有加性噪声,只要将带噪语音谱减去噪声谱,就可以得到纯净语音,这么做的前提是噪声信号是平稳的或者缓慢变化的。提出这个假设就是基于短时谱(25ms),就是频谱在短时间内是平稳不变的。假设带噪信号y由纯净信号x和加性噪声d组成,那么纯净信号的功率谱可以通过下式获得:

谱减法的实现的关键在于对噪声谱的估计,一般认为语音信号的前几帧没有语音活动,因此前几帧为纯净的噪声信号,因此使用语音信号的前几帧对噪声谱进行估计。

2. 谱减法的实现

简单的谱减法实现包含以下步骤:

  1. 根据语音信号前几帧计算平均噪声谱作为噪声谱,一般取前5帧

  2. 对语音进行分帧,对每一帧进行stft,然后使用信号谱减去噪声谱

  3. 如果出现负值,将其置为0

  4. 对减去噪声谱的信号进行istft得到时域信号

  5. 根据语音分帧帧长和帧移长度重组时域信号

在谱减法算法中如果带噪语音的幅度谱(功率谱也同此理)与估计出来的噪声谱相减出现负值时,说明对噪声出现了过估计问题,对这种现象最简单的处理就是将负值设为0,以保证非负的幅度谱。但是对负值的这种处理,会导致信号帧频谱的随机位置上出现小的,独立的峰值,称为音乐噪声。为解决音乐噪声Berouti提出了改进的方法。

3. Berouti谱减法的实现

减小音乐噪声的方法是对噪声谱使用过减技术,同时对谱减后的负值设置一个下限,而不是将它们设为0,可以将其表示为:

其中alpha(大于等于1)为过减因子,它主要影响语音谱的失真程度。Beta(大于0小于1)是谱下限参数,可以控制残留噪声的多少以及音乐噪声的大小。在谱减法过程中,beta为一个固定值,而alpha根据当前帧的信噪比进行计算。Berouti谱减法包含以下步骤:

  1. 根据语音信号前几帧计算平均噪声谱作为噪声谱,一般取前5帧

  2. 对语音进行分帧,对每一帧进行stft

  3. 计算当前帧的信噪比,然后求出过减因子alpha

  4. 根据公式(2)对信号进行处理

  5. 对减去噪声谱的信号进行istft得到时域信号

  6. 根据语音分帧帧长和帧移长度重组时域信号

最后我们看下谱减法的效果,如下图所示。可以看出Berouti提出了改进的方法要优于原始的谱减法。

原始语音波形:

原始谱减法后波形:

Berouti谱减法处理后信号波形:

关注微信公众号语音算法组,在公众号菜单栏点击More->Code即可获得代码