Извлечение функций MFCC, Librosa

Я хочу извлечь функции mfcc из аудиофайла, дискретизированного с частотой 8000 Гц, с размером кадра 20 мс и перекрытием 10 мс. Какими должны быть параметры функции librosa.feature.mfcc (). Указывает ли в приведенном ниже коде фрагменты по 20 мс с перекрытием 10 мс?

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 секунд. Означает ли это, что я получу 24 mfcc для всех (1800 / 0,01) -1 фрагментов звука?


person Prithvi Allurkar    schedule 06.07.2019    source источник


Ответы (1)


1800 секунд при 8000 Гц - это, очевидно, 1800 * 8000 = 14400000 выборки. Если длина прыжка равна 160, вы получите примерно 14400000 / 160 = 90000 значения MFCC с 24 измерениями каждое. Так что это явно не (1800 / 0.01) - 1 = 179999 (примерно в 2 раза меньше).

Обратите внимание, что в моих расчетах я использовал приблизительно, потому что я использовал только длину прыжка и проигнорировал длину окна. Длина шага - это количество выборок, на которое окно перемещается с каждым шагом. Сколько хмеля вы сможете уместить, зависит от того, добавляете ли вы его как-нибудь или нет. И если вы решите не использовать прокладку, количество кадров также будет зависеть от размера вашего окна.

Возвращаясь к вашему вопросу: вы должны спросить себя, сколько отсчетов составляет 10 мс?

Если 1 с содержит 8000 отсчетов (это то, что означает 8000 Гц), сколько отсчетов в 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)

Надеюсь это поможет.

person Hendrik    schedule 06.07.2019