【问题标题】:MFCC feature extraction, LibrosaMFCC 特征提取,Librosa
【发布时间】:2019-11-16 14:27:35
【问题描述】:

我想提取以 8000 Hz 采样的音频文件的 mfcc 特征,帧大小为 20 ms,重叠时间为 10 ms。 librosa.feature.mfcc() 函数的参数必须是什么。下面写的代码是否指定了 20ms 的块与 10ms 的重叠?

import librosa as l

x, sr = l.load('/home/user/Data/Audio/Tracks/Dev/FS_P01_dev_001.wav', sr = 8000)
mfccs = l.feature.mfcc(x, sr=sr, n_mfcc = 24, hop_length = 160)

音频文件为 1800 秒。这是否意味着我会为所有 (1800/0.01)-1 块音频获得 24 个 mfcc?

【问题讨论】:

    标签: feature-extraction mfcc librosa


    【解决方案1】:

    8000 Hz 时的 1800 秒显然是 1800 * 8000 = 14400000 样本。 如果您的跃点长度为 160,则您大致获得14400000 / 160 = 90000 MFCC 值,每个值有 24 个维度。所以这显然不是(1800 / 0.01) - 1 = 179999(相差大约 2 倍)。

    请注意,我在计算中使用了大致,因为我只使用了跳数长度而忽略了窗口长度。跳跃长度是窗口每一步移动的样本数。您可以容纳多少啤酒花取决于您是否以某种方式填充。如果您决定不填充,帧数还取决于您的窗口大小。

    回到您的问题:您必须问自己 10 毫秒有多少个样本?

    如果 1 秒包含 8000 个样本(这就是 8000 Hz 的含义),那么 0.01 秒中有多少个样本?那是8000 * 0.01 = 80 样本。

    这意味着您有 80 个样本的跳跃长度和 160 个样本的窗口长度(0.02 秒 - 两倍长)。

    现在您应该告诉 librosa 使用此信息,如下所示:

    import librosa as l
    
    x, sr = l.load('/home/user/Data/Audio/Tracks/Dev/FS_P01_dev_001.wav', sr = 8000)
    n_fft = int(sr * 0.02)   # window length: 0.02 s
    hop_length = n_fft // 2  # usually one specifies the hop length as a fraction of the window length
    mfccs = l.feature.mfcc(x, sr=sr, n_mfcc=24, hop_length=hop_length, n_fft=n_fft)
    # check the dimensions
    print(mfccs.shape)
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 2019-04-07
      • 2019-06-07
      • 2014-07-03
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 2015-04-09
      相关资源
      最近更新 更多