如何消除 librosa griffin lim 引入的失真?
Posted
技术标签:
【中文标题】如何消除 librosa griffin lim 引入的失真?【英文标题】:How can I remove distortion introduced by librosa griffin lim? 【发布时间】:2020-07-11 04:55:42 【问题描述】:我在做:
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)
它会在重建的音频信号中引入明显的失真。我可以做些什么来改善它?
【问题讨论】:
你有原始相位信息吗?在这种情况下,最好使用用 GriffinLim 重建的那个(即使你已经修改了幅度) 我只有幅度 我对这个问题的细节不是很熟悉,但这里有一些建议:试试smoothing,使用更小的window_length
,也许更大的hop_length
,我会说50%是好...考虑先进的语音增强技术。您也可以在 Librosa 的 GitHub 页面上发布相关内容,开发人员可能会提供帮助,因为他们可能更熟悉此类问题。
timsainburg.com/noise-reduction-python.html
@Shamoon 这是否为您的问题提供了任何线索? ieeexplore.ieee.org/document/8521304
【参考方案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)
【讨论】:
【参考方案2】:您应该使用基于神经网络的声码器(如 WaveNet)进行重建
【讨论】:
以上是关于如何消除 librosa griffin lim 引入的失真?的主要内容,如果未能解决你的问题,请参考以下文章