Получение 96 функций MF CC с использованием python_speech_features - PullRequest
3 голосов
/ 12 апреля 2020

Я хочу тренировать свою модель, используя 96 MF CC Особенности. Я использовал Librosa, и я не получил многообещающий результат. Затем я попытался использовать python_speech_features, однако я могу получить не более 26 функций! Почему! Это форма для того же аудиофайла

с использованием Librosa

x = librosa.feature.mfcc(audio, rate, n_mfcc=96)
x.shape  # (96, 204)

с использованием python_speech_features

mfcc_feature = pySpeech.mfcc(audio, rate, 0.025, 0.01, 96, nfft=1200, appendEnergy = True)
mfcc_feature.shape # output => (471, 26)

Любые мысли!

1 Ответ

1 голос
/ 15 апреля 2020

Таким образом, реализации 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 использует кратковременное преобразование Фурье .

...