语音识别之前端处理及相关算法

前言

       语音识别是模式识别的一个分支,又从属于信号处理科学领域,同时与语音学、语言学、数理统计及神经生物学等学科有非常密切的关系。语音识别的目的就是让机器“听懂”人类口述的语言,包括了两方面的含义:其一是逐字逐句听懂非转化成书面语言文字;其二是对口述语言中所包含的要求或询问加以理解,做出正确响应,而不拘泥于所有词的正确转换。

  自动语音识别技术有三个基本原理:首先语音信号中的语言信息是按照短时幅度谱的时间变化模式来编码;其次语音是可以阅读的,即它的声学信号可以在不考虑说话人试图传达的信息内容的情况下用数十个具有区别性的、离散的符号来表示;第三语音交互是一个认知过程,因而不能与语言的语法、语义和语用结构割裂开来。

        语音前端处理是指在特征提取之前,先对原始语音进行处理,部分消除噪声和不同说话人带来的影响,使处理后的信号更能反映语音的本质特征。最常用的前端处理有端点检测和语音增强。端点检测是指在语音信号中将语音和非语音信号时段区分开来,准确地确定出语音信号的起始点。经过端点检测后,后续处理就可以只对语音信号进行,这对提高模型的精确度和识别正确率有重要作用。语音增强的主要任务就是消除环境噪声对语音的影响。目前通用的方法是采用维纳滤波,该方法在噪声较大的情况下效果好于其它滤波器。


一、主要问题:

⒈对自然语言的识别和理解。首先必须将连续的讲话分解为词、音素等单位,其次要建立一个理解语义的规则。
语音信息量大语音模式不仅对不同的说话人不同,对同一说话人也是不同的,例如,一个说话人在随意说话和认真说话时的语音信息是不同的。一个人的说话方式随着时间变化。
语音的模糊性。说话者在讲话时,不同的词可能听起来是相似的。这在英语和汉语中常见。
⒋单个字母或词、字的语音特性受上下文的影响,以致改变了重音、音调、音量和发音速度等。
环境噪声和干扰对语音识别有严重影响,致使识别率低。

以上几个问题有一部分的关键在于声音的采集,在其中语音前端处理模块扮演着重要角色。通过前端处理模块在特征提取之前,先对原始语音进行处理,部分消除噪声和不同说话人带来的影响,抑制各种干扰,使待识别的语音更干净更能反映语音的本质特征。语音前端处理算法在语音通信和语音修复中也有着广泛的应用。
语音处前端处理主要会处理这几个方面接收到的声信号在时间序列可分为三部分:直达声、早期反射声(经过一次、两次的反射,能量较大、时延较短的反射声) 、混响声(经过多次反射以后到达的数目众多、能量较小、密集的反射声群),前期反射声是指未达到稳定状态时的反射声,也就是在直达声之后混响开始衰减之前的这段时间差内的反射声,以下是一些声音的来源
1.Echo:远端扬声器播放的声音回传给麦克。
2.Diffuse Noise:无向噪声的干扰。
3.Reflected Sound:声音通过墙壁反射,造成混响干扰。
4.Interference:其他方向的干扰源。
5.Target Speech:目标方向声音。

由于噪声来源众多,在不同的应用场合其特性各不相同,增加了语音增强算法的复杂性。而且语音增强不仅仅是一个数字信号处理技术方面的问题,还涉及人的听觉感知和语音学,是一门很复杂的技术。要想理想地设计出一种算法来消除所有的噪声是不现实的,只能针对不同的噪声情况,采取不同的语音增强算法。



语音前端处理模块跟语音交互系统的关系:橙色部分表示多通道处理模块,蓝色部分表示单通道处理模块,红色部分表示后端识别合成等模块。麦克风阵列采集的语音首先利用参考源对各通道的信号进行回波消除,然后确定声源的方向信息,进而通过波束形成算法来增强目标方向的声音,再通过混响消除方法抑制混响;需要强调的是可以先进行多通道混响消除再进行波束形成,也可以先进行波束形成再进行单通道混响消除。经过上述处理后的单路语音进行后置滤波消除残留的音乐噪声,然后通过自动增益算法调节各个频带的能量后最为前端处理的输出,将输出的音频传递给后端进行识别和理解。

对于远场语音识别,更多的是采用双麦克,甚至是多麦克进行声音采集,这是由于单麦克远距离拾音能力有限,而麦克风阵列可以有效的增强目标方向声音。上图为麦克风阵列采集语音的示意图,各个通道的信号通过滤波器加权融合,Y为多通道融合增强后的语音,可以将其分解为两部分:目标语音成分和残留噪声成分;残留噪声成分可以通过后置滤波算法进一步处理,也可以通过改进麦克风阵列波束形成算法使这一成分得到有效抑制。

二、语音采集的过程与相关算法


麦克风阵列采集的语音首先利用参考源对各通道的信号进行回波消除,然后确定声源的方向信息,进而通过波束形成算法来增强目标方向的声音,再通过混响消除方法抑制混响;需要强调的是可以先进行多通道混响消除再进行波束形成,也可以先进行波束形成再进行单通道混响消除。经过上述处理后的单路语音进行后置滤波消除残留的音乐噪声,然后通过自动增益算法调节各个频带的能量后最为前端处理的输出,将输出的音频传递给后端进行识别和理解。

