如何消除由 librosa griffin lim 引入的失真?

Sha*_*oon 32 python librosa soundfile

我正在做:

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)
Run Code Online (Sandbox Code Playgroud)

并且它在重建的音频信号中引入了明显的失真。我能做些什么来改善它?

小智 1

您需要使用居中的窗函数,以便加窗信号为零相位,即它在窗口中间完全对称。在这种情况下,您可以使用 hann 窗,它是具有非零端点的升余弦窗。

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)
Run Code Online (Sandbox Code Playgroud)