Python MFCCs阵列中的第二个数字是什么?

Python MFCCs阵列中的第二个数字是什么?,python,audio,librosa,mfcc,Python,Audio,Librosa,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\u长度 例子 假设您以44.1 kHz(CD质量)采样了10秒的音频。当您使用lib

从音频中提取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\u长度

例子 假设您以44.1 kHz(CD质量)采样了10秒的音频。当您使用librosa加载它时,它会被重新采样到22050 Hz(),并下混到一个通道(mono)。然后运行类似于、或的程序时,将计算所谓的要素帧

问题是,你的10秒音频有多少(功能)帧

这方面的决定性参数是
跃点长度
。对于所有提到的功能,librosa在1d音频信号上滑动一定长度的窗口(通常为
n_fft
),即,它一次查看一个较短的段(或帧),计算该段的特征,然后移动到下一段。这些部分通常是重叠的。两个此类段之间的距离为
hop_length
,并以样本数表示。它可能与
n\u fft
相同,但通常情况下
hop\u长度
n\u fft
的一半甚至四分之一。它允许您控制特征的时间分辨率(光谱分辨率由
n_fft
n_mfcc
控制,具体取决于您实际计算的内容)

44.1 kHz下的10s音频为441000个样本。但请记住,librosa默认情况下会重新采样到22050 Hz,因此实际上只有220500个样本。如果我们在每一步中移动256个样本,我们可以在这220500个样本上移动一定长度的片段多少次?精确的数字取决于线段的长度。但让我们暂时忽略这一点,并假设当我们到达终点时,我们只是将输入归零,这样我们就可以在至少有一些输入的情况下仍然计算帧。然后,计算变得很简单:

number_of_samples / hop_length = number_of_frames
因此,对于我们的示例,这将是:

220500 / 256 = 861.3
所以我们得到了大约861帧

请注意,通过计算所谓的
帧速率
,可以使此计算更加容易。这是每秒帧数,单位为赫兹。它是:

frame_rate = sample_rate / hop_length = 86.13
要获得输入的帧数,只需将音频长度乘以
frame\u rate
,然后进行设置(忽略填充)


非常感谢你!那么,当我设置n_fft=0,05*sr时,这意味着什么呢?那不是50秒的时限吗?不,不是
n_fft
在样本中未及时指定。我在我的答案中添加了一个全面的例子,这样更容易理解。非常感谢!还有一个问题。对于这861帧中的每一帧,librosa提取一个MFCC值?librosa为每个帧提供MFCC值。在您的情况下,每帧13个,因为您要求
n_mfcc=13
。很抱歉,我仍然无法理解某些内容。因为我得到了一个维度为(13,22)的数组,基本上是13个数组,每个数组中有22个数字,我如何得到每个帧的13。谢谢
frames = frame_rate * audio_in_seconds