Есть ли практическая разница между БПФ и обратным БПФ? - PullRequest
3 голосов
/ 13 октября 2011
Библиотеки

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

ifft(fft(X)) == X

и

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

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

1 Ответ

4 голосов
/ 13 октября 2011

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

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

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

...