在语音识别研究领域,音频特征的选择至关重要。在这里介绍一种非常成功的音频特征——Mel Frequency Cepstrum Coefficient(MFCC),中文名字为梅尔频率倒谱系数。MFCC特征的成功很大程度上得益于心理声学的研究成果,它对人的听觉机理进行了建模。我们知道音频信号从时域信号转化为频域信号之后,我们可以得到各种频率分量的能量分布。心理声学的研究结果表明,人耳对于低频信号更加敏感,对于高频信号less sensitive,具体是一种什么关系?心理声学研究结果表明,在低频部分是一种线性的关系,但是随着频率的升高,人耳对于频率的敏感程度呈现对数增长的态势。这意味着仅仅从各个频率能量的分布设计符合人的听觉习惯的音频特征不是非常合理的。

  MFCC 特征的设计者正式利用了上述人类的听觉特性,使用了梅尔滤波器来对频率分布进行滤波。这里的梅尔滤波器的设计充分体现了上面提到的人的听觉机理的问题。下面我们将详细介绍MFCC特征。

一、作为一种频率域的音频特征,离散傅里叶变换是这些特征计算的基础。一般我们会选择快速傅里叶变换FFT算法。

相关的能量的求取解释可以参考FFT部分,一个比较粗略的流程是这样的。

二、梅尔滤波器

实际上是一种三角形滤波器,首先对frequency通过下面的公式映射到mel 标度

下面这张图充分体现了两者的关系。

在mel scale我们是对其进行等宽度的划分,但是在frequency scale可以看到,随之而变化的幅度确实逐渐变大的,在低频部分刚开始并不是非常明显的,但是随着频率的增大,这种趋势变得愈加明显。

mel三角形滤波器的设计是在mel scale进行的,相邻滤波器之间存在交叉的部分,下一个滤波器的开始位置是上一个滤波器的中心频率位置,假设mel scale的范围为[0,max],假设要划分为N个梅尔滤波器,根据上面的分析,我们要将其等距划分为N+1块,如下所示。我们要获得7个mel filter,则将mel scale等间距划分为了8个区域,使用如图所示的方式可以得到7个filter。每个三角形的中间位置是mel滤波器的中间位置,将其使用上面的公式的反变换,反变换到frequency,可以得到相应的mel滤波器的中心频率。

当然上面这张图的目的只是为了确定mel滤波器的边界,在实际当中的mel滤波器的filter过程是使用了在相对应的频率域的公式来进行的

如下所示,我们可以得到在频率域的mel滤波器。通过上面的计算我们可以得到相应的N+1个三角滤波器的frequency的边界,我们将其记为$f(m),m=0,1,2,...,N$

下面的有的图像引用自http://my.oschina.net/jamesju/blog/193343,在此版权说明

我们会发现上面的公式的分母是一个常数,而且随着frequency的增大,这个常数相对的也增大了,而且增大的幅度更大,所以造成整体的$H_{m}(k)变小$,从而说明随着频率的增大,相应的filter权重会变小,这也说明了对于低频部分的重视。

下面所示为滤波器的一个简单示意图。

上面的滤波的结果,是导致得到了N个值,因为每一个滤波器,会在对相应的频率能量加权之后,进行了求和运算。

三、非线性变换

一般为log对数运算

四、离散余弦变换  (DCT)

参考资料:

http://my.oschina.net/jamesju/blog/193343