麦克风阵列
利用麦克风阵列拾音也就是说由一定数目的声学传感器组成,用来对声场的空间特性进行采样并处理的系统。是将一定数目的麦克风接受到的信号耦合为一个信号。即在两个麦克风的正前方形成一个接收区域,进而削减两个麦克风侧向的收音效果。在频率响应中也可以根据时域中波束形成与空间滤波器相仿的应用,分析出接收到语音信号音源的方向以及其变化。而这些分析都可以由极坐标图以波束形式来显示语音信号的强度与角度

 

这个公式表示第j个麦克风接收到语音信号时域上的数学表达式,x表示安静语音,h表示房间响应函数,u表示其它噪声干扰。接下来介绍的算法将更多的侧重于对噪声源u的抑制。

此公式表示第j个麦克风接收到语音信号频域上的数学表达式,X表示安静语音,H表示房间响应函数,U表示其它噪声干扰。接下来介绍的算法将更多的侧重于对噪声源U的抑制。 

波束形成算法的目的:融合多个通道的信息抑制非目标方向的干扰源,增强目标方向的声音。从图中我们可以看到,各个麦克风接收到的语音信号存在延时,这种时延信息能够反映出声源的方向;直觉上分析,通过对齐各个通道的信号,能够增强目标语音信号,同时由于相位差异可以抵消掉部分干扰成分。 

波束形成算法需要解决的核心问题是估计空间滤波器W,它的输入是麦克风阵列采集的多通道语音信号,它的输出是增强后的单路语音信号。对空间滤波器进一步细分,可以分为时不变线性滤波、时变线性滤波以及非线性变换模型。最简单的延时求和法属于时不变线性滤波,广义旁瓣滤波法属于时变线性滤波,基于深层神经网络的波束形成属于非线性变换模型。 

通过波束方向图可以更直观的理解波束形成的原理,上图是一个麦克风阵列算法在f频带上所对应的波束方向图,不同频带对应不同的波束方向图;波束方向图同时还依赖于麦克风阵列的硬件拓扑,例如线型阵只能实现180度定向,因此它的波束方向图是对称的。在设计波束形成算法时,需要尽可能使得主瓣带宽尽可能窄,同时能够有效的抑制旁瓣增益。在麦克风阵列选型上,麦克风之间的距离越大,则阵列的定向拾音能力越强,但是不能无限加大麦克风之间的距离,需要遵循空间采样定理。声学信号中的波束形成方法与雷达信号处理中的波束形成方法有很多相似之处,但两者处理的频带和带宽有差异。 

麦克风阵列算法的数学表达式解析,式中Y表示各个麦克风接收到的信号,绿色部分表示声源信号,橙色部分表示声源信号传输到麦克风的变换,红色部分表示各种噪声源的干扰。因此波束形成算法需要在已知Y的条件下,尽可能准确的估计h和u;即估计导向矢量和噪声模型。

导向矢量是麦克风阵列算法中最为重要的参数,能够反映声源传输的方向性信息,用于描述从声源到麦克风传输过程中延时、衰减等特性;下图为自由场条件下的平面波模型,自由场假设忽略了混响干扰,远距离拾音可以近似为平面波模型;数学表达式中紫色部分表示声源到达各个麦克风的时间差,绿色部分表示声源向麦克风传输过程中的衰减,导向矢量主要跟这两个因素有关;在一些算法中会忽略能量衰减因素的影响。对导向矢量进一步处理也可以对声源方位信息进行估计。

通过广义互相关函数可以确定各个麦克风之间的相对延时,如下图所示,寻找广义互相关函数中的峰值点,通过峰值点的位置计算出相对延时。为了进一步提高TDOA估计的鲁棒性,可以采用GCC-PHAT方法,这种方法在已有方法基础上引入了能量归一化机制。

 

下图为一种改进的基于加权延时求和的波束形成方法,针对TDOA模块,利用维特比算法确定各个通道的最优相对延时,根据实际环境对各个通道的权重进行控制;算法细节可以参考BeamformIt工具包,这种算法作为CHIME评测比赛中的基线方法。 

基于延时求和的方法计算复杂度低,但是它在真实环境下的鲁棒性差,接下来介绍一种应用更为广泛的方法:基于最小方差失真响应波束形成。如下图中的数学表达式所示,y表示多通道语音,w表示空间滤波器,x表示增强后的单通道语音,这种波束形成算法的假设是期望方向上的语音无失真,也就是w*h这项为1;同时保证对噪声的响应最小,也就是最小化w*u这项。在这两个约束条件下估计最优的空间滤波器w。 

经过一系列的变换和推倒,我们能够确定空间滤波器w与噪声协方差矩阵和导向矢量的关系。为了计算噪声协方差矩阵,需要估计出各个通道中信号在各个频带上噪声成分的互相关系数,因此对噪声成分的有效估计将直接影响到波束形成算法的性能。对于导向矢量,可以通过估计声源到达各个麦克风的相对延时来确定。

 

