Есть ли практическая разница между БПФ и обратным БПФ?

Библиотеки FFT, такие как FFTW или numpy.fft, обычно предоставляют две функции fft() а также ifft() (и специальные версии для реального ввода). Эти функции, по-видимому, определены так, что

ifft(fft(X)) == X

а также

fft(X) == constant_factor * reverse(ifft(X))

Есть ли практические или технические причины, которые следует учитывать при выборе между ifft() а также fft() работает на сложном вводе? В то время как интерпретации X (область сигнала, времени или пространства) и fft(X) (спектр, частотная область) различны, имеет ли это значение в вычислительном отношении?

1 ответ

Решение

Различные библиотеки fft помещают константу масштабирования в разные места, в fft, ifft или 1/sqrt(N) в обоих. Так что это лишь незначительная разница, зависящая от реализации. FFT и ifft меняют порядок своих результатов. Так что это только разница между индексацией вперед или назад в массиве результатов. Независимо от того, называете ли вы время / пространство в зависимости от частоты, это лишь различие в маркировке.

Таким образом, на практике выберите тот, где независимо от масштаба, используемого библиотекой, и направление, в котором вы хотите индексировать свои результаты, дает наиболее читаемый код. Обычно библиотеки fft / ifft устанавливаются так, что можно индексировать положительное время и более высокую частоту в одном и том же направлении (++).

ДОБАВЛЕНО: Незначительная, возможно, ненужная оптимизация: если вам все равно нужно масштабировать результаты FT, то выберите реализацию fft или ifft, которая не включает встроенное умножение масштаба, поскольку это может сэкономить N полуизбыточных операций умножения.

Другие вопросы по тегам