理解mfcc的输出结果

10
from librosa.feature import mfcc
from librosa.core import load

def extract_mfcc(sound):
    data, frame = load(sound)
    return mfcc(data, frame)


mfcc = extract_mfcc("sound.wav")
我想获取以下声音文件sound.wav的MFCC,其长度为48秒

我知道data * frame = length of audio.

但是,当我按上述方式计算MFCC并获取其形状时,结果如下:(20, 2086)

这些数字代表什么意思? 如何仅通过其MFCC计算音频的时间?

我试图计算每毫秒音频的平均MFCC。

任何帮助都将不胜感激!谢谢 :)


可能会有所帮助:http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/ - tkhurana96
1个回答

14
那是因为梅尔倒谱系数是在窗口内计算的,即样本数量。声音是波形,无法通过单个样本(数字)获得任何特征,因此需要使用窗口。
要计算MFCC,需要使用快速傅里叶变换(FFT),这正好需要提供窗口长度。如果您查看mfcc的librosa文档,您不会发现它作为一个明确的参数。这是因为它是隐含的,具体来说:
  • FFT窗口的长度:2048
  • 相继帧之间的样本数量:512
它们作为**kwargs传递,并在此处定义。
如果现在考虑您的音频采样频率和这些数字,您将得到您提供的最终结果。
由于librosa的默认采样率为22050,音频长度为48秒,窗口长度为512,因此如下所示:

Formula

这个数字不完全是{{2086}},因为:
  • 您的音频长度不完全是48秒
  • 实际的窗口长度为2048,跳跃512。这意味着您会在结尾处“失去”一些帧。

我很高兴你发现它有帮助!20是你提取的系数数量。这是默认值。 - Lukasz Tracewski
1
只是想澄清一下,使用默认的 center=True 时,实际上在开头和结尾并不会“丢失帧”。因为帧被填充以适应窗口长度,所以你会获得更多的帧。如果设置 center=False,那么 nMFCC * hop_len <= num_samples。但是使用默认的 center=True,则 nMFCC * hop_len >= num_samples。 - Mike Martin
这些数字确切代表什么意思?你有2048和20个什么? - Sam
@Sam 那是2048个样本和20个梅尔频率倒谱系数。 - Lukasz Tracewski
我是说2067年,抱歉。 - Sam
@Sam 系数的数量。 - Lukasz Tracewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接