语音识别算法原理文档整理(一)

MFCC提取过程

硕士毕业后,一直从事算法工程师,具有丰富的深度学习,图像视频处理经验,因此录制了一些课程,欢迎大家观看,有问题可以找我私聊:QQ:81664352,谢谢
基于web端的人脸识别算法视频教程
1.掌握深度学习图像处理(基于keras、tensorflow、opencv)
2.掌握web前后端设计(基 于flask框架)
3.开发基于web端的深度学习图像,把web端应用与人工智能相结合
视频教程
https://edu.csdn.net/course/detail/28400/391614?pre_view=1

声音是模拟信号,声音的时域波形只代表声压随时间变化的关系,不能很好的代表声音的特征,因此,必须将声音波形转换为声学特征向量。目前有许多声音特征提取方法,如梅尔频率倒谱系数MFCC、线性预测倒谱系数LPCC、多媒体内容描述接口MPEG7等,其中MFCC是基于倒谱的,更符合人的听觉原理,因而是最普遍、最有效的声音特征提取算法。在提取MFCC前,需要对声音做前期处理,包括模数转换、预加重和加窗。
模数转换就是把模拟信号转换为数字信号,包括两个步骤:采样和量化,即以一定的采样率和采样位数把声音连续波形转换为离散的数据点。由于日常生活中的声音一般都在8kHz以下,根据Nyquist定律,16kHz采样率足以使得采样出来的数据包含大多数声音信息。16kHz意味着1s的时间内采样16k个样本,这些样本都是以幅度值存储,为了有效存储幅度值,需要将其量化为整数。对于16位采样位数来说,可以表示-32768~32767之间的整数值,所以可以将采样幅度值量化为最近的整数值。
采样和量化后的波形表示为x[n],其中n是时间索引。然后可以对x[n]做MFCC特征提取,算法流程图如图:
这里写图片描述

一、预加重

MFCC特征提取的第一步是增加声音高频部分的能量。对于声音信号的频谱来说,往往低频部分的能量高于高频部分的能量,每经过10倍Hz,频谱能量就会衰减20dB,为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,此外为使高频部分的能量和低频部分能量有相似的幅度,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,则需要提升高频部分的能量。加强高频部分的能量能使声学模型更好的利用高频共振峰,从而提高识别准确率。
预加重可以通过一个一阶高通滤波器实现,在时域,如果输入信号是x[n],并且式中μ的值介于0.9-1.0之间,我们通常取0.97,滤波器表示为y[n]=x[n]- μx[n-1];在频域则表示为:
这里写图片描述

二、分帧加窗

先将N个采样点集合成一个观测单位,称为帧。通常情况下N的值为256或512,涵盖的时间约为20~30ms左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000×1000=32ms。
日常生活中的声音一般是非平稳信号,其统计特性不是固定不变的,但在一段相当短的时间内,可以认为信号是平稳的,这就是加窗。窗由三个参数来描述:窗长(单位毫秒)、偏移和形状。每一个加窗的声音信号叫做一帧,每一帧的毫秒数叫做帧长,相邻两帧左边界的距离叫帧移。
从信号s[n]中提取一帧的过程可表示为y[n]=w[n]s[n],如果w[n]是矩形窗,则信号会在边界处切断,这些不连续会对傅里叶分析造成影响。因此在MFCC中,加窗一般使用边缘平滑降到0的汉明窗,表达式如下:
这里写图片描述
其中L为帧长。

三、离散傅里叶变换

由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。设语音信号的DFT为:
这里写图片描述
式中x[n]为输入的语音信号,N表示傅里叶变换的点数。
计算DFT常用的一个算法是快速傅里叶变换(FFT),它非常高效但是一般要求N是2的幂。

四、 Mel滤波器组

