Есть ли практическая разница между БПФ и обратным БПФ?
Библиотеки 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 полуизбыточных операций умножения.