为了有效的估计噪声协方差矩阵,需要对各个通道信号的各帧的各个频带的屏蔽值进行估计,可以采用二值型屏蔽或浮点型屏蔽;通过这一屏蔽值可以判断各个频带是否是噪声主导以及噪声所占的比重;在确定了屏蔽值,可以进一步计算出噪声协方差矩阵和语音协方差矩阵;对于导向矢量,不仅可能通过到达各个麦克风的相对延时来确定,还可以通过语音协方差矩阵变换得到,导向矢量可以近似的表示为语音协方差矩阵最大特征值所对应的特征向量。

重点介绍基于最小方差失真响应波束形成的流程,对各个通道语音首先进行屏蔽值估计,然后计算噪声协方差矩阵和语音协方差矩阵,进一步确定导向矢量,通过导向矢量和噪声协方差矩阵估计空间滤波器,生成波束形成后的单通道语音。

除了基于延时求和的波束形成和基于最小方差失真响应的波束形成,以下几种波束形成方法应用也比较广泛,包括:基于最大信噪比的波束形成、基于多通道维纳滤波的波束形成以及基于广义旁瓣滤波的波束形成;通过数学表达式我们可以看出,噪声协方差矩阵的估计起到了非常关键的作用。

下面重点介绍一下基于深度学习的波束形成方法;深度学习方法在智能语音领域的应用非常的广泛,包括单通道的语音增强和语音去混响问题,深度学习方法已经成为了智能语音领域重要的主流方法之一;不同于单通道语音增强,多通道语音增强方法跟麦克风阵列的硬件结构高度相关,所以如果直接将各通道谱参数特征作为输入,将干净语音谱参数特征作为输出,所训练的模型将受限于硬件结构;因此,为了提高模型的泛化能力,更常用的方法是采用深层神经网络模型对各个通道各个频带的屏蔽值进行估计、融合,进而计算出噪声协方差矩阵,然后再跟传统的波束形成方法对接,如下图所示的方法是将深层神经网络方法跟最小方差失真响应波束形成方法对接。

采用这种基于深度学习的方法,可以有效的抑制噪声的干扰,提高增强语音的质量。增强后的语音可以输入到语音识别系统,提高语音识别的鲁棒性。



回波消除

在远场语音识别系统中,回声消除最典型的应用是智能终端播放音乐,远端扬声器播放的音乐会回传给近端麦克风,此时需要有效的回声消除算法来抑制远端信号的干扰。回声消除的两个难点是双讲检测和延时估计,对于智能终端的回声消除模块,解决双讲条件下对远端干扰源的抑制是最为关键的问题,通过判断当前的模式(近讲模式、远讲模式、双讲模式)采用不同的策略对滤波器w1和w2进行更新,进而滤除远端干扰,在此基础上通过后置滤波算法消除残留噪声的干扰。一般分为有声回波和混合回波两种类型。在语音通话中由于语音压缩技术和包处理延迟会产生回波,通常需要回波消除以提高通话质量的过程。回波消除器监测接收路径上从远端来的话音,计算出回波的估值,然后在发送路径上减去这个估值,于是回波被去除了只有近端的话音被发送到远端。

波束形成算法
智能天线研究(指的是带有可以判定信号的空间信息(传播方向)和跟踪、定位信号源的智能算法,并且可以根据此信息进行空域滤波的天线阵列)中最核心的内容。波束形成算法的目的:融合多个通道的信息抑制非目标方向的干扰源,增强目标方向的声音。波束形成算法根据基于的对象不同可以分为基于方向估计的自适应算法。分类方法是根据是否需要发射参考信号,各个麦克风接收到的语音信号存在延时,这种时延信息能够反映出声源的方向,通过对齐各个通道的信号,能够增强目标语音信号,同时由于相位差异可以抵消掉部分干扰成分。波束形成算法需要解决的核心问题是估计空间滤波器,它的输入是麦克风阵列采集的多通道语音信号,它的输出是增强后的单路语音信号。对空间滤波器进一步细分,可以分为时不变线性滤波、时变线性滤波以及非线性变换模型。最简单的延时求和法属于时不变线性滤波,广义旁瓣滤波法属于时变线性滤波,基于深层神经网络的波束形成属于非线性变换模型。 
将波束形成的算法分为非盲算法和盲算法:
(1)非盲算法:通过发射训练序列或者导频信号来确定信道响应,然后根据一定的准则调整权值。常用非盲算法包括最小均方(LMS)算法、直接矩阵求逆(DMI)算法和递归最小二乘(RLS)算法。
(2)盲算法:不需要发射训练序列或者导频信号,接收端将自己发送的信号作为参考信号进行估计,然后调整权值。典型的盲算法包括两种:
一种是利用:信号特征的盲算法,比如利用信号恒模特性的恒模算法,利用信号循环平稳性的周期平稳性算法,还有有限符号集算法。
一种是利用:DOA的盲算法。提取DOA信息的算法如MUSIC、ESPRIT等。

空间滤波器:空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。处理方法有计算机处理(数字滤波)和光学信息处理两种。


