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钟状的宽度。

语音识别算法原理文档整理(一)相关推荐

  1. 语音识别算法原理文档整理(三)

    语音识别系统kaldi 相关原理介绍 Kaldi是一个非常强大的语音识别工具库,主要由Daniel Povey开发和维护.目前支持GMM-HMM.SGMM-HMM.DNN-HMM等多种语音识别的模型的 ...

  2. Android 学习文档整理收集

    利用闲暇时间整理了一份 Android 学习文档整理收集,希望能够对大家有所帮助,也欢迎各位帮忙补充. Android Android基础入门教程 CSDN主题Android专栏 极客头条Androi ...

  3. 将Html文档整理为规范XML文档

    有多种方式可以在.NET 平台进行HTML文件解析.数据提取,其中最简单.稳妥的办法是先使用工具将Html文档整理成XML文档,再通过XML Dom模型或XPath灵活地进行数据处理.SGML便是一个 ...

  4. django+nginx+uwsgi项目部署文档整理

    django+nginx+uwsgi项目部署文档整理 参考文章:https://blog.csdn.net/qq_42314550/article/details/81805328 一.python安 ...

  5. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

    Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平 ...

  6. 永磁同步电机的MTPA最大转矩电流比控制算法的仿真模型,有详细的算法设计文档

    永磁同步电机的MTPA最大转矩电流比控制算法的仿真模型,有详细的算法设计文档. 永磁同步电机的数学模型: 永磁同步电机的矢量控制原理: 最大转矩电流比控制: 前馈补偿提高抗负载扰动性能: 弱磁控制: ...

  7. 2503平台GPS MT3333秒定参考文档整理 - MTK物联网在线解答 - 技术论坛

        2503平台GPS MT3333秒定参考文档整理 [DESCRIPTION] 以下是目前整理的给客户参考的2503秒定测试及GPS介绍的文档,其中均可在DCC上下载. [SOLUTION] 2 ...

  8. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  9. 震惊!阿里P8爆出学透这份算法面试文档后,任何大厂算法都是小意思

    为什么要学习数据结构和算法? 随着应用程序变得越来越复杂和数据越来越丰富,几百万.几十亿甚至几百亿的数据就会出现,而对这么大对数据进行搜索.插入或者排序等的操作就越来越慢,数据结构就是用来解决这些问题 ...

  10. Airsim Python API文档整理(1.3.1版本)

    AirSim公开了API,可以调用API与仿真器进行交互(核心就是通过RPC向仿真器发消息,进行模拟),可以通过API获取图像.状态和控制车辆等. API有Python版本和C++版本的,Python ...

最新文章

  1. IOS-UIDynamic
  2. bug?VS2010中CImageList::DrawIndirect总是返回失败
  3. cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程
  4. 面象对象设计6大原则之五:依赖倒置原则
  5. 软件开发管理(产品经理客户和程序员互撕解决方案)
  6. 女的喜欢OBC男的喜欢OGC的含义(转)
  7. (三)比特币时间序列数据的AI异常检测
  8. Velocity中避免null引起的数据问题
  9. hdu 1497(图书管理系统模拟)
  10. 【PostgreSQL-9.6.3】函数(1)--数值型函数
  11. 在Xcode编译的时候,报这个错误"library not found for -
  12. 同济线性代数教材(第五版)-第1章 行列式
  13. for循环及判断语句的20个经典习题
  14. 技术储备(一):CGI介绍
  15. java画图抗锯齿_Android编程画图之抗锯齿解决方法
  16. 每日必读DZone news - 2022年2月十大DZone文章
  17. 3、Qt5 主窗口点击按钮 弹出另一个自定义窗口
  18. 美国Top50金融科技公司简介
  19. C语言学习之volatile
  20. 数据库逻辑设计之 三大范式 及 反范式化 优缺点

热门文章

  1. API接口出来了,填写客户收货地址不用烦,自动填写不出差错
  2. 核心网upf作用_5G核心网SMF和UPF拓扑增强技术研究
  3. 征途猎魔mysql数据库_字典列表的拓展理解
  4. Netty权威指南2.2伪异步IO,Demo代码
  5. 猿创征文|深度学习基于ResNet18网络完成图像分类
  6. 在Latex中插入FontAwesome图标
  7. 每日一词20190313——地图矢量化
  8. 计算机辅助园林设计ps,《CAD PS辅助园林设计》课程教学大纲.doc
  9. 利用js打开新页面,每次打开都是同一窗口
  10. java、sftp文件服务器的操作(获取链接。上传、下载,删除,获取图片或者文件)