基于Mask的音频降噪

基于Mask的音频降噪

参考代码:Noise reduction using spectral gating in python

算法步骤:

  • 对音频信号进行FFT得到语谱图
  • 用Mask算法对语谱图像素进行降噪处理
  • 进行IFT得到恢复的音频信号

语谱图
基于Mask的音频降噪_第1张图片
选取一个音频信号进行分析和处理,可以看到音频信号的语谱图上有很多白色或接近白色的像素。白色像素表示信号的平均功率或其他统计特性的值为0或者接近0.一般在加性高斯白噪声的情况下,白色像素代表的区域是噪声。

滤波器
基于Mask的音频降噪_第2张图片
如频谱图所示,信号在8kHz处有一个需要被去除的噪声,可以使用一个低通滤波器进行滤波,不影响其他频谱,衰减8kHz处的频谱,得到以下频谱图。
基于Mask的音频降噪_第3张图片
同理,我们如果要通过语谱图达到降噪效果,需要做的就是不影响彩色的有效信号像素,衰减白色或接近白色的噪声像素。就像滤波器把频谱图低频信号保留,抠出高频噪声扔掉,语谱图则是保留彩色像素,抠出浅色像素扔掉。像是一个二维滤波器。

Mask
Mask是图像处理里比较常用的一种抠图算法。简要原理如下图所示(图片有参考)。
基于Mask的音频降噪_第4张图片

  • 0:Mask
  • 1:Copy
    可见当mask bitmap区域是0的时候,原图相应区域被操作成为0;mask bitmap区域是1的时候,原图相应区域原封不动被复制。
    达到的效果也就是抠出了原图相应mask bitmap取值1的那些区域。
    *在音频处理中,mask由信号FFT和阈值比较得到。阈值由信号的统计特性和算法所期望的灵敏度决定。如下图所示,是该音频信号的阈值分析。
    基于Mask的音频降噪_第5张图片

平滑处理
如图所示,用于平滑处理mask的滤波器。
基于Mask的音频降噪_第6张图片
音频降噪的mask的值不只是0和1,通过平滑处理之后取值范围在[0,1]区间。这样恢复的音频更流畅。
基于Mask的音频降噪_第7张图片

信号恢复
通过原来的语谱图和mask bitmap做运算得到masked map如图所示。可见相比于原来的语谱图,大量浅色像素被掩蔽。
基于Mask的音频降噪_第8张图片
经过恢复得到恢复后信号语谱图。
基于Mask的音频降噪_第9张图片
做逆运算即可得到信号的时域情况,对比如下。
1.原始音频
基于Mask的音频降噪_第10张图片
2.加噪声后音频
基于Mask的音频降噪_第11张图片
3.降噪恢复音频
基于Mask的音频降噪_第12张图片
经过播放.WAV文件,加噪信号有明显的噪声干扰,降噪信号几乎没有噪声,恢复效果良好。对于加性噪声,mask降噪具有很不错的效果。

你可能感兴趣的:(音视频,图像处理,python)