Как удалить искажение, вызванное 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, для реконструкции.