信号预处理:MFCC处理流程

补充另外2个还不错的链接

https://blog.csdn.net/Bonner1/article/details/86488046

https://blog.csdn.net/xmdxcsj/article/details/51228791

处理的流程

 

(1)预加重(Pre-emphasizing):在语音信号中,由于声门气流波的影响,每倍频衰减是12dB, 而唇腔辐射是每倍频增加6dB,  所以总的效果是每倍频衰减6dB, 为了弥补这6dB我们采取预加重。由于每倍频会衰减6dB, 高频部分的能量一般比较低, 提高高频部分的能量使得高频能量和低频能量大致相等, 尽量弥补每倍频损失的6dB,  预加重的公式. Y[n]=s[n]-0.95*s[n-1].

(2)分帧:帧长25ms,帧移10ms,帧与帧之间有15ms是重复的,(s - 15)/ 10 = 帧数, 其中 s 为一段语音的毫秒数.

(3)加窗:因为之后要做FFT,每帧信号需要与一个平滑函数相乘,让帧两端平滑的衰减到0,通常选用的窗函数: Hamming window,Hanning window。好的窗函数也能减弱频谱泄漏。由于帧与帧连接处的信号因为加窗而弱化,如果没有overlap,这部分信息就丢失了。

(4)然后是补零(zero-padding):   因为做FFT(快速傅里叶变化)要求信号长度为2^n,所以如果采样率为16000Hz,16000*0.025=400,要补0使长度为512。

(5)FFT: 将时域谱转化为频率谱,纵坐标变为能量。fourier transform逐帧进行的,为的是取得每一帧的频谱。一般只保留幅度谱,丢弃相位谱。这个地方是相位谱是相对原点经过的的路程,由于是逐帧取,每帧时间固定,所以不需要保留相位谱(频域的相位就是时域的时间)。

(6)mel滤波——转化到梅尔刻度(听觉音高单位),梅尔刻度将纯音的感知频率或音调与其实际测量频率相关联。 人们在识别低频时音高的微小变化方面比在高频时更好。 结合这种规模使我们的功能更接近人类听到的。具体做法为让原始信号通过一系列滤波器,实验中取40个,这40个滤波器的横轴在单位为梅尔时是均匀的。

 

 

(7)DCT,离散余弦变换,得到倒谱系数,也就是MFCC,通常保留1~13维,然后可以加上delta,delat-delta,和每帧能量

语音被分为很多帧,每帧语音都对应于一个频谱(通过短时FFT计算),频谱表示频率与能量的关系。在实际使用中,频谱图有三种,即线性振幅谱、对数振幅谱、自功率谱(对数振幅谱中各谱线的振幅都作了对数计算,所以其纵坐标的单位是dB(分贝)。对数变换的目的是使那些振幅较低的成分相对高振幅成分得以拉高,以便观察掩盖在低幅噪声中的周期信号)。

       我们先将其中一帧语音的频谱通过坐标表示出来,如上图左。现在我们将左边的频谱旋转90度。得到中间的图。然后把这些幅度映射到一个灰度级表示(也可以理解为将连续的幅度量化为256个量化值?),0表示黑,255表示白色。幅度值越大,相应的区域越黑。这样就得到了最右边的图。那为什么要这样呢?为的是增加时间这个维度,这样就可以显示一段语音而不是一帧语音的频谱,而且可以直观的看到静态和动态的信息。

      得到一个随着时间变化的频谱图,这个就是描述语音信号的声谱图

 

在声谱图中表示语音的优势?

      首先,音素(Phones)的属性可以更好的在这里面观察出来。另外,通过观察共振峰和它们的转变可以更好的识别声音。隐马尔科夫模型(Hidden Markov Models)就是隐含地对声谱图进行建模以达到好的识别性能。还有一个作用就是它可以直观的评估TTS系统(text to speech)的好坏,直接对比合成的语音和自然的语音声谱图的匹配度即可。

 

上图1——是一个语音的频谱图。峰值就表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。所以它特别重要。用它就可以识别不同的声音。

上图2——提取共振峰的位置以及它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。

将原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB。那现在我们需要把这两部分分离开,这样我们就可以得到包络了。

