[Kaldi] MFCC特征提取源码详解

3 篇文章 0 订阅
2 篇文章 0 订阅

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

sdasdsa
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);
 else
         weight = (right_mel-mel) / (right_mel-center_mel);

 

计算Mel频谱

输入:power_spectrum---功率谱 

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

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

 

求倒谱

Log

Dct

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值