[Kaldi] MFCC特征提取源码详解
本文将讲解一下Kaldi的提取MFCC的源码,MFCC特征作为语音信号处理技术的常用特征之一,主要包含以下几个部分:
其中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特征提取源码详解相关推荐
- 李沐d2l《动手学深度学习》第二版——风格迁移源码详解
本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...
- 【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: ServerMediaSession.ServerMediaSubsession.Dy ...
- 【Live555】live555源码详解系列笔记
[Live555]liveMedia下载.配置.编译.安装.基本概念 [Live555]live555源码详解(一):BasicUsageEnvironment.UsageEnvironment [L ...
- 【Live555】live555源码详解(八):testRTSPClient
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的testRTSPClient实现的三个类所在的位置: ourRTSPClient.StreamClient ...
- 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: GenericMediaServer.RTSPServer.RTSPClient 14 ...
- 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: FramedSource.RTPSource.RTPSink 11.FramedSou ...
- 【Live555】live555源码详解(五):MediaSource、MediaSink、MediaSession、MediaSubsession
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的四个类所在的位置: MediaSource.MediaSink.MediaSession.MediaSub ...
- 【Live555】live555源码详解(四):Medium媒体基础类
[Live555]live555源码详解系列笔记 7.Media Medai所依赖关系图 依赖Medai关系图 Media和UsageEnvironment关联图
- 【Live555】live555源码详解(二):BasicHashTable、DelayQueue、HandlerSet
[Live555]live555源码详解系列笔记 3.BasicHashTable 哈希表 协作图: 3.1 BasicHashTable BasicHashTable 继承自 HashTable 重 ...
- 【Live555】live555源码详解(一):BasicUsageEnvironment、UsageEnvironment
[Live555]live555源码详解系列笔记 类关系图 1.UsageEnvironment 详解 1.1 BasicUsageEnvironment BasicUsageEnvironment ...
最新文章
- 为什么要进行数据归一化
- Linux内核进程管理基本概念-进程、运行队列、等待队列、进程切换、进程调度
- dwz中弹出的窗口页面如何获取前页面(点击按钮的页面)的元素???
- 在MySQL 5.7下排查内存泄露和OOM问题全过程
- shutil python_shutil模块
- STB 上Linux软件系统解决方案
- python中for循环语句格式_python中for循环和可迭代对象遍历
- 打造最便捷的异步分页技术(提供下载)
- 灵活的javaScript
- 用“看板图”实现敏捷项目的可视化
- 学生签到系统c代码_C语言之学生管理系统代码(完整)
- SpringCloud
- 单片机实验(十二)单片机矩阵按键控制数码管
- matlab2017百度百科,沸石粉里的吸蓝量是什么意思
- eSPI自学笔记(二):Perpheral Channel与Subtractive Decode
- mac1200r 服务器无响应,新版水星(MERCURY)MAC1200R路由器怎么设置?
- 2016年东莞市程序设计竞赛镇区选拔赛上机试题小学组:seat(找座位)
- Java-进阶:多线程1,2个月面试腾讯、B站、网易等11家公司的面经总结
- opencv入门:支持向量机,K均值聚类
- IP地址0.0.0.0表示什么
热门文章
- 12306验证码识别初尝试(1)
- 用VMware克隆CentOS 6.4后HWaddr和UUID的设置
- VM虚拟机安装Linux系统
- uniapp 集成腾讯云超级播放器问题
- layui - 模板引擎
- iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
- winpCap中compile和nocap函数
- weadmin3.0版本安装过程
- 高数笔记(六):拉格朗日中值定理,柯西中值定理,洛必达法则,泰勒定理
- oracle 00314,【案例】Oracle报错ORA-00314 数据库异常关机导致redo SCN不一致无法启动...