原文地址:http://blog.csdn.net/joey_su/article/details/36414877
概述
针对ASR的语音信号分析
- 特征
- 频谱分析
- 倒谱分析
- 标准特征:MFCC和PLP分析
- 动态特征
第一课的结尾提到了语音识别的框图,下图展示了信号分析技术在语音识别系统中的位置:
我们先来认识下语音的产生过程:
语音是在发音器官和声道共同作用下产生的。说话时,声带振动发出具有一定周期特性(基音周期T0)的声音,通过喉,咽,鼻腔,口腔等发音器官,以及在嘴唇的摩擦作用下形成语音信号x(t),对x(t)进行傅立叶变换,得到频谱X(Ω ),X(Ω )由共振峰(F1,F2,F3)组成。
发出的语音属于模拟信号,为了对语音信号进行分析和处理,需要进行模数转换。
采样,即把模拟信号转换为数字的形式:
语音引起空气振动,是一种声压波,用麦克风进行录制。
是经过麦克风录制后的语音信号,用一个周期为,幅度为1的冲击函数与相乘,得到,将脉冲转换为离散时间序列即得到周期为的。
其中,采样频率为,根据奈奎斯特采样定理,采样频率要大于或等于信号最高频率,实际应用中,采样频率选取如下:
需要注意的是在这里采用模拟低通滤波的作用是抗混叠。
数字化后,下一步的工作是提取语音信号的声学特征:
采样后的信号通过前处理后进行声学特征向量提取,得到声学模型。
用于语音识别的声学特征应包含以下特性:
- 特征应包含区分音素与音素之间的有效信息
- 良好的时间分辨率(10ms)
- 良好的频率分辨率(~20 channels)
- 分离基因频率以及它的谐波成分
- 对不同说话人具有鲁棒性
- 对噪音或者信道失真具有鲁棒性
- 有着良好的模式识别特性
- 低维特征
- 特征独立
下图为基于MFCC的前处理
原始语音信号经过A/D转换得到数字信号,经过预加重提升高频成分,接着是加窗,对加窗后的信号进行两个方面的处理,一个方面是提取倒谱特征,即经过离散傅立叶变换后,对频谱幅度进行平方,通过梅尔滤波器组,再进行对数变换,最后进行离散傅立叶变换的逆运算得到倒谱特征;另一方面是求加窗后信号的能量,将这两个方面结合起来形成动态特征,最后再进行特征变换得到声学模型。
下面对每个步骤进行分析
A/D转换在前面已经讲过了,在这里就不赘述。我们从预加重开始。
我们知道,语音是由声门激励通过系统(声道等)产生的,声门激励属于低频,所以语音的能量主要集中在低频,相对于低频来说,高频的能量较低,提升高频分量有助于提高信噪比,可采用预加重的方法,这种方法在通信系统中经常使用。
预加重(第一级)滤波器提升高频,公式如下:
下图对元音进行预加重操作:
从图中可看到,高频部分有一定的提升。
加窗
我们知道语音信号是不断改变的(非平稳),但是非平稳的信号不好处理,所以语音处理算法通常假定信号是稳定的。
分段(短时)平稳性:将语音信号看成是由一帧帧构成(假定被帧是平稳的)
加窗:在时域上,波形乘以窗函数即可得到加窗后的波形,公式为
如果我们简单地将语音信号分成很多小段,那么这些小段(帧)就是矩形窗,而矩形窗的边缘是陡峭的,即不连续的,所以应该选取边缘连续的窗函数,使得相邻两帧可以平滑过渡。
在语音处理中,通常使用锥形的窗代替矩形窗,比如汉明窗(Hamming)或者汉宁窗(Hanning),窗函数如下:
其中,为窗函数的系数,汉明窗为,汉宁窗为。
时域上的加窗效果如下:
可见锥形窗边缘部分过渡更加平滑了。
频域上的加窗效果如下:
离散傅立叶变换(DFT)
DFT的目的:从一个加窗的信号的中提取频谱信息(如在每个频带上的能量)
输入:加窗后的信号(时域)
输出:复数,表示N个频带上的第k个频率成分的幅度和相位
DFT公式:
快速傅立叶变换(FFT):是一种计算DFT的有效算法,其中N是以2为底的指数,N>L
加窗与频谱分析
首先对语音信号x[n]加窗,加窗后的信号为,t为时域信号的时间点,m表示第m个窗,然后对每帧进行傅立叶变换,得到短时功率谱。
这个过程中,需要注意的有两点,之一是帧长,对于使用较短的帧,其具有较宽的频带,较高的时间分辨率和较低的频率分辨率,而对于较长的帧,则具有较窄的频带,较低的时间分辨率和较高的频率分辨率;另一点要注意的是为了是帧与帧之间的过渡更加平稳,采用了帧移的方法,即两帧之间有个重叠区域。
对于语音识别来说,我们选用20ms的帧长,10ms的帧移。
下图为宽带和窄带的语谱图对比:
这里有个概念叫语谱(spectrogram),实际上就是把每帧的频谱图向左旋转90度,用颜色的深浅表示幅度的大小,幅度越大颜色越深,然后把每帧的颜色信息按照时间(帧)的顺序列出来,所以,语谱的横坐标为时间(帧),纵坐标为频率,颜色为频率的幅度。
短时频谱分析
如果语谱图对我们来说还是不好理解,那么看看上图的类似广西著名景点龙脊梯田(打广告嫌疑)的三维图片。x轴,y轴已经很清楚了,那么z轴呢?由上面的语谱图可知,z轴代表频率的大小,也就是说,山越高,频率越大。
DFT频谱
上图为元音的25ms汉明窗,它的频谱由DFT计算得到。
DFT频谱特征
从前面的介绍中,我们看到频带是等间隔的,但是我们知道,人类的耳朵其实是一个超级强大的语音识别系统,我们研究语音识别时,很大程度是从人类自身来寻找答案的,从人类听觉系统上看,我们的耳朵对声音的获取是有选择性的,对于大于1000Hz的声音,人类的听觉敏感度会降低,具体为什么是1000Hz,应该是跟耳朵的生理构造有关吧。
功率谱包含F0的基频(前面讲过的),正因为这样,使得估计频谱的包络变得困难,但还是有办法的。
短时傅立叶变换的频率与频率之间是高度相关的,例如,功率谱表示高度冗余。
人类听觉
好高大上的感觉,我们再来感受下人类强大的听觉系统吧
生理 | 感知 |
---|---|
强度 | 响度 |
基本频率 | 基音 |
频谱形状 | 音色 |
开合时间 | 时间 |
双耳相位差 | 位置 |
技术术语:
- 等响度轮廓
- 临界带宽
- 听觉滤波器(临界频带滤波器)
- 临界带宽
等响度轮廓
非线性频率刻度
前面提到人类的听觉系统对越高频率的敏感度越低,这就说明了人类的频率的感知是非线性的,也就是说人耳自身对声音的频率有所划分,并且这些划分的频段是非线性的(不是等间隔的)。
下面是三种非线性刻度,分别是Mel刻度和Bark刻度和ln刻度,实际语音处理中常用到Mel刻度:
实际语音处理中常用到Mel刻度。
Mel滤波器组
先贴图再说话,个人觉得一个好的图可以代替很多废话(包括这句哈哈)。
首先要明白为什么要设置Mel滤波器组。在这里,我们用到了若干个间隔不等的三角低通滤波器构成的滤波器组,由上面的介绍中我们了解到可以使用Mel刻度来代替线性的频率刻度,以满足人类的听觉特性。所以,我们需要对频率刻度的频点(Frequency bins)进行分类,分类是按顺序进行的,这个分类就需要Mel滤波器组来实现,上图一共12个三角形,所以可以理解为将一大段频点分成了12类,也就是12中Mel刻度功率谱。需要注意的是小于1000Hz的部分为线性间隔,而大于1000Hz的部分为对数间隔。
对数能量
为什么要计算对数能量呢?
- 可以使用对数来压缩动态范围
- 人类对于信号能量的敏感度是呈对数的,例如,人类对于高能量中的小变化表现出相对于低能量更低的敏感度,也就是说人类低能量区的变化更敏感
- 对数使得声学耦合的变化对于特征来说是不可变的,也就是对数使得声学耦合的变化在特征提取中变得可有可无。
- 移除相位信息,相位信息对于语音识别来说不是很重要(不过不是所有的人都认同这一点)
可通过计算每个Mel滤波器组输出的对数功率谱的平方来得到对数能量。
倒谱分析
什么是倒谱?倒谱倒谱,倒过来的频谱,将频谱(Spectrum)的前四个字母倒过来就变成了倒谱(Cepstrum)。所以我们可以近似理解为倒谱是频谱的一种特殊的逆变换,专业说法是同态处理。
语音产生模型可看成是发声源-滤波器(Source-Filter)模型:
发声源(Sourse):声带振动产生声门源波形
滤波器(Filter):发声源波形通过声道:舌头的位置,下巴等。给定一个特定的形状就会有一个特定的滤波特性(你往我脸上打一拳,脸上的某个部位就会肿出来,求别打脸)。
需要注意的是发声源的特性(F0,动态的声门脉冲)对区分音素并没有帮助;
而滤波器指定了发音器官的位置,这些都是固定的,所以可以区分音素。
说了那么多,倒谱究竟能干嘛呢?
倒谱分析可以帮助我们分离发声源和滤波器!这样,我们就可以把滤波器分离出来,就可以区分音素了,这就是非常重要的倒谱特征,语音识别最基本的单元就是音素,即phone(不是手机啊囧),后面就会有Bi-phone,Tri-phone...要是我们能把最基本的单元区分(识别)了,就可以做后面的工作了。
姗姗来迟的图——将功率谱分离成频谱包络和F0谐波。
对数频谱(频域)通过傅立叶变换的逆变换变成倒谱(时域)(逆频率),同态滤波得到高低两部分(其实就是指在倒谱域中加入两个滤波器来完成),然后再进行傅立叶变换即可得到平滑的频谱(频域),这个是倒谱中较低的部分,还得到对数频谱,也就是倒谱中较高的部分。
从图中我们可知道第三个图就是我们想要的,它就是原功率谱的包络(Envelope),而第四个图的Residue呢就是分离出来的发声源了,这部分可扔掉。就好比榨橙汁,把渣渣过滤掉就是我们可口的橙汁啦。
倒谱
前面已经介绍什么是倒谱了,大家应该有了一定的了解,下面我们再看下倒谱的细节。
正如上面所说,倒谱是通过对对数幅度谱进行逆离散傅立叶变换而得到的,倒谱是时域的谱,我们通常说是逆频率(quefrency),因为是频谱的逆DFT嘛。
逆离散傅立叶变换的公式:
需要注意的是,因为因为对数功率谱是实数的,所以对应的,逆DFT可等价为离散余弦变换,又因为离散余弦变换具有很强的能量集中性,可把能量集中的低(逆)频成分提取出来。
Mel-frequency cepstral coefficients(MFCCs)——梅尔频率倒谱系数
还是来个自问自答吧,什么是MFCCs?
梅尔,也就是前面提到的梅尔刻度;频率,也就是它是一种非线性的频率,即梅尔;倒谱,经倒谱分析后得到的特征;系数,呃,这个不用解释了吧。
给出一个平滑频谱(smoothed spectrum)的概念:变换到倒谱域,截断,再变换回频域。
那么,MFCCs有什么用呢?
- 作为声学特征被广泛用于基于HMM的语音识别系统
- 前12个MFCCs通常被用作特征向量(也就是移除F0的信息)
- 相对频谱特征有着更小的相关性,也就是说比频谱特征更容易建立模型
- 它的表示非常紧凑(挤挤更健康),因为这12个特征描述了一段语音数据中的一个20ms的帧,再回去看看上面的语谱图就明白了
- 对于标准的基于HMM的系统,MFCCs在语音识别的性能比滤波器组或者语谱特征更优越
- 可惜的是MFCCs抵抗噪声的鲁棒性不强(哎呀为什么让我看到这个)
Perceptual Linear Prediction(PLP)——感知线性预测
这是什么家伙?先上图。
PLP (Hermansky, JASA 1990)
这家伙呢利用等响度预加重以及立方根压缩(由感知的结果),而不是MFCCs用到的对数压缩;利用线性预测自回归模型获得倒谱系数。
已经被证明的是PLP跟MFCCs比较,其具有更好的语音识别准确度以及更好的噪声鲁棒性。
貌似很牛X的样子,看看它怎么实现的吧:
将语音信号通过傅立叶变换得到频谱,再对幅度求平方,然后进行临界频带积分(critical-band intergration),接着进行等响度预加重,接着求立方根(对强度进行等响度压缩),然后是进行逆傅立叶变换,最后再经过线性预测即可得到PLP。
动态特征
PLP看起来好高端的样子,我们还是回到MFCCs,研究它的动态特征吧。
我们知道,语音不是恒定的帧到帧(frame-to-frame)的,所以我们可以加入一些特征,表示倒谱系数随时间的变化而变化,也就是说我们要让语音动起来(而不是上面画的那些静态的波形图)。
我们把称为delta特征,也就是动态特征/对时间的导数(time derivatives)。
下面我们就来简单地计算倒谱特征在t时刻的delta特征:
更复杂的方法是:使用回归估计斜率来估计对时间的导数(通常每帧使用4帧)。(果然是复杂,水平有限都不知道怎么翻译囧)
”标准的“语音识别特征为39维:
看不懂啊,写的是什么啊,贴个图就好了。
估计动态特征
我们都知道斜率可以表示变化的快慢,也就是说它可以在一定程度上反映语音信号的动态特征,当然,这里的语音信号指的是特征参数,而不是实际信号。
需要注意的是能量(0阶,1阶,2阶)也是特征参数,为什么会有能量?我们来回顾下MFCCs提取流程就知道啦:
哈哈,看到Energy了吗?
特征转换
正交变换
- DCT(discrete cosine transform)——离散余弦变换
- PCA(principal component analysis)——主成分分析
基于类之间的最大可分性
- LDA (linear discriminant analysis)/ Fisher’s linear discrminant——线性判别分析/费希尔线性判别
- HLDA (heteroscedastic linear discriminant analysis)——异方差线性判别分析
总结
ASR特征的良好特性
- MFCCs
- 短时离散傅立叶分析
- 梅尔滤波器组
- 对数幅度平方
- 逆离散傅立叶变换(离散余弦变换)
- 使用前12维系数
- Delta特征
- 39维特征向量:
MFCC-12 + energy; + Deltas; + Delta-Deltas