【问题标题】:What is the second number in the MFCCs array?MFCCs 数组中的第二个数字是多少?
【发布时间】:2020-10-24 21:02:32
【问题描述】:

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

【问题讨论】:

    标签: python audio librosa mfcc


    【解决方案1】:

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

    示例

    假设您有 10 个以 44.1 kHz(CD 质量)采样的音频。当您使用 librosa 加载它时,它会重新采样到 22,050 Hz (that's the librosa default) 并下混到一个通道(单声道)。然后,当您运行 STFTmelspectrogramMFCC 之类的东西时,会计算所谓的特征框架

    问题是,你 10 多岁的音频可以获得多少(特征)帧?

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

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

    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
    

    【讨论】:

    • 非常感谢!那么当我设置 n_fft=0,05*sr 是什么意思呢?那不是 50 毫秒的时间范围吗?
    • 不,不是。 n_fft 未及时在样本中指定。我在答案中添加了一个综合示例,以便更容易理解。
    • 非常感谢!还有一个问题。对于这 861 帧中的每一帧,librosa 提取一个 MFCC 值?
    • Librosa 为您提供每一帧的 MFCC 值。在您的情况下,每帧 13 个,因为您要求n_mfcc=13
    • 抱歉,我还是有些听不懂。因为我得到一个维度为 (13, 22) 的数组,它基本上是 13 个数组,每个数组有 22 个数字,我如何为每帧得到 13 个。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多