一、MFCC计算总体流程

1.信号的预处理,包括预加重(Preemphasis),分帧(Frame Blocking),加窗(Windowing)。假设语音信号的采样频率fs=8KHz.由于语音信号在10-30ms认为是稳定的,则可设置帧长为80~240点。帧移可以设置为帧长的1/2.

预加重处理其实是一个高通滤波器,该高通滤波顺的传递函数为:

其中的取值为0.97,该高通滤波器作用是滤去低频,使语音信号的高频特性更加突现。

由于语音信号只在较短的时间内呈现平稳性(一般认为

10-30ms

),(项目中每帧是24ms,48K pcm每ms 48个采样点,24 * 48 = 1152)因此将语音信号划分为一个一个的短时段即一帧。同时为避免丢失语音信号的动态信息,相邻帧之间要有一段重叠区域,重叠区域一段为帧长的

1/2

1/3

。然后再将每帧乘上窗函数,以增加每帧左端和右端的连续性。

2.对每一帧进行FFT变换,求频谱,进而求得幅度谱。

对分帧加窗后的各帧信号进行FFT变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。

3.对幅度谱加Mel滤波器组(Mel滤波器组设计问题)。

4.对所有的滤波器输出做对数运算(Logarlithm),再进一步做离散余弦变换DCT可得MFCC。做对数运算是为了

调到分贝(dB)域(也是为了模拟人耳),DCT是为了压缩。只用20个coefficients表示,阔以重建mfcc(dB)。

图1:DCT压缩前的MFCC in dB

图2为DCT系数矩阵、DCT压缩后、DCT重建后的mfcc_dB

流程图如下所示:

二、实际频率与Mel频率的转换

Mel频率与实际频率的具体关系如下:

人耳的听觉特性与Mel频率的增长一致。与实际频率在1000Hz以下呈现线性分布,1000Hz以上呈现对数增长。

Mel

频率轴上配置

K

个通道的三角形滤波器组,

K

的个数由信号的截止频率决定。

设计的过程如下:

假设语音信号的采样频率,帧长N=256,滤波器个数K=22

由此可得语音信号的最大频率为:(奈奎斯特)

根据下面的公式:

               //10为底

可以求得出最大的Mel频率为:

由于在Mel刻度范围内,各个三角滤波器的中心频率是相等间隔的线性分布。由此,可以计算两个相邻三角滤波器的中心频率的间距为:

因此,各三角形滤波器在mel刻度上的中心频率可以表示为:

Mel(f(m))-Mel(f(m-1))=Mel(f(m+1))-Mel(f(m))

由上面的中心频率可以计算出对应的线性刻度上的频率。如下图所示:可以看出在y轴,mel中心频率是均匀分布的,而在x轴,随着频率

增大,f中心频率间隔越来越大。

下面采用Matlab设计Mel三角形滤波器如下:

//获取Mel三角滤波器的参数

fs为采样频率,filterNum为三角滤波器的个数

maxMelFreq = freq2mel(fs/2); %将线性频率转化为mel频率,得到最大的Mel频率

sideWidth=maxMelFreq/(filterNum+1);%求频带宽带,即Mel滤波器宽度

index=0:filterNum-1;%滤波器的中心

filterBankPrm=floor(mel2freq([index;index+1;index+2]*sideWidth)/fs*frameSize)+1;

filterBankPrm(end, end)= frameSize/2;

得到如下的三角形滤波器,横坐标对应于FFT中的点的下标:

注:这里选择的帧长为256点,然后FFT的点数也为256,由于是对称的,所以只取前面一半的点计算频谱。然后加入到三角滤波器中。

每一个三角形滤波器的中心频率c(l) 在Mel频率轴上等间隔分布。设o(l),c(l),h(l) 分别是第l 个三角形滤波器的下限,中心,和上限频率,则相邻三角形滤波器之间的下限,中心,上限频率的关系如下:c(l)=h(l-1)=o(l+1)

根据语音信号幅度谱

求每个三角形滤波器的输出。

对所有的滤波器输出做对数运算,再进一步做离散余弦变换(DCT)即可得到MFCC。

由上公式可知,MFCC特征参数的长度与滤波器的个数无关。只与DCT有关。

% === 对幅度谱进行三角滤波过程

function tbfCoef = triBandFilter(fftMag, P, filterBankParam)

fstart=filterBankParam(1,:);                %fftMag一帧数据的幅度谱

fcenter=filterBankParam(2,:);%滤波器的中心点,每列代表一个滤波器的中心频率

fstop=filterBankParam(3,:);

% Triangular bandpass filter.

for i=1:P %滤波器个数

for j = fstart(i):fcenter(i), %第i个滤波器起始频谱点和中心频谱点的输出

filtmag(j) = (j-fstart(i))/(fcenter(i)-fstart(i));

end

for j = fcenter(i)+1:fstop(i),

filtmag(j) = 1-(j-fcenter(i))/(fstop(i)-fcenter(i));

end

