我是靠谱客的博主 端庄乌冬面,最近开发中收集的这篇文章主要介绍基于Mask的语音分离1. 时频掩蔽2. 语音分离,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文代码请见:https://github.com/Ryuk17/SpeechAlgorithms


目录

1. 时频掩蔽

2. 语音分离


​Mask这个单词有的地方翻译成掩蔽有的地方翻译成掩膜,我个人倾向于掩蔽这个翻译,本文就用掩蔽来作为Mask的翻译。

1. 时频掩蔽

我们都知道语音信号可以通过时域波形或者频域的各种频谱来表示,此外语谱图可以同时展示时域和频域的信息,因此被广泛应用,如下图所示。

现在我们假设有两段语音信号,一段是音乐信号,另一段是噪声,它们混合在一起了,时域波形和对应的语谱图分别如下图所示:

 

 

如果我们想将音乐信号从混合信号中抽离(这个过程叫语音分离)在时域方面是不容易做到的。现在我们从频域角度入手去解决语音分离问题。首先我们提出两个假设:

  1.  我们假设信号能量稀疏的,即对于大多数时频区域它的能量为零,如下图所示,我们可以看到大多数区域的值,即频域能量为0。

     

  2.  我们假设信号能量不相交的,即它们的时频区域不重叠或者重叠较少,如下图所示,我们可以看到时频区域不为0的地方不重叠或者有较少部分的重叠。

 

基于以上两点假设,我们就可以分离我们想要的信号和噪声信号。给可能属于一个信号源的区域分配掩码为1,其余的分配掩码0,如下图所示。

 

我们通过0和1的二值掩码然后乘以混合信号的语谱图就可以得到我们想要喜好的语谱图了,如下图所示。

但是,这里存在一个问题,我们无法从语谱图中还原语音信号。为了解决这一问题,我们首先还原所有的频率分量,即对二值掩码做个镜像后拼接。假设我们计算语谱图时使用的是512点SFTF,我们一般去前257点进行分析和处理,在这里我们将前257点的后255做镜像,然后拼接在一起得到512点频率分量,如下图所示。

然后根据这个还原语音信号。这里指的一提的是,在进行STFT后的相位信息要保存,用于还原语音信号。

 

接下来介绍如何计算掩蔽值,掩蔽值计算方法有许多,但一般来说有两种常用的计算方法,分别为理想二值掩蔽(Ideal Binary Mask, IBM)和理想比值掩蔽(Ideal Ratio Mask, IRM)。IBM的计算公式如下:

其中LC为阈值,一般取0,SNR计算公式为:

IRM为一个[0-1]的值,计算公式为:

其中β为可调节尺度因子,一般取0.5。

 

2. 语音分离

我们使用上面的方法来尝试对混合语音进行分离,我们首先找两段语音,将它们混合,如下图所示。

 

然后看下混合后的语谱图

然后计算掩蔽值

将掩蔽值与语谱图对位相乘后,根据ISTFT恢复被分离的语音信号。


                                                                          语音信号处理交流群:  652292630         

                                     

 

最后

以上就是端庄乌冬面为你收集整理的基于Mask的语音分离1. 时频掩蔽2. 语音分离的全部内容,希望文章能够帮你解决基于Mask的语音分离1. 时频掩蔽2. 语音分离所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部