当我从音频中提取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_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
来使此计算更加容易。这是每秒帧数,单位为 Hz。它:
frame_rate = sample_rate / hop_length = 86.13
要获取输入的帧数,只需将音频长度与音频长度进行多次frame_rate
,即可设置(忽略填充(。
frames = frame_rate * audio_in_seconds