上图3——logX[k]=log{H[k]*E[k]}= logH[k] + logE[k]

取对数的变换,可以把乘性关系变成加性关系

目的是在给定X[k]的情况下,求出符合要求的logH[k] 和 logE[k]

mel滤波器的形式有两种

共同点是三角形是低频密、高频疏的,这可以模仿人耳在低频处分辨率高的特性

 

第一种:幅值相同,都是1,不随宽度的改变而改变

图中m表示不同频率处的能量,三角窗口表示滤波窗口。三角窗口可以覆盖从0到Nyquist的整个频率范围,通常我们会设定频率上限和下限,屏蔽掉某些不需要或者有噪声的频率范围。三角形的数量表示Mel滤波之后特征向量的维度。

 

第二种:幅值随着宽的增加而改变高度,保证其面积不变;公式

 

三角带通滤波器有两个主要目的:

对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。(因此一段语音的音调或音高,是不会呈现在 MFCC 参数内,换句话说,以 MFCC 为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响) 此外,还可以降低运算量。

在每个三角形内积分,就可以消除精细结构,只保留音色的信息。当然,对于有声调的语言来说,音高也是有用的,所以在MFCC特征之外,还会使用其它特征刻画音高。

取上一步结果的对数。由于高频部分的能量比较低,低频部分的能量比较高,可以放大低能量处的能量差异;更深层次地,这是在模仿倒谱(cepstrum)的计算步骤。

为什么是对数而不是立方根?

对数允许我们使用倒频谱平均减法,这是一种信道归一化技术。

到这里为止,40个三角滤波器的结果就是Fbank的特征了,所以Fbank不是倒谱特征,这里如果取26个三角滤波器的话,那么fbank的维度就是26维

求倒谱时这一步仍然用的是傅里叶变换。计算MFCC时使用的离散余弦变换(discrete cosine transform,DCT)是傅里叶变换的一个变种,好处是结果是实数,没有虚部。DCT还有一个特点是,对于一般的语音信号,这一步的结果的前几个系数特别大,后面的系数比较小,可以忽略。上面说了一般取40个三角形,所以DCT的结果也是40个点;实际中,一般仅保留前13~20个,这就进一步压缩了数据。得到梅尔倒谱。DCT 有好多实现方法。

 

郑重提示:自己编程熟悉熟悉练练手就行了,真想上手用来做课题,还是用现成库靠谱,速度快不说,还经受了时间的检验,因此放上python上的语音处理库:librosa

实例说明mel计算(参考http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/

1.取10个滤波器,规定频率范围是300-8khz,

 

2.线性等间隔,根据公式(1)可得,m(i)上等间隔

 

3.由公式(2)转到频域,可得

 

4.并不会用滤波器去计算频率的精确分辨率,在已知采样率和nfft的情况下,计算fft bin

 

此处取nfft=256,计算得到fft bin的近似结果为(小数位数舍弃保留整数)

 

5.写滤波器:第一个滤波器在第一个点开始,在第二个点到达峰值,在第三个点结束,在其余点为零;

 

得到的mel 滤波器包含10个fbank,这个fbank从0hz-8000hz,上述的示例从300hz开始

 

Deltas and Delta-Deltas §

MFCC特征向量仅描述单个帧的功率谱包络,但似乎语音也将具有动态信息,即MFCC系数随时间的轨迹。 事实证明,计算MFCC轨迹并将它们附加到原始特征向量会使ASR性能提高很多(如果我们有12个MFCC系数,我们也会得到12个delta系数,它们将结合起来给出一个长度为24的特征向量)。

计算delta系数的公式

delta系数,就静态系数Ct+n和Ct-n而言计算的,N的典型值是2

delta-delta系数是加速系数,是就dt计算的,而不是静态系数

 

 

 

 

 

 

 

 

 

 

 

python代码实现 :https://github.com/jameslyons/python_speech_features 

参考:https://blog.csdn.net/zouxy09/article/details/9156785

参考:虚生https://www.cnblogs.com/dylancao/tag/%E9%9F%B3%E9%A2%91%E7%AE%97%E6%B3%95/

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值