语音增强
1.1语音增强概况语音增强,英文名:SpeechEnhancement,其本质就是语音降噪,换句话说,日常生活中,麦克风采集的语音通常是带有不同噪声的“污染”语音,语音增强的主要目的就是从这些被“污染”的带噪语音中恢复出我们想要的干净语音。
语音增强涉及的应用领域十分广泛,包括语音通话、电话会议、场景录音、军事窃听、助听器设备和语音识别设备等,并成为许多语音编码和识别系统的预处理模块。举几个简单的例子,在手机的语音助手中,例如苹果的Siri、微软的小娜属于这其中的佼佼者,他们在近距离(一般工作距离小于1米)、无噪声的环境中进行语音识别,有着较高的语音识别准确率,但是如果我们的声学场景变得更加复杂,比如展会,街道等场景中,噪声的影响会大大降低他们的语音识别准确率,因此进行语音识别的前端降噪显得十分重要。此外,在一些助听器设备中,语音增强技术也有其应用。通常的助听器,只是实现一个语音的基本放大,复杂一些的会进行声压级压缩以实现对患者听觉范围的补偿,但是如果听觉场景比较复杂,患者听到的语音中不仅包含了放大后的语音也包含了很多噪声,时间一长势必会对患者的听觉系统造成二次损害,因此高端的数字助听器设备中,语音降噪也成为了他们不容忽视的一个重要方面。
语音增强作为数字信号处理的一个分支,已经有了50多年的历史。虽然语音增强技术看似只是一个简单的纯净语音恢复过程,但是其中涉及的知识和算法是广泛而又多样的。在学术界,该领域的研究可以说是“百花齐放,百家争鸣”,既有传统的数字信号处理的方法,又有近几年刚刚兴起的深度学习的方法。经过几十年的发展,学术界也涌现出来了不少大牛,像RainerMartin、YarivEphraim、IsraelCohen、PhillipLoizou以及SharonGannot等,这几位前辈在数字信号处理领域的语音增强方法中,起到的十分重要的推动作用。然而,在语音增强的另一个新兴领域:深度学习语音增强,虽然是后起之秀,但是伴随着硬件技术的升级,该技术在工程界得以落地,也使其在语音增强领域站住了脚跟。当然,该技术的发展与“深度学习之父”GeoffreyHinton在神经网络结构上取得的重大成果是分不开的。在当今学术界,如果说在该领域,真正占有一席之地的,我个人认为,当属俄亥俄州立大学的汪德亮教授,他的实验室和学生,对深度学习语音增强这一方法的发展起到了十分重要的推动作用。
1.2语音增强方法分类对于语音增强方法的分类,可以按照其运用方法的不同进行分类,于是便可以分成如下两大类:数字信号处理的语音增强方法和基于机器学习的语音增强方法。其中,数字信号处理的语音增强方法是主流方法,历史悠久,且拥有很深的技术奠基,是目前工程界进行语音降噪的主要思路。而在传统的数字信号处理的方法中,按照其通道数目的不同,又可以进一步划分为:单通道语音增强方法和麦克风阵列的语音增强方法。
在传统的单通道语音增强方法中,对数字信号处理的知识运用较多,时域和频域的方法都有,以频域处理为主,其中基于短时谱估计的语音增强方法是目前应用最为广泛的语音增强方法,具体的算法可以分为以下三大类:谱减法、维纳滤波法和基于统计模型的方法。除了上述提到的短时谱方法,在单通道的语音增强领域还有一种自适应滤波的方法,但是其需要事先知道噪声或者纯净语音,然后利用随机梯度下降的方式进行最优解的逼近,而在大多数情况下,噪声或者纯净语音等先验知识是无法获得的,因此大大限制了自适应滤波方法的应用,但是该方法在手机通话中的降噪应用比较广泛,通常手机中都会专门用一个降噪麦克风来收取环境中的噪音,以此作为参考输入来实现降噪。此外,在单通道的方法之中,还有一种基于子空间的方法也备受关注,但由于其运算度相对较高,所以在工程中的应用并不算广泛。近些年以来,小波变换的方法发展迅猛,它克服了短时傅里叶变换固定分辨率的缺点,可以获得信号在不同分别率上的信息,在近几年里得到了广泛的应用。
而在麦克风阵列的语音增强方法中,由于利用了更多的麦克风,考虑了信号的空间信息,因此在抑制特定方向的干扰、进行语音分离等方面,比单通道的语音增强更有优势。麦克风阵列的语音增强方法目前在智能音箱、机器人等领域应用较多,利用其多麦克风的优势,这类产品可以实现在远场和更复杂的声学环境中进行语音增强。主流的麦克风阵列方法有:固定波束形成的方法和自适应波束形成的方法。固定波束形成的应用环境十分受限,但运算复杂度较低,所以一般应用于声学场景固定不变的环境中;而自适应波束形成的方法则表现出更好的鲁棒性,当然这也是以牺牲运算复杂度为代价,目前自适应波束形成方法主要有两大阵营:LCMV结构和GSC结构,如今的麦克风阵列语音增强算法基本上都是基于这两种结构进行地改进和优化。
基于机器学习的语音增强方法算是奇巧之技,不同于传统的数字信号处理方法,它借鉴机器学习的思路,通过有监督的训练实现语音增强。该领域的算法算是刚刚起步,满打满算也没有二十年的历史,但是“存在即合理”,它之所以能够在语音增强领域占有一席之地,也有其优势所在,例如,在数字信号处理领域的一些比较棘手的问题,比如瞬时噪声的消除,这类方法另辟蹊径,可以较容易地将其解决,因此,这类算法也许会成为未来人工智能时代的语音增强主流方向。如今,运用机器学习的语音增强方法不多,大致梳理一下,可以分成以下几类:基于隐马尔科夫模型的语音增强、基于非负矩阵分解的语音增强、基于浅层神经网络的语音增强和基于深层神经网络的语音增强。其中,基于深度神经网络的语音增强方法,也就是深度学习语音增强,利用深度神经网络结构强大的非线性映射能力,通过大量数据的训练,训练出一个非线性模型进行语音增强,取得了十分不错的效果。此外,该类方法在工程界也刚刚实现落地,华为今年发布的mate10手机,已成功地将该技术应用到了复杂声学环境中的语音通话中,也算是开辟了深度学习应用于语音增强的先河,未来该何去何从,仍需要我们这一代人的不懈努力。
1.3语音增强入门语音增强的方向较多,各方向领域的大牛不同,涉及的知识也不太一样,因此分别给出了不同的语音增强研究方向的大牛和书籍。
传统单通道的语音增强方法:
YarivEphraim主页:http://ece.gmu.edu/~yephraim/RainerMartin主页:http://www.ruhr-uni-bochum.de/ika/mitarbeiter/martin_publik.htm#2017IsrealCohen主页:http://webee.technion.ac.il/people/IsraelCohen/PhilipLoizou主页:http://ecs.utdallas.edu/loizou/推荐书籍:《语音增强理论与实践》(Loizou)麦克风阵列的语音增强方法:
SharonGannot主页:http://www.eng.biu.ac.il/gannot/JacobBenesty主页:http://externe.emt.inrs.ca/users/benesty/推荐书籍:《WidebandBeamformingConceptsandTechniques》(WeiLiu)基于深度学习的语音增强方法:
汪德亮主页:http://web.cse.ohio-state.edu/~wang.77/index.html推荐学习:吴恩达深度学习在线课程:http://mooc.study.163.com/smartSpec/detail/1001319001.htm博士论文:《基于深层神经网络的语音增强方法研究》(徐勇2015)HMM在语音识别中的应用
HMM处理三种问题,我理解为三种功能:-给出O(可观测序列o1o2o3…ot),求P(O|hmm)-给出O,求出使P(O,H|hmm)最大的H(H为与O对应的隐藏层时序序列)-给出O,求出使P(O|hmm)最大的hmm(参数调整)
HMM应用于孤立词语音识别流程描述:
(训练:功能三)1.给出a,b,c三个词的音频库(Wa,Wb,Wc),对音频库的所有样本进行特征提取。(这里以mfcc为例),对每一段音频w先分成若干帧[w1,w2,w3…wn],对每一帧提取mfcc,获得[mfcc1,mfcc2,mffcc3…mfcc_n]。2.对这些mfcc进行聚类处理(比如k-means),获得M个类(类中心),每个类对应一个HMM的可观测层,同时将所有的mfcc进行分类,转化为可观测层的状态,该mfcc归到哪个类就对应哪个可观测状态。(矢量量化)对每一段音频w的mfcc串[mfcc1,mfcc2,mffcc3…mfcc_n],就会获得它的可观测序列[o1,o2,o3…on]3.从而获取了词汇a,b,c的所有O序列,记为Oa,Ob,Oc;(Ox表示词汇x的所有样本的可观测层序列向量组成的矩阵)4.基于上述的HMM的第三个功能,以Oa,Ob,Oc作为条件,分别获得三个HMM,记为HMMa,HMMb,HMMc;
(识别:功能一)
给出一段孤立词x的音频,对他提取mfcc串,对提取出的mfcc串使用上面聚类的中心进行分类,进而转化为可观测序列记为ox;基于HMM的第一个功能,将ox输入到HMMa,HMMb,HMMc中获得三个概率,记为Pa,Pb,Pc;比较Pa,Pb,Pc,获取最大的Py(y=a或b或c)x=y;HMM+GMM上述孤立词识别使用的是离散型的HMM,即可观测层的状态个数是有限的(M个中心,所以是M个),因此对于mfcc这种连续的高维特征,必须要做矢量量化,但也因此引入了量化误差,所以提出使用连续性HMM。首先说明一个概念,其实任何一个隐层状态到可观测状态的概率向量,都可以看成是一个概率分布。所以连续型的HMM把每个隐层状态到可观测层的概率分布都看成是一个GMM分布。
bj(X)=∑m=1Mwjm∗N(X|μjm,Σjm)其中N表示高维正态分布(高斯分布)。X就直接使用高维特征,比如mfcc。但是这样带来的问题是,大量的参数引入,使得计算的复杂量很高,同时在数据量不足时,发挥不出优势;所以又提出了半连续型HMM,即:
bj(X)=∑m=1Mwjm∗N(X|μm,Σm)也就是所有的bj(X)分布共享一套高斯函数,只是分歧系数w有所不同。离散HMM简单的代码cpp实现:https://github.com/yinglang/HMMInLab/tree/master/myHMM