MFCC的更多相关文章

  1. MFCC特征提取(C语言版本)

    音频分析中,MFCC参数是经典参数之一.之前对于它的计算流程和原理,大体上是比较清楚的,所以仿真的时候,都是直接调用matlab的voicebox工具或者开发的时候直接调用第三方库.最近想整理一个纯C ...

  2. MFCC可视化

    大多数文章和博客介绍都是MFCC的算法流程,物理意义,这里仅仅从数据分布可视化的角度,清晰 观察MFCC特征在空间中的分布情况,加深理解. MFCC处理流程: MFCC参数的提取包括以下几个步骤: 1 ...

  3. MFCC matlab code

    %function ccc=mfcc(x) %归一化mel滤波器组系数 filename=input('input filename:','s'); [x,fs,bits]=wavread(filen ...

  4. 语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient)

    语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient) 原理 梅尔频率倒谱系数:一定程度上模拟了人耳对语音的处理特点 预加重:在语音信号中,高频部分的能 ...

  5. 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)

    今天一直在查找语音频谱之类的问题,今天正好有机会和大家共享一下. 语音信号处置之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy0 ...

  6. mfcc的特征提取python 代码实现和解析

    #!/usr/bin/python # -*- coding: UTF-8 -*- import numpy import scipy.io.wavfile from matplotlib impor ...

  7. MFCC特征参数提取流程概述

      一 概念概述: 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale Frequenc ...

  8. MFCC/Filter Bank的提取流程

    预加重:通过一个一阶有限激励响应高通滤波器,使信号的频谱变得平坦,不易受到有限字长效应的影响. 分帧:根据语音的短时平稳特性,语音可以以帧为单位进行处理,实验中选取的语音帧长为32ms,帧移为16ms ...

  9. HTK计算mfcc/filter_bank源码解析

    HTK计算mfcc/filter_bank源码解析 HTK可以用简单的 HCopy -C config -s scp 求取mfcc或者filter_bank 关于mfcc的原理在 http://my. ...

  10. 语音笔记:MFCC

    一,传统语音识别体系结构 二,MFCC特征提取 MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数.梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率 ...

随机推荐

  1. windows核心编程

    第一章 函数返回值: void:不可能失败.极少数会返回VOID BOOL:失败返回0 HANDLE:失败会返回NULL 或INVALID_HANDLE_VALUE PVOID:失败返回NULL wa ...

  2. go语言sync包的学习(Mutex、WaitGroup、Cond)

    package main; import ( "fmt" "sync" "runtime" "time" ) //加锁, ...

  3. C语言的那些事

    变量的存数类型: 1:静态变量:凡是在代码任何快之外声明的变量总是存储在静态内存内,也就是不属于堆栈的内存. 对于这类变量.你无法对它们制指定存储类型. 2:存储于堆栈中,称为自动变量.当程序执行到声 ...

  4. 点评10款Github上最火爆的国产开源项目

    衡量一个开源产品好不好,看看产品在Github的Star数量就知道了.由此可见,Github已经沦落为开源产品的“大众点评”了. 一个开源产品希望快速的被开发者知道.快速的获取反馈,放到Github上 ...

  5. git 本地仓库与远程仓库的连接

    在远程如github新建一个项目名称为blog, 本地项目为store,是一个laravel框架项目,首先用 git init初始化本目,然后用git remote add origin git@gi ...

  6. 继承 (js原型链)

    原型链是实现继承的主要方法.基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法. 1.构造函数.原型.实例的关系: 每个构造函数都有原型属性(Prototype),指向一个原型对象(函数创 ...

  7. linux利用crontab设置定时任务运行jar包

    参考链接: 1.http://blog.csdn.net/javadhh/article/details/42779505 2.http://blog.csdn.net/cctv_liu/articl ...

  8. ubuntu下firefox打开mht文件

    1.安装firefox插件:UnMHT 插件地址:http://www.unmht.org/unmht/en_index.html 2.用firefox打开mht文件

  9. 让delphi像C语言一样灵活

    lazarus是免费的delphi 拥有和c语言一样的灵活性,见代码: procedure TForm1.FormCreate(Sender: TObject);var p:PIntegerArray ...

  10. vim窗口切换

    参考资料: http://www.cnblogs.com/litifeng/p/8282479.html 当用vim写代码的时候,我喜欢一边看着头文件中结构的定义,一边编写实现的代码,这样就经常用到多 ...