Почему stft (istft (x)) ≠ x? - PullRequest
       32

Почему stft (istft (x)) ≠ x?

2 голосов
/ 12 октября 2019

Почему 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, генерируемого кратковременным преобразованием Фурье из звуковой волны.

1 Ответ

0 голосов
/ 13 октября 2019

Кратковременное преобразование Фурье дает больше данных, чем в исходном сигнале. Если сигнал имеет N реальных выборок, то STFT может иметь 4N комплексных выборок - в 8 раз больше данных.

Следовательно, операция ISTFT должна отбрасывать 7/8 данных, которые вы предоставляете.

Большая часть данных в STFT является избыточной, и если вы просто создадите значения для всех данных, вряд ли это будет соответствовать реальному сигналу.

В этом случае реализация ISTFT будетвероятно, используйте метод наименьших квадратов или другой метод получения сигнала с помощью STFT, который максимально точно соответствует вашим данным, но он не всегда будет близким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...