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_length
是 n_fft
的一半甚至四分之一。它允许您控制特征的时间分辨率(光谱分辨率由 n_fft
或 n_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
当我从音频中提取 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_length
是 n_fft
的一半甚至四分之一。它允许您控制特征的时间分辨率(光谱分辨率由 n_fft
或 n_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