tbfCoef(i) = sum(fftMag(fstart(i):fstop(i)).*filtmag(fstart(i):fstop(i))'); %第i个滤波器的输出

end

tbfCoef=log(eps+tbfCoef.^2); %求得每个滤波器的对数输出,有多少个滤波器就有多少个输出,对应为每一帧

mfcc计算 java_MFCC特征提取详细计算过程相关推荐

  1. 机器翻译评价指标之BLEU详细计算过程

    简介 BLEU(Bilingual Evaluation Understudy),相信大家对这个评价指标的概念已经很熟悉,随便百度谷歌就有相关介绍.原论文为BLEU: a Method for Aut ...

  2. 普通克里金插值的详细计算步骤,适合初学者。

    普通克里金插值基本步骤: 1.衡量各点之间空间相关程度的测度是半方差,其计算公式为: h为样本点之间的距离:n为由h分开的成对样本点的数量:z为点的属性值(高程或其他属性值). 计算半方差时步骤如下: ...

  3. caffe 人脸特征提取并计算相似度

    caffe 人脸特征提取并计算相似度 背景 要做人脸识别相关任务,查了很多资料,最近比较火的center-loss做人脸识别.利用caffe-face的模型来提取人脸特征,由于一直都没有深入到caff ...

  4. 太阳能光伏发电和路灯应用系统的详细计算

    太阳能光伏发电和路灯应用系统的详细计算 城市 斜面日均辐射量 峰值日照时数 计算公式(峰值日照时数) 哈尔滨 15838 4.3997964 根据日均辐射量来计算峰值日照时数比较准确: 长春 1712 ...

  5. 边缘计算的深刻详细解读

    本文作者:小小呆   来源: CSDN 物联网的快速发展和云服务的推动使得云计算模型已经不能很好的解决现在的问题,于是,这里给出一种新型的计算模型--边缘计算.简言之:物联网催生了边缘计算. 边缘计算 ...

  6. 【有限元分析】异型密封圈计算泄漏量与参数化优化过程(带分析源文件)

    (需要源文件联系博主或者扣扣2386317960)20220809 下载链接 异型密封圈计算泄漏量与参数化优化过程 1.1.1 后处理 图3 25接触压力云图 从接触压力云图可以得出,异型密封圈主密封 ...

  7. 卫星位置计算的c语言,C语言-详细计算GPS卫星位置.doc

    C语言-详细计算GPS卫星位置.doc C语言计算GPS卫星位置1 概述在用GPS信号进行导航定位以及制订观测计划时,都必须已知GPS卫星在空间的瞬间位置.卫星位置的计算是根据卫星电文所提供的轨道参数 ...

  8. 1.2.3存储结构:主存编址计算、主存编址的过程、存储单元、编址内容、存储总容量

    1.2.3存储结构:主存编址计算.主存编址的过程.存储单元.编址内容.存储总容量 主存编址的过程 存储单元主存编址 存储单元 编址内容 存储总容量 例题 主存编址的过程 计算机是一个机器,它能够识别的 ...

  9. 使用EToCalculator 计算潜在蒸散发详细教程

    使用由世界 粮农组织开发的计算ET0的软件,最长可以计算一个月.方便使用,拜托EXCEL的繁琐,感谢原作者.期待基于python的蒸散计算的代码出现. 原作者链接:科学网-使用EToCalculato ...

最新文章

  1. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
  2. 定义一个dto对象_正确理解DTO、值对象和POCO
  3. AD,proteus操作
  4. java get方法不序列化_java常用序列化与反序列化方法
  5. mysql分表规则(转)
  6. RGB 转 YUV 算法
  7. IE9真的支持CSS3和HTML5?
  8. php软件开发--yii2框架搭建及gitlib同步线上网站
  9. php 生成器 封装,php生成器
  10. linux下怎么查看程序异常,linux程序莫名异常怎么查
  11. etcher制作mac启动盘_如何在Mac上创建和引导Linux USB驱动器
  12. 微信小程序05 事件绑定与事件传参
  13. Python3截图识字工具
  14. 计算机word上下左右边距,Word页边距调整设置(上下左右边距,2003-2013)
  15. PHP 加密解密函数
  16. 重磅!我组问卷调查结果公布
  17. 读NP-C及哥德尔不完备定理感想
  18. Ubuntu18.04 GoldenDict安装及配置
  19. 下载netflix视频linux,Netflix的正版视频可以离线下载到手机上了
  20. java cucumber_行为驱动:Cucumber + Java - 实现数据的参数化

热门文章

  1. 求100至200间的全部素数。
  2. 【NOJ1147】【算法实验三】【分支限界法】木乃伊迷宫
  3. 线性和非线性最优化理论、方法及应用研究的发展状况.
  4. TVM 学习指南(个人版)
  5. Git使用(Git安装、建立Git仓库、克隆Git仓库、提交代码至Git仓库)
  6. uniapp多语言添加i18n
  7. 华东师范计算机学硕难度,华东师范大学考研难吗?一般要什么水平才可以进入?...
  8. Normal Matrix推导 (法向量变换矩阵)
  9. KVO(Key-Value observing)介绍
  10. 基于Java+selenium+opencv模拟网页滑动验证