【发布时间】:2020-02-09 09:48:42
【问题描述】:
为什么 stft(istft(x)) ≠ x?
使用 PyTorch,我计算了张量的短时傅立叶逆变换的短时傅立叶变换。
给定张量x,我已经这样做了,如下所示。
对于x,实部和虚部相等,或者虚部设置为零——两者都会产生相同的问题。
torch.stft(torchaudio.functional.istft(x, n_fft), n_fft)
如图所示,在应用stft(istft(x)) 后,张量中只剩下一条条纹——所有其他条纹都消失了。
如果stft(istft(x))(底部)等于x(顶部),则两个图像看起来相似。
为什么他们如此不同?
似乎stft(istft(x)) 只能接收x 的某些频率。
x (top) and stft of istft of x (bottom)
我也对scipy.signal.istft 和scipy.signal.stft 进行了同样的尝试,这会导致同样的问题。
此外,我已经尝试过使用各种张量 x,例如不同的随机分布、图像和其他条纹。
此外,我还尝试了 stft/istft 的各种超参数。
仅对由声波进行短时傅里叶变换生成的x 有效。
【问题讨论】:
-
我正在对音频信号进行同样的尝试,但问题仍然存在。无法从 istft 重建音频。输出是简单的破裂噪声。任何帮助或建议将不胜感激。
-
发表此评论后。我查看了这个博客 link 并发现它有效。他们确实在那里也给出了很好的解释。我在音频文件上试过了。它可以工作,尽管重建后的输出并不完全相同。
标签: audio signal-processing pytorch