MFCCs 数组中的第二个数字是多少?

What is the second number in the MFCCs array?

当我从音频中提取 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

例子

假设您以 44.1 kHz(CD 质量)采样了 10 秒的音频。当您使用 librosa 加载它时,它会重新采样到 22,050 Hz(that's the librosa default) and downmixed to one channel (mono). When you then run something like a STFT, melspectrogram, or MFCC,计算所谓的 特征帧

问题是,您的 10 秒音频可获得多少(特征)帧?

对此的决定性参数是 hop_length。对于所有提到的功能,librosa 在 1d 音频信号上滑动一定长度(通常为 n_fft)的 window,即,它一次查看一个较短的片段(或帧),计算特征对于这个部分并移动到下一个部分。这些片段通常是重叠的。两个这样的段之间的距离是 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 来简化此计算。那是以赫兹为单位的每秒帧数。它是:

frame_rate = sample_rate / hop_length = 86.13

要获得输入的帧数,只需 frame_rate 乘以音频长度即可(忽略填充)。

frames = frame_rate * audio_in_seconds