混响消除方法
在声学上, 延迟时间达到约 50 ms 以上的反射波称为回声, 其余的反射波产生的效应称为混响,分为早期混响和晚期混响,由于早期混响成分有助于提高语音的可懂度所以在语音去混响任务中,更多的关注于对晚期混响的抑制。按照使用传声器数量分类, 去混响系统主要分为单传声器系统与传声器阵列系统:
(1)单通道传声器系统去混响技术只利用声场中接收位置一点的声信号时间和变换域的特性。
(2)多通道传声器阵列系统能利用声场的空间特性, 其主要优点是由阵列带来的接收方向性除了能直接提高信号与混响声能比之外, 同时还对本底噪声有显著的抑制作用。但阵列系统的硬件复杂度高, 数据处理量成倍增加, 对计算速度有较高要求。但随着计算机技术的发展, 采用阵列的去混响技术受到更多重视。

上图为一个典型的房间脉冲响应,蓝色部分为早期混响,橙色部分为晚期混响;在语音去混响任务中,更多的关注于对晚期混响的抑制。

此图相对直观的描述了混响语音的生成过程,安静语音在时域上卷积房间脉冲响应滤波器后生成混响语音;通常语音在传输过程中会伴随噪声的干扰;因此麦克风接收到的语音Y包含三个部分:蓝色部分包括了从声源直接到达麦克风的语音以及早期混响成分、橙色部分是晚期混响成分、灰色部分是房间中各种噪声源的干扰。

当前主流的混响消除方法主要包括以下四类:基于波束形成方法、基于逆滤波方法、基于语音增强方法、基于深度学习方法。
基于波束形成的混响消除方法假设干扰信号与直达信号之间是独立的,它对于抑制加性噪声非常有效,它并不适用于混响环境.
基于逆滤波算法可以获得较好的混响消除性能,但是缺少能够在实际环境中对混响等效滤波器进行盲估计的有效算法,因此很难实际应用。
基于谱增强算法根据预先定义好的语音信号的波形或频谱模型,对混响信号进行处理,但是该方法难以提取出纯净语音,从而难以有效实现混响消除。
基于深度学习的语音混响消除方法,这种方法的劣势是当训练集和测试集不匹配时,算法性能会下降。
目前使用比较广是的基于加权预测误差的混响消除方法。能够适用于单通道和多通道的混响消除。

    这种方法的思想和语音编码中的线性预测系数有些相似,如下图所示,混响语音信号Y可以分解为安静语音成分D混响成分L,L可以通过先前若干点的Y加权确定,G表示权重系数;WPE算法的核心问题是确定G,然后估计出混响消除后的语音。


该算法通过如下目标函数估计滤波器系数,具体推倒过程如下所示,更为详细的算法流程可以参考一下网址推荐的论文。

http://www.kecl.ntt.co.jp/icl/signal/takuya/research/dereverberation.html

由于早期混响成分有助于提高语音的可懂度,因此可以对上述的方法进行改进,只抑制晚期混响成分。如下图所示D同时包括安静语音成分和早期混响成分,通过先前若干点的Y确定L时没有考虑早期混响成分。

在此基础上将WPE方法扩展到多通道混响消除模式,此时某一通道的晚期混响成分L可以通过各个通道先前若干点的Y加权确定,通过估计最优的权重系数G,消除晚期混响成分的干扰。 

基于WPE的多通道混响消除的流程,如果所示需要经过多次迭代确定出滤波器系数g,生成出混响消除后的语音。输出的去混响后的各通道语音可以作为波束形成算法的输入。



自动增益算法
Speex AGC算法模型过于简单,只是一个纯粹的算法,在有人声激励的情况 ,表现比较好。能快速增益到合适的音量,缺点是当一段时间没有被正确的信号激励之后,会出现过多的增益噪声的问题,而且因为增益不稳定,变化速度比较快,会不断地出忽大忽小的背景噪声的情况。最简单的硬性增益处理是对所有音频采样乘上一个增益因子,它也等同于在频域每个频率都同时乘上这个增益因子,但由于人的听觉对所有频率的感知不是线性的,是遵循等响度曲线的,导致这样处理后,听起来感觉有的频率加强了,有的频率削弱了,导致语言失真的放大。
重写AGC算法主要就是解决上面提到的问题,除了算法本身以后,也考虑了实际中应用场景,总体的设计思路是前期增益变化会比较快,处于一个快速学习期,稳定之后,学习参数将降低,这样可以有效解决一段时间没有人声激励之后,会过大增益背景噪声的问题,保持一个相对稳定的增益,也可以避免忽大忽小的现象发生。要让整个频段的频率听起来响度增益都是“相同”的,就必须在响度这个尺度下做增益,而不是在频率域,即按照等响度曲线对语音的频率进行加权,不能采用一个固定的增益因子进行加权。由些可见,语音的自动增益处理可以大致分为两个部分:
(1)响度增益因子的确定。
(2)把响度增益因子映射到等响度曲线上,确定最终各频率的增益权重。


三、最常用的前端处理有端点检测、降噪和语音增强


