MFCC 数组中的第二个数字是什么?



当我从音频中提取MFCC时,输出(13, 22)。这个数字代表什么?是时间框架吗?我使用librosa。

使用的代码是:

mfccs = librosa.feature.mfcc(y=X, sr=sample_rate, n_mfcc=13, hop_length=256)
mfccs

print(mfccs.shape)

输出是(13,22).

是的,这是时间框架,主要取决于您通过y提供多少样本以及您选择的hop_length

假设您有 10 个音频以 44.1 kHz(CD 质量(采样。当您使用librosa加载它时,它会重新采样到22,050 Hz(这是librosa默认值(并向下混音到一个通道(单声道(。然后,当您运行诸如 STFT、谱图或 MFCC 之类的东西时,将计算所谓的特征帧

问题是,您的 10 多音频获得了多少(功能(帧?

对此的决定参数是hop_length.对于所有提到的功能,librosa在1d音频信号上滑动一定长度(通常为n_fft(的窗口,即,它一次查看一个较短的片段(或帧(,计算该片段的特征并移动到下一个片段。这些段通常是重叠的。两个这样的段之间的距离是hop_length的,并以样本数指定。它可能与n_fft相同,但通常hop_lengthn_fft的一半甚至四分之一。它允许您控制要素的时间分辨率(光谱分辨率由n_fftn_mfcc控制,具体取决于您实际计算的内容(。

44.1 kHz 的 10 个音频是 441000 个样本。但请记住,librosa 默认重新采样为 22050 Hz,因此实际上只有 220500 个样本。如果我们在每一步中移动一段 256 个样本,我们可以在这 220500 个样本上移动一段多少次?确切的数字取决于段的长度。但是,让我们暂时忽略它,并假设当我们到达末尾时,我们只是将输入归零,以便只要至少有一些输入,我们仍然可以计算帧。然后计算变得微不足道:

number_of_samples / hop_length = number_of_frames

因此,对于我们的示例,这将是:

220500 / 256 = 861.3

所以我们得到了大约 861 帧。

请注意,您可以通过计算所谓的frame_rate来使此计算更加容易。这是每秒帧数,单位为 Hz。它:

frame_rate = sample_rate / hop_length = 86.13

要获取输入的帧数,只需将音频长度与音频长度进行多次frame_rate,即可设置(忽略填充(。

frames = frame_rate * audio_in_seconds

相关内容

  • 没有找到相关文章

最新更新