Обратная спектрограмма Мела Либрозы требует много времени - PullRequest
1 голос
/ 07 августа 2020

В настоящее время я пытаюсь преобразовать спектрограмму mel обратно в аудиофайл, однако функции mel_to_stft библиотеки librosa требуется много времени (до 15 минут), чтобы прочитать 30-секундный файл .wav с частотой дискретизации 384 кГц.

Вот мой код:

# Code for high pass filter
def butter_highpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype='high', analog=False)
    return b, a

def butter_highpass_filter(data, cutoff, fs, order=5):
    b, a = butter_highpass(cutoff, fs, order=order)
    y = filtfilt(b, a, data)
    return y

def high_pass_filter(data, sr): 
    # set as a highpass filter for 500 Hz
    filtered_signal = butter_highpass_filter(data, 500, sr, order=5)
    return filtered_signal

example_dir = '/Test/test.wav'
sr, data = wavfile.read(example_dir)
des_sr = 44100
data_resamp = samplerate.resample(data, des_sr/sr, 'sinc_best')
data_hp = high_pass_filter(data_resamp, des_sr)
mel_spect = librosa.feature.melspectrogram(y=data_resamp, sr=des_sr)
S = librosa.feature.inverse.mel_to_stft(mel_spect)
y = librosa.griffinlim(S)

1 Ответ

0 голосов
/ 08 августа 2020

Griffin-Lim - это итерационный метод оценки информации о фазе, необходимой при переходе от спектрограммы только по величине. Количество итераций в реализации librosa можно изменить (n_iter). Уменьшение этого параметра немного ускорит процесс, но в целом он будет медленным.

Возврат к форме сигнала после спектральной обработки может быть ускорен с помощью: приближенные методы, вроде нейронной сети. Например, Быстрая инверсия спектрограммы с использованием сверточных нейронных сетей с несколькими головками

Используя исходную информацию о фазе вместо оценки ее по модифицированной спектрограмме амплитуды. Для этого требуется, чтобы была доступна фазовая спектрограмма (а не только величина), но это часто бывает при выполнении спектральной обработки аудиофайлов.
...