FFT的结果包含此帧信号在每一频带的能量信息。但是,人耳听觉对不同频带的敏感度是不同的,人耳对高频不如低频敏感,这一分界线大约是1000Hz,在提取声音特征时模拟人耳听觉这一性质可以提高识别性能。在MFCC中的做法是将FFT输出的频率对应到mel刻度上。一mel是一个音高单位,在音高上感知等距的声音可以被相同数量的mel数分离。频率(单位Hz)和mel刻度之间的对应关系在1000Hz以下是线性的,在1000Hz以上是对数的,其计算公式如下:
这里写图片描述
式中f为频率,单位为Hz。下图展示了Mel频率与线性频率的关系:
这里写图片描述
在计算MFCC时,将FFT频谱通过一组mel滤波器组就可以转换为mel频谱。Mel滤波器组一般是一组mel刻度的三角形滤波器组,1000Hz以下的10个滤波器线性相隔,1000Hz以上的剩余滤波器对数相隔。定义一个有M个滤波器的滤波器组,采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,…,M,M通常取22-26(滤波器的个数和临界带个数相近)。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图:
这里写图片描述
每个三角滤波器的频率响应为:
这里写图片描述
式中 。
使用三角带通滤波器两作用:
1、可以对频谱进行平滑,并消除谐波的作用,突显原始声音的共振峰。因此一段声音的音调或音高,不会反应在MFCC参数内,也就是说以MFCC作为声学特征,并不会受到输入声音的音调不同而对识别结果有所影响。
2、还可以降低运算量。
在得到mel频谱后,计算每个滤波器组输出的对数能量。一般人对声音声压的反应呈对数关系,人对高声压的细微变化敏感度不如低声压。此外,使用对数可以降低提取的特征对输入声音能量变化的敏感度,因为声音与麦克风之间的距离是变化的,因而麦克风采集到的声音能量也是变化的。每个滤波器输出的对数能量为:
这里写图片描述

五、倒谱:离散余弦变换(DCT)

尽管可以用mel频谱本身作为声音特征,但使用倒谱有其优点并且可以提高识别性能。抛开预加重和mel刻度转换,倒谱的定义可以看做是频谱对数的频谱,即将标准幅度谱的幅度值先取对数,然后形象化对数谱使其看起来像声音波形。倒谱这个单词cepstrum正是将单词spectrum(频谱)的前四个字母颠倒而来,频谱是将时域信号变换为频域信号,倒谱则是将频域信号又变换回时域信号;在波形上,倒谱与频谱有相似的波形,即如果频谱在低频处有个峰值,则倒谱在低倒谱系数上也有峰值,如果频谱在高频处有个峰值,则倒谱在高倒谱系数上也有峰值。所以如果是为了检测音元,可以用低倒谱系数;如果是检测音高,则可以用高倒谱系数。倒谱系数的优点是其不同系数的变化是不相关的,意味着高斯声学模型(高斯混合模型GMM)无需表现所有MFCC特征的协方差,因而大大减少了参数数量。
利用滤波器的对数能量,倒谱系数可以由离散余弦变换获得:
这里写图片描述
式中L指MFCC阶数,通常12阶就可以代表声学特征;M指三角滤波器个数。
六、能量和差分
某一帧的能量定义为某一帧样本点的平方和,对于一个加窗信号x,其从样本点t1到样本点t2的能量为:
这里写图片描述
实际应用中也可以将上式取以10为底的对数值,再乘以10。若要加入其他声音特征如音高、过零率及共振峰等也可以在这一阶段加入。
以上提取的特征每一帧单独考虑,是静态的,而实际声音是连续的,帧与帧之间是有联系的,因而需要增加特征来表示这种帧间的动态变化,这通常通过计算每一帧13个特征(12个倒谱特征加上1个能量)的一阶差分甚至二阶差分来实现。一个简单计算差分的方法就是计算当前帧前后各一帧的13个特征的差值:
这里写图片描述
如果不考虑二阶差分,最终每一帧的MFCC特征为26维度:12维倒谱系数、12维倒谱系数差分、1维能量和1维能量差分。

高斯函数gmm

Gaussian Function, 也简称为Gaussian,一维形式如下:
这里写图片描述
对于任意的实数a,b,c,是以著名数学家Carl Friedrich Gauss的名字命名的。高斯的一维图是特征对称“bell curve”形状,a是曲线尖峰的高度,b是尖峰中心的坐标,即均值,c称为标准方差,表征的是bell钟状的宽度。

这里写图片描述

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页