本文将讲解一下Kaldi的提取MFCC的源码,MFCC特征作为语音信号处理技术的常用特征之一,主要包含以下几个部分:

MFCC特征提取流程

其中kaldi的提取的模块架构图如下

Kaldi提取模块架构图

接口函数

featbin/compute-mfcc-feats.cc

接口函数

输入:waveform---音频信号,wave_data.SampFreq() ----音频采样率,vtln_warp_local---vtln参数

输出:features--- MFCC特征

分帧、加窗、预加重

分帧、加窗、预加重的函数接口在feat/feature-common-inl.h ,

其具体实现在feat/feature-window.cc

分帧

ExtractWindow()

输入: sample_offset ----偏移量(一般为零) wave---音频信号  f---第几帧(帧数的下标)opts---分帧的配置参数(设置帧长、帧移动等参数) window_function---窗函数类型

输出:window---加窗后的帧信号  log_energy_pre_window---每个窗函数的log能量

作用:通过opts中设置的frame_length,frame_shift,计算每帧信号的起始点与终止点,并送入加窗函数ProcessWindow中。

预加重、加窗

输入:opts---分帧的配置参数(设置帧长、帧移动等参数) window_function---窗函数类型  window---加窗前的帧信号

输出:window---加窗后的帧信号  log_energy_pre_window---每个窗函数的log能量

作用:在ProcessWindow函数,kaldi先通过Preemphasize函数对加窗前的信号进行预加重,并通过MulElements函数,计算加窗后的帧信号window 并输出。

预加重

输入:waveform---加窗前的帧信号,preemph_coeff---预加重系数

输出:waveform---预加重后的帧信号

作用:waveform[i]=waveform[i]-a*waveform[n-1] , a = 预加重系数;

对于kaldi 其每帧的初始信号加重后为waveform[0]=waveform[0]-a*waveform[0]。

FFT  功率谱

feat/feature-mfcc.cc

FFT与计算功率谱的方法,各个函数介绍的很清楚,这边就在不在细说了~

其中RealFft函数为计算FFT函数,ComputePowerSpectrum函数为计算功率谱

Mel banks,并计算Mel频谱

其中红框内GetMelBanks函数为生成Mel滤波器组的函数,红框内Compute函数为功率谱函数经过滤波器后的输出

生成Mel banks

feat/mel-computations.cc

输入:opts---mel滤波器相关参数(滤波器组的个数等)  frame_opts----分帧的配置参数(设置帧长、帧移动等参数)                                 vtln_warp_local---vtln参数

输出:返回一个滤波器组

作用:通过对opts.low_freq与opts.high_freq进行梅尔坐标转换后,计算梅尔值域。根据滤波器组的个数num_bins,在梅尔至于建立若干个三角滤波器

其中每个滤波器中的每个点值为(如下)每个滤波器共有fft个点

 if (mel <= center_mel)weight = (mel - left_mel) / (center_mel - left_mel);elseweight = (right_mel-mel) / (right_mel-center_mel);

计算Mel频谱

输入:power_spectrum---功率谱

输出;mel_energies_out---mel频谱输出

作用:mel滤波器组举证与功率频谱相乘

求倒谱

Log

Dct

[Kaldi] MFCC特征提取源码详解相关推荐

  1. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  2. 【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: ServerMediaSession.ServerMediaSubsession.Dy ...

  3. 【Live555】live555源码详解系列笔记

    [Live555]liveMedia下载.配置.编译.安装.基本概念 [Live555]live555源码详解(一):BasicUsageEnvironment.UsageEnvironment [L ...

  4. 【Live555】live555源码详解(八):testRTSPClient

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的testRTSPClient实现的三个类所在的位置: ourRTSPClient.StreamClient ...

  5. 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: GenericMediaServer.RTSPServer.RTSPClient 14 ...

  6. 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: FramedSource.RTPSource.RTPSink 11.FramedSou ...

  7. 【Live555】live555源码详解(五):MediaSource、MediaSink、MediaSession、MediaSubsession

    [Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的四个类所在的位置: MediaSource.MediaSink.MediaSession.MediaSub ...

  8. 【Live555】live555源码详解(四):Medium媒体基础类

    [Live555]live555源码详解系列笔记 7.Media Medai所依赖关系图 依赖Medai关系图 Media和UsageEnvironment关联图

  9. 【Live555】live555源码详解(二):BasicHashTable、DelayQueue、HandlerSet

    [Live555]live555源码详解系列笔记 3.BasicHashTable 哈希表 协作图: 3.1 BasicHashTable BasicHashTable 继承自 HashTable 重 ...

  10. 【Live555】live555源码详解(一):BasicUsageEnvironment、UsageEnvironment

    [Live555]live555源码详解系列笔记 类关系图 1.UsageEnvironment 详解 1.1 BasicUsageEnvironment BasicUsageEnvironment ...

最新文章

  1. 为什么要进行数据归一化
  2. Linux内核进程管理基本概念-进程、运行队列、等待队列、进程切换、进程调度
  3. dwz中弹出的窗口页面如何获取前页面(点击按钮的页面)的元素???
  4. 在MySQL 5.7下排查内存泄露和OOM问题全过程
  5. shutil python_shutil模块
  6. STB 上Linux软件系统解决方案
  7. python中for循环语句格式_python中for循环和可迭代对象遍历
  8. 打造最便捷的异步分页技术(提供下载)
  9. 灵活的javaScript
  10. 用“看板图”实现敏捷项目的可视化
  11. 学生签到系统c代码_C语言之学生管理系统代码(完整)
  12. SpringCloud
  13. 单片机实验(十二)单片机矩阵按键控制数码管
  14. matlab2017百度百科,沸石粉里的吸蓝量是什么意思
  15. eSPI自学笔记(二):Perpheral Channel与Subtractive Decode
  16. mac1200r 服务器无响应,新版水星(MERCURY)MAC1200R路由器怎么设置?
  17. 2016年东莞市程序设计竞赛镇区选拔赛上机试题小学组:seat(找座位)
  18. Java-进阶:多线程1,2个月面试腾讯、B站、网易等11家公司的面经总结
  19. opencv入门:支持向量机,K均值聚类
  20. IP地址0.0.0.0表示什么

热门文章

  1. 12306验证码识别初尝试(1)
  2. 用VMware克隆CentOS 6.4后HWaddr和UUID的设置
  3. VM虚拟机安装Linux系统
  4. uniapp 集成腾讯云超级播放器问题
  5. layui - 模板引擎
  6. iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
  7. winpCap中compile和nocap函数
  8. weadmin3.0版本安装过程
  9. 高数笔记(六):拉格朗日中值定理,柯西中值定理,洛必达法则,泰勒定理
  10. oracle 00314,【案例】Oracle报错ORA-00314 数据库异常关机导致redo SCN不一致无法启动...