Таким образом, реализации librosa
и python_speech_features
отличаются друг от друга структурно и даже теоретически. На основании документов:
Вы заметите, что выходы отличаются, librosa mfcc output shape = (n_mels, t)
, тогда как python_speech_features output = (num_frames, num_cep)
, поэтому вам нужно транспонировать один из двух. Также вы заметите, что любое значение num_ceps
выше 26 в python_speech_features
ничего не изменит в возвращаемых mfccs num_ceps
, потому что вы ограничены количеством используемых фильтров. Поэтому вам придется увеличить это тоже. Более того, вам нужно убедиться, что frameming использует аналогичные значения (одно использует количество отсчетов, а другое - длительность), поэтому вам придется это исправить. Также python_speech_features
принимает значения int16, возвращаемые функцией чтения scipy, но librosa требует float32, поэтому вы должны преобразовать массив чтения или использовать librosa.load()
. Вот небольшой фрагмент, который включает в себя предыдущие изменения:
import librosa
import numpy as np
import python_speech_features
from scipy.io.wavfile import read
# init fname
fname = "sample.wav"
# read audio
rate, audio = read(fname)
# using librosa
lisbrosa_mfcc_feature = librosa.feature.mfcc(y=audio.astype(np.float32),
sr=rate,
n_mfcc=96,
n_fft=1024,
win_length=int(0.025*rate),
hop_length=int(0.01*rate))
print(lisbrosa_mfcc_feature.T.shape)
# using python_speech_features
psf_mfcc_feature = python_speech_features.mfcc(signal=audio,
samplerate=rate,
winlen=0.025,
winstep=0.01,
numcep=96,
nfilt=96,
nfft=1024,
appendEnergy=False)
print(psf_mfcc_feature.shape)
# check if size is the same
print(lisbrosa_mfcc_feature.shape == psf_mfcc_feature.shape)
Я проверил это, и получился следующий вывод:
(9003, 96)
(9001, 96)
False
Это не тот же вывод, а просто 2 разница в кадрах. Поскольку значения не будут одинаковыми, поскольку каждая библиотека использует свой подход к вычислению MFCC, python_speech_features
использует дискретное преобразование Фурье , тогда как librosa использует кратковременное преобразование Фурье .