端点检测(VAD,又称语音边界检测)
是指在语音信号中将语音和非语音信号时段区分开来,准确地确定出语音信号的起始点然后从连续的语音流中检测出有效的语音段。它包括两个方面,检测出有效语音的起始点即前端点,检测出有效语音的结束点即后端点。经过端点检测后,后续处理就可以只对语音信号进行,这对提高模型的精确度和识别正确率有重要作用
在语音应用中进行语音的端点检测是很必要的,首先很简单的一点,就是在存储或传输语音的场景下,从连续的语音流中分离出有效语音,可以降低存储或传输的数据量。其次是在有些应用场景中,使用端点检测可以简化人机交互,比如在录音的场景中,语音后端点检测可以省略结束录音的操作。有些产品已经使用循环神经网络( RNN)技术来进行语音的端点检测。
在分析一段音频时,首尾的静音部分声波的振幅很小而有效语音部分的振幅比较大,一个信号的振幅从直观上表示了信号能量的大小:静音部分能量值较小,有效语音部分的能量值较大。语音信号是一个以时间为自变量的一维连续函数,计算机处理的语音数据是语音信号按时间排序的采样值序列,这些采样值的大小同样表示了语音信号在采样点处的能量。
采样值中有正值和负值但计算能量值时不需要考虑正负,使用采样值的绝对值来表示能量值是自然而然的,由于绝对值符号在数学处理上不方便,所以采样点的能量值通常使用采样值的平方,一段包含N个采样点的语音的能量值可以定义为其中各采样值的平方和。一段语音的能量值既与其中的采样值大小有关,又与其中包含的采样点数量有关。为了考察语音能量值的变化,需要将语音信号按照固定时长(比如20毫秒)进行分割,每个分割单元称为帧,每帧中包含数量相同的采样点,然后计算每帧语音的能量值。如果音频前面部分连续M0帧的能量值低于一个事先指定的能量值阈值E0,接下来的连续M0帧能量值大于E0,则在语音能量值增大的地方就是语音的前端点。同样的,如果连续的若干帧语音能量值较大,随后的帧能量值变小,并且持续一定的时长,可以认为在能量值减小的地方即是语音的后端点。
关键在于能量值阈值E0怎么取而M0又是多少,理想的静音能量值为0,故上面算法中的E0理想状态下取0。不幸的是,采集音频的场景中往往有一定强度的背景音,这种单纯的背景音当然算静音,但其能量值显然不为0,因此,实际采集到的音频其背景音通常有一定的基础能量值。总是假设采集到的音频在起始处有一小段静音,长度一般为几百毫秒,这一小段静音是我们估计阈值E0的基础。总是假设音频起始处的一小段语音是静音,这一点假设非常重要!在估计E0时,选取一定数量的帧比如前100帧语音数据(这些是“静音”),计算其平均能量值,然后加上一个经验值或乘以一个大于1的系数,由此得到E0。这个E0就是我们判断一帧语音是否是静音的基准,大于这个值就是有效语音,小于这个值就是静音。至于M0其大小决定了端点检测的灵敏度,M0越小,端点检测的灵敏度越高,反之越低。语音应用的场景不同,端点检测的灵敏度也应该被设置为不同的值。例如,在声控遥控器的应用中,由于语音指令一般都是简单的控制指令,中间出现逗号或句号等较长停顿的可能性很小,所以提高端点检测的灵敏度是合理的,M0设置为较小值,对应的音频时长一般为200-400毫秒左右。在大段的语音听写应用中,由于中间会出现逗号或句号等较长时间的停顿,宜将端点检测的灵敏度降低,此时M0值设置为较大值,对应的音频时长一般为1500-3000毫秒。所以M0的值,也就是端点检测的灵敏度,在实际中应该做成可调整的,它的取值要根据语音应用的场景来选择。

