特征提取
从mfcc特征入手了解kaldi的特征提取的设计实现。
make_mfcc_pitch.sh文件里提取mfcc和pitch特征的部分
- compute-mfcc-feats从音频提取的mfcc特征,
- compute-kaldi-pitch-feats从音频提取的pitch特征,
我们先只关注mfcc的提取,看一下compute-mfcc-feats的代码,其源码位于kaldi/src/featbin/compute-mfcc-feats.cc,其中的核心部分
Mfcc类位于kaldi/src/feat/feature-mfcc.h
- MfccOptions是mfcc的配置
- MfccComputer是负责Mfcc特征计算的类。
- Kaldi封装了一个类OfflineFeatureTpl,先进行采样率变化,分帧,加窗,dither,预加重等和特征提取算法无关的操作,然后调用对应的特征提取模块F提取特征。
OfflineFeatureTpl的源码位于kaldi/src/feat/feature-common-inl.h
- DownsampleWaveForm()处理音频采样率和特征配置的采样率不一致的问题,进行采样率转换
- ExtractWindow()位于kaldi/src/feat/feature-window.cc,完成分帧,加窗,去直流,dither,预加重等工作
- 而MfccComputer的Compute()中进行Mfcc相关的特征提取操作,位于 kaldi/src/feat/feature-mfcc.cc
类似的,在feat/下的feature-文件中有对应的特征提取算法,={plp,fbank,mfcc}。
注意pitch特征没有对应的feature-pitch.cc文件,其计算函数ComputeKaldiPitch位于pitch-functions.cc中,因为Pitch的计算和mfcc,fbank等不同,它不是一个频域分析得到的特征,而是从波形上直接进行提取。
###
[kaldi-lattice-url]: http://kaldi-asr.org/doc/lattices.html
[povey-lattice-paper]: https://www.danielpovey.com/files/2012_icassp_lattices.pdf