(图摄于阿姆斯特丹梵高博物馆)
在重读《解析深度学习:语音识别实践》中,发现有段文字跟我预想的并不太一样:
在我的印象中,mfcc的维度应该和梅尔滤波器组数是一样的:stft->mel
这个图(FBank与MFCC - sun___shy的博客 - 优快云博客)就能够说清楚,然后再过log(||)和DCT就是MFCC了。
def mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs):
if S is None:
S = power_to_db(melspectrogram(y=y, sr=sr, **kwargs))
return scipy.fftpack.dct(S, axis=0, type=dct_type, norm=norm)[:n_mfcc]
和它调用的子函数
def melspectrogram(y=None, sr=22050, S=None, n_fft=2048, hop_length=512,
power=2.0, **kwargs):
S, n_fft = _spectrogram(y=y, S=S, n_fft=n_fft, hop_length=hop_length,
power=power)
# Build a Mel filter
mel_basis = filters.mel(sr, n_fft, **kwargs)
return np.dot(mel_basis, S)
可以发现,在一般的处理中,如上图的,在stft->mel这一步中,就完成了降维,但是libroas在最后才完成降维,在log(||)和DCT中有很大一部分计算资源是

本文探讨了librosa库在MFCC(Mel Frequency Cepstral Coefficients)计算过程中与预期不同的降维时机。通常,MFCC的维度与梅尔滤波器组数相同,但在librosa中,降维操作是在DCT之后进行的,导致了计算资源的部分浪费。作者比较了librosa与MATLAB中MFCC函数的差异,并指出13维MFCC实际上是24维滤波器的对数能量经过DCT后的低通滤波结果。
最低0.47元/天 解锁文章
4556

被折叠的 条评论
为什么被折叠?



