kaldi和psf在Fbank上的区别

可以进行Fbank特征提取的库有两个:

一个是python_speech_features另一个是pytorch中的torchaudio

import python_speech_features as psf

import torchaudio as ta 

对应的两个函数分别是:

ta.compliance.kaldi.fbank

psf.base.logfbank

ta调用了kaldi中的特征提取模块

kaldi 和 python_speech_features 生成fbank特征的不同地方在于以下几点:

转自:https://zhuanlan.zhihu.com/p/55371926

1.预加重不同:

* kaldi是先加窗分帧,再对帧内进行预加重;python_speech_features是全体先预加重,然后再分帧

* 再看预加重,会发现,对于音频数据(譬如10,17,13,15, ...)第一个数据10,python_speech_features是不变(预加重系数0.97,预加重后是 10,7.3,-3.489,2.39,...),kaldi是第一个数据也做预加重(预加重后是 0.3,7.3,-3.489,2.39,...)


2. 分帧数不同,功率谱计算不同

python_speech_features 对最后还剩余的数据,不足帧长的,按照一帧计算补齐;

kaldi 如果选择不切断最后剩余数据(snip-edged = False),会发现多了一帧(个人认为这里kaldi错了,python_speech_features正确);如果snip-edged = True,两者一致

功率谱计算不同:

python_speech_features 计算功率谱是:1.0/NFFT * numpy.square(magspec(frames,NFFT))

kaldi  没有乘1.0/NFFT


3. 梅尔滤波器组计算方法不同

kaldi是在梅尔坐标转换后的梅尔值域计算,index是hz的定义域,通过梅尔转换后比较(个人认为计算量偏大,每次计算都要经过一次转换);

而python_speech_features是先将linspace后的梅尔值统一转成了hz,再进行计算,index也是hz的定义域,计算量小

其实上述两种的本质是一样的,计算方法不同会导致系数存在差异



你可能感兴趣的:(kaldi和psf在Fbank上的区别)