噪声抑制(降噪)
实际采集到的音频通常会有一定强度的背景音,这些背景音一般是背景噪音,当背景噪音强度较大时,会对语音应用的效果产生明显的影响,比如语音识别率降低,端点检测灵敏度下降等,因此在语音的前端处理中,进行噪声抑制是很有必要的。噪声抑制的一般流程:稳定背景噪音频谱特征,在某一或几个频谱处幅度非常稳定,假设开始一小段背景是背景噪音,从起始背景噪音开始进行分组、Fourier变换,对这些分组求平均得到噪声的频谱。降噪过程是将含噪语音反向补偿之后得到降噪后的语音。
噪声有很多种,有频谱稳定的白噪声,有不稳定的脉冲噪声和起伏噪声,但在语音应用中,稳定的背景噪音最为常见,技术也最成熟,效果也最好,所以只讨论稳定的白噪声,即总是假设背景噪声的频谱是稳定或者是准稳定的。语音端点检测是在时域上进行的,降噪的过程则是在频域上进行的,为此,先来简单介绍或者说复习一下用于时域-频域相互转换的重要工具——傅里叶变换。
为了更容易理解,先看高等数学中的傅里叶级数,高等数学理论指出一个满足条件的周期为2T的函数f(t),可以展开成傅里叶级数,信号的傅里叶级数展示的是构成信号的频率以及各个频率处的振幅,因此这个式子的右端又可以看做是信号f(t)的频谱,信号的频谱就是指这个信号有哪些频率成分,各个频率的振幅如何。式子从左到右的过程是一个求已知信号的频谱的过程,从右到左的过程是一个由信号的频谱重构该信号的过程。虽然由信号的傅里叶级数很容易理解频谱的概念,但在实际中求取信号的频谱时,使用的是傅里叶级数的一种推广形式——傅里叶变换。
在实际应用中,将数字采样信号进行傅里叶变换后,可以得到信号的频谱。频域上的处理完成后,可以使用傅里叶逆变换将信号由频域转换到时域中。傅里叶变换是一个可以完成由时域向频域转换的重要工具,一个信号经傅里叶变换后,可以得到信号的频谱。只要明白,一个时域信号进行傅里叶变换后,可以得到这个信号的频谱。时域信号一般关注的是什么时间取什么值,频域信号关心的是频率分布和振幅。噪音抑制的关键是提取出噪声的频谱,然后将含噪语音根据噪声的频谱做一个反向的补偿运算,从而得到降噪后的语音。
降噪过程:同端点检测类似,假设音频起始处的一小段语音是背景音,这一假设非常重要,因为这一小段背景音也是背景噪声,是提取噪声频谱的基础。首先将这一小背
景音进行分帧,并按照帧的先后顺序进行分组,每组的帧数可以为10或其他值,组的数量一般不少于5,随后对每组背景噪声数据帧使用傅里叶变换得到其频谱,再将各频谱求平均后得到背景噪声的频谱。得到噪声的频谱后,降噪的过程就非常简单了,噪声的频谱和有效语音信号的频谱,两者共同构成含噪语音的频谱,用含噪语音的频谱减去噪音频谱后得到降噪后语音的频谱,再使用傅里叶逆变换转回到时域中,从而得到降噪后的语音数据。
在实际应用中,降噪使用的噪声频谱通常不是一成不变的,而是随着降噪过程的进行被持续修正的,即降噪的过程是自适应的。原因一方面是语音数据前部的静音长度有时不够长,背景噪声数据不足导致得到的噪声频谱往往不够准确,另一方面背景噪声往往不是绝对稳定的,而是渐变的甚至会突变到另一种稳定的背景噪声。这些原因都要求在降噪的过程中对使用的噪声频谱做及时修正,以得到较好的降噪效果。修正噪声频谱的方法是使用后继音频中的静音,重复噪声频谱提取算法,得到新的噪声频谱,并将之用于修正降噪所用的噪声频谱,所以降噪的过程中仍然要使用端点检测中用到的如何判断静音。噪声频谱修正的方法或者是新旧频谱进行加权平均,或者使用新的噪声频谱完全替换使用中的噪声频谱。
以上介绍的是降噪非常简单的原理,实际中降噪算法远比上面的复杂,不仅因为现实中的噪声源多种多样而且其产生的机理和特性也较为复杂。


语音增强
主要任务就是消除环境噪声对语音的影响。目前,比较常见的语音增强方法可分为以下几类。其中基于短时谱估计增强算法中的谱减法及其改进形式是最为常用的,这是因为它的运算量较小,容易实时实现,而且增强效果也较好。此外,人们也在尝试将人工智能、隐马尔科夫模型、神经网络和粒子滤波器等理论用于语音增强,但目前尚未取得实质性进展。

1、基于短时谱估计的语音增强法
基于短时谱估计是应用最广泛的语音增强方法,包括谱相减法(简称谱减法)、维纳滤波法、最小均方误差法等。
经典谱减法:是通过假设噪声是平稳的或者变化缓慢的加性噪声,并且语音信号与噪声信号不相关,估计噪声频谱并减去该估值来实现语音增强的。该方法能够抑制背景噪声影响,和其他方法结合产生了许多有效的语音增强方法,虽然非平稳环境下处理效果还不够理想,但这种方法运算量比较少,容易实时实现,是最常用的一种语音增强方法,但在低信噪比的情况下,对语音的可懂度和自然度损害比较大,并且在重建语音过程中会产生音乐噪声。
维纳滤波法:该法是统计意义上、平稳条件下的最优滤波法,或者说是波形的最优线性估计,即通过设计一个线性滤波器,使通过滤波操作后的输出信号达到最小均方误差期望值,那么输出信号就是原本纯净的最优线性估计,但该方法对语音这种非平稳信号不是很适合,但是卡尔曼滤波法克服了维纳滤波的平稳条件限制,在非平稳条件下也可以保证最小均方误差最优,但仅适用于清音。自适应滤波是效果最好的一种语音增强方法,但是由于需要一个在实际环境中很难获得的参考噪声源,而且和谱减法一样伴有音乐噪声,因此实际应用并不十分广泛。

2、噪声对消法
如果能直接从带噪声语音中,通过时域或者频域,将噪声分量减去,则能有效增强带噪声语音,噪声对消法就是以此作为出发点。其最大特点是需要采集背景噪声作为参考信号,参考信号准确与否直接决定着噪声对消法的性能好坏。在采集背景噪声时,往往采用自适应滤波技术,以便使信号尽可能接近带噪声语音中的噪声分量。
自适应对消是通过自适应滤波器来完成的。自适应滤波器在输入信号和噪声的统计特性未知或变化的情况下,通过调整自身的参数,来达到最佳滤波效果。当输入过程的统计特性变化时,自适应滤波器调整自己参数的过程称为“跟踪”过程。

3、谐波增强法
由于语音中的浊音具有明显的周期性,这种周期性反映到频域中则作为一系列分别对应基频(基音)及其谐波的一个个峰值分量,这些频率分量占据了语音的大部分能量,可以利用这种周期性来进行语音增强。这时可以采用自适应梳妆滤波器来提取基音及其谐波分量,抑制其他周期性噪声和非周期性的宽带噪声。由于语音是时变的,语音的基音周期也是不断变化的,能否准确地估计出基音周期以及能否及时跟踪基音变化,是谐波增强法的关键。

4、基于语音生成模型的语音增强法
语音的发声过程可以建模为一个线性时变滤波器,对不同类型的语音采用不同的激励源。在语音的生成模型中,应用最广泛的全极点模型。基于语音生成模型可以得到一系列语音增强方法,例如,时变参数维纳滤波法、卡尔曼滤波法。维纳滤波的背景噪声白化效果很好,卡尔曼滤波能有效消除有色噪声。但基于语音生成模型的增强方法运算量比较大,系统性能也有待于进一步提高。

5、基于听觉掩蔽的语音增强法
听觉掩蔽法是利用人耳听觉特性的一种增强法。人耳可以在强噪声的干扰下,分辨出需要聆听的信号,也可以在多个说话者同时发声时,分别将它们提取出来。正是由于以上这些原因,随着对人耳特性了解的加深,听觉掩蔽法会得到更深入的发展。

6、基于小波变换的语音增强法
小波变换语音增强算法是随着小波分解这一新的数学分析工具发展起来的,结合了谱减法的一些基本原理。它是一种时频域局部分析方法,克服了短时傅里叶变换固定分辨率的缺点,能够将信号在多尺度多分辨率上的信息。小波变换与人耳的听觉特性非常相似,便于研究者利用人耳的听觉特性来分析语音这种非平稳信号。
它语音增强原理是:语音信号的能量集中在低频段,而噪声能量则主要集中在高频段,就可以将噪声小波系数占主要成分的那些尺度上的噪声小波分析量置零或者给予很小的权重,然后用处理后的小波系数重构恢复信号。随着小波变换技术的发展,小波变换去躁实现语音增强的技术也在不断丰富,比如利用小波变换模极大值去噪法、非线性小波变换阈值去噪法、利用信号小波变换后空域相关性的信噪分离法、平移不变量小波去噪法等。


四、语音识别技术原理-工作原理解读

  首先,我们知道声音实际上是一种波。常见的mp3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图是一个波形的示例。

    

 

  图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。

  分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种,具体这里不讲。

  至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

    

 

  接下来就要介绍怎样把这个矩阵变成文本了。首先要介绍两个概念:

  音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing DicTIonary?。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。

  状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态。

  语音识别是怎么工作的呢?实际上一点都不神秘,无非是:

  第一步,把帧识别成状态(难点)。

  第二步,把状态组合成音素。

  第三步,把音素组合成单词。

  如下图所示:

    

 

  图中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。

  那每帧音素对应哪个状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。比如下面的示意图,这帧在状态S3上的条件概率最大,因此就猜这帧属于状态S3。

    

 

  那这些用到的概率从哪里读取呢?有个叫“声学模型”的东西,里面存了一大堆参数,通过这些参数,就可以知道帧和状态对应的概率。获取这一大堆参数的方法叫做“训练”,需要使用巨大数量的语音数据,训练的方法比较繁琐,这里不讲。

  但这样做有一个问题:每一帧都会得到一个状态号,最后整个语音就会得到一堆乱七八糟的状态号,相邻两帧间的状态号基本都不相同。假设语音有1000帧,每帧对应1个状态,每3个状态组合成一个音素,那么大概会组合成300个音素,但这段语音其实根本没有这么多音素。如果真这么做,得到的状态号可能根本无法组合成音素。实际上,相邻帧的状态应该大多数都是相同的才合理,因为每帧很短。

  解决这个问题的常用方法就是使用隐马尔可夫模型(Hidden Markov Model,HMM)。这东西听起来好像很高深的样子,实际上用起来很简单:

  第一步,构建一个状态网络。

  第二步,从状态网络中寻找与声音最匹配的路径。

  这样就把结果限制在预先设定的网络中,避免了刚才说到的问题,当然也带来一个局限,比如你设定的网络里只包含了“今天晴天”和“今天下雨”两个句子的状态路径,那么不管说些什么,识别出的结果必然是这两个句子中的一句。

  那如果想识别任意文本呢?把这个网络搭得足够大,包含任意文本的路径就可以了。但这个网络越大,想要达到比较好的识别准确率就越难。所以要根据实际任务的需求,合理选择网络大小和结构。

  搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

    

 

  这里所说的累积概率,由三部分构成,分别是:

  观察概率:每帧和每个状态对应的概率

  转移概率:每个状态转移到自身或转移到下个状态的概率

  语言概率:根据语言统计规律得到的概率

  其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。

  这样基本上语音识别过程就完成了,这就是语音识别技术的原理。


五、语音识别技术原理-语音识别系统的工作流程

  一般来说,一套完整的语音识别系统其工作过程分为7步:

  ①对语音信号进行分析和处理,除去冗余信息。

  ②提取影响语音识别的关键信息和表达语言含义的特征信息。

  ③紧扣特征信息,用最小单元识别字词。

  ④按照不同语言的各自语法,依照先后次序识别字词。

  ⑤把前后意思当作辅助识别条件,有利于分析和识别。

  ⑥按照语义分析,给关键信息划分段落,取出所识别出的字词并连接起来,同时根据语句意思调整句子构成。

  ⑦结合语义,仔细分析上下文的相互联系,对当前正在处理的语句进行适当修正。

  音识别系统基本原理框图

    

 

  语音识别系统基本原理结构如图所示。语音识别原理有三点:①对语音信号中的语言信息编码是按照幅度谱的时间变化来进行;②由于语音是可以阅读的,也就是说声学信号可以在不考虑说话人说话传达的信息内容的前提下用多个具有区别性的、离散的符号来表示;③语音的交互是一个认知过程,所以绝对不能与语法、语义和用语规范等方面分裂开来。

  预处理,其中就包括对语音信号进行采样、克服混叠滤波、去除部分由个体发音的差异和环境引起的噪声影响,此外还会考虑到语音识别基本单元的选取和端点检测问题。反复训练是在识别之前通过让说话人多次重复语音,从原始语音信号样本中去除冗余信息,保留关键信息,再按照一定规则对数据加以整理,构成模式库。再者是模式匹配,它是整个语音识别系统的核心部分,是根据一定规则以及计算输入特征与库存模式之间的相似度,进而判断出输入语音的意思。

  前端处理,先对原始语音信号进行处理,再进行特征提取,消除噪声和不同说话人的发音差异带来的影响,使处理后的信号能够更完整地反映语音的本质特征提取,消除噪声和不同说话人的发音差异带来的影响,使处理后的信号能够更完整地反映语音的本质特征。


六、语音前端处理方法在语音识别中的应用 

这是用于远场语音识别的公共数据库,不同于近场语音识别数据库,远场语音数据的采集不仅录音环境更为复杂,同时还跟采集语音的硬件相关。所以录制远场语音数据的成本相对较高。比较有名的远场语音数据库包括AMI数据,这个数据库是在会议室环境下录制的,混响时间较长;Chime数据库,在噪声环境下录制的数据库,其中Chime1和Chime2是单通道采集的,Chime-3和Chime-4是多通道采集的。

Chime-4比赛中包括了三种场景:单通道、双通道和六通道。前端基线方法是改进的延时求和;后端声学模型是7层的DNN,得到的声学模型需要再进行sMBR区分性训练;语言模型采用3元或5元的语言模型;语料内容来自WSJ0数据库。如果感兴趣可以关注CHIME的官网http://spandh.dcs.shef.ac.uk/chime_challenge/index.html

 

以下是对Chime-3和Chime-4比赛中的有效方法进行的梳理。

首先看一下前端部分,有效的估计噪声协方差矩阵将有助于提高算法性能。为了有效的估计噪声协方差矩阵,需要对各个通道的各个时频单元进行屏蔽值估计,可以采用深度学习等方法进行估计,在此基础上计算噪声协方差矩阵;使用最多的波束形成方法包括:最小方差响应失真波束形成、最大信噪比波束形成、广义旁瓣滤波波束形成、多通道维纳滤波波束形成等。自适应波束形成方法要优于固定波束形成方法。

接下来介绍后端有效方法,在数据选择上充分利用各个通道数据;比如单通道语音增强任务,将六个通道采集的数据都作为训练数据;前端算法和后端算法的匹配非常重要,具体来说,训练声学模型时,如果是将前端算法处理后的数据作为后端声学模型的训练数据,则对于测试集,需要先通过前端算法进行增强处理,然后在此基础上通过后端模型识别;此外前端算法跟麦克风阵列的适配也是非常重要的。当前主流的声学模型包括了BLSTM和深层的CNN;对不同的声学模型进行融合也有助于提高识别率,比如将BLSTM和深层CNN的输出层进行融合。对于语言模型LSTM优于RNN,RNN优于n-gram,对于工业领域的上线产品更多的是实用n-gram模型。

当前这一领域仍然面临的挑战和需要解决的痛点包括:

1、多说话人分离的鸡尾酒问题,如何改进盲分离算法突破鸡尾酒问题;

2、说话人移动时,如何保证远场语音识别性能;

3、面对不同的麦克风阵列结构,如何提高语音前端算法的泛化性能;

4、面对更加复杂的非平稳噪声和强混响如何保证算法鲁棒性;

5、针对更随意的口语,尤其是窄带语音,如何提高语音识别的性能;

6、远场语音数据库不容易采集,如何通过声场环境模拟方法扩充数据库。

上述问题的解决将有助于提高远场语音识别算法的性能。



参考资料:https://blog.csdn.net/zythemoon/article/details/78764546

                  http://news.zol.com.cn/647/6477904.html

                  http://www.eepw.com.cn/article/201612/342190.htm

猜你喜欢

转载自blog.csdn.net/barry_j/article/details/80586242