Почему 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 (вверху) и частоту истфт x (внизу)
У меня естьтакже попытался сделать то же самое с scipy.signal.istft
и scipy.signal.stft
, что вызывает ту же проблему. Кроме того, я попробовал это с широким диапазоном тензоров x
, например, с различными рандомизированными распределениями, изображениями и другими полосами. Кроме того, я пробовал различные гиперпараметры для stft / istft. Это работает только для x
, генерируемого кратковременным преобразованием Фурье из звуковой волны.