Как удалить искажение, вызванное librosa griffin lim?

Я делаю:

import librosa


D = librosa.stft(samples, n_fft=nperseg, 
                 hop_length=overlap, win_length=nperseg,
                 window=scipy.signal.windows.hamming)

spect, _ = librosa.magphase(D)

audio_signal = librosa.griffinlim(spect, n_iter=1024, 
                                  win_length=nperseg, hop_length=overlap, 
                                  window=signal.windows.hamming)
print(audio_signal, audio_signal.shape)
sf.write('test.wav', audio_signal, sample_rate)

И это вносит заметные искажения в восстановленный звуковой сигнал. Что я могу сделать, чтобы это улучшить?

2 ответа

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

      D = librosa.stft(samples, n_fft=nperseg, 
                 hop_length=overlap, win_length=nperseg,
                 window=scipy.signal.windows.hann)

spect, _ = librosa.magphase(D)

audio_signal = librosa.griffinlim(spect, n_iter=1024, 
                                  win_length=nperseg, hop_length=overlap, 
                                  window=signal.windows.hann)
print(audio_signal, audio_signal.shape)
sf.write('test.wav', audio_signal, sample_rate)

Вы должны использовать вокодер на основе нейронной сети, такой как WaveNet, для реконструкции.

Другие вопросы по тегам