Преобразование Фурье (numpy.fft)
Модуль SciPy scipy.fft является более полным набором, чем numpy.fft, который включает только базовый набор процедур.
Стандартные преобразования Фурье
| Вычисление одномерного дискретного преобразования Фурье. |
| Вычисление одномерного обратного дискретного преобразования Фурье. |
| Вычисление двумерного дискретного преобразования Фурье. |
| Вычисление двумерного обратного дискретного преобразования Фурье. |
| Вычисление N-мерного дискретного преобразования Фурье. |
| Вычисление N-мерного обратного дискретного преобразования Фурье. |
Преобразования Фурье для вещественных данных
| Вычисление одномерного дискретного преобразования Фурье для вещественного входного сигнала. |
| Вычисляет обратное преобразование |
| Вычисление двумерного преобразования Фурье для вещественного массива. |
| Вычисляет обратное преобразование |
| Вычисление N-мерного дискретного преобразования Фурье для вещественного входного сигнала. |
| Вычисляет обратное преобразование |
Преобразования Фурье для эрмитовых сигналов
| Вычисление преобразования Фурье сигнала с эрмитовой симметрией, т.е. вещественного спектра. |
| Вычисление обратного преобразования Фурье сигнала с эрмитовой симметрией. |
Вспомогательные функции
| Возвращает частоты дискретного преобразования Фурье. |
| Возвращает частоты дискретного преобразования Фурье (для использования с rfft, irfft). |
| Смещает нулевую частоту к центру спектра. |
| Обратное преобразование |
Общие сведения
Анализ Фурье — это метод представления функции как суммы периодических составляющих и восстановления функции по этим составляющим. При дискретизации функции и ее преобразования Фурье, получается дискретное преобразование Фурье (ДПФ). ДПФ стало основой числовых вычислений, благодаря быстрому алгоритму его вычисления, называемому быстрым преобразованием Фурье (БПФ), которое было известно Гауссу (1805) и было освещено Кули и Такье [CT]. Пресс и др. [NR] предлагают доступное введение в анализ Фурье и его приложения.
Поскольку дискретное преобразование Фурье разделяет вход на составляющие, которые вносят вклад на дискретных частотах, оно имеет множество применений в цифровой обработке сигналов, например, для фильтрации, и в этом контексте дискретизированный вход в преобразование обычно называют сигналом, который существует во временной области. Выход называется спектром или преобразованием и существует в частотной области.
Детали реализации
Существует много способов определения ДПФ, отличающихся знаком экспоненты, нормировкой и т.д. В этой реализации ДПФ определяется как
ДПФ в общем случае определяется для комплексных входных и выходных данных, и отдельная составляющая с линейной частотой \(f\) представляется комплексной экспонентой \(a_m = \exp\{2\pi i\,f m\Delta t\}\), где \(\Delta t\) — интервал дискретизации.
Значения в результате следуют так называемому «стандартному» порядку: Если A =
fft(a, n), то A[0] содержит нулевую частоту (сумму сигнала), которая всегда чисто вещественная для вещественных входных данных. Затем A[1:n/2] содержит положительные частоты, а A[n/2+1:] содержит отрицательные частоты в порядке убывания отрицательных частот. Для чётного числа входных точек A[n/2] представляет и положительную, и отрицательную частоту Найквиста, и также является чисто вещественной для вещественного входа. Для нечётного числа входных точек A[(n-1)/2] содержит наибольшую положительную частоту, а A[(n+1)/2] содержит наибольшую отрицательную частоту. Функция np.fft.fftfreq(n) возвращает массив, дающий частоты соответствующих элементов на выходе. Функция np.fft.fftshift(A) сдвигает преобразования и их частоты, помещая нулевые компоненты частоты в середину, а np.fft.ifftshift(A) отменяет этот сдвиг.
Когда вход a является сигналом во временной области и A = fft(a), np.abs(A) — его амплитудный спектр, а np.abs(A)**2 — его энергетический спектр. Спектр фаз получается с помощью np.angle(A).
Обратное ДПФ определяется как
Отличается от прямого преобразования знаком аргумента экспоненты и нормализующим множителем по умолчанию \(1/n\).
Преобразование типов
numpy.fft преобразует float32 и complex64 массивы соответственно в массивы float64 и complex128 . Для реализации БПФ, которая не преобразует входные массивы, см. scipy.fftpack.
Нормализация
Аргумент norm указывает, какое направление пары прямых/обратных преобразований масштабируется и с каким множителем нормализации. По умолчанию ("backward") прямые (прямые) преобразования не масштабируются, а обратные (обратные) преобразования масштабируются на \(1/n\). Можно получить унитарные преобразования, установив ключевой аргумент norm в значение "ortho", так что и прямые, и обратные преобразования масштабируются на \(1/\sqrt{n}\). Наконец, установив ключевой аргумент norm в значение "forward", прямые преобразования масштабируются на \(1/n\), а обратные преобразования не масштабируются (т. е. точно противоположно значению по умолчанию "backward"). None — псевдоним значения по умолчанию "backward" для обратной совместимости.
Преобразования для вещественных и эрмитовых сигналов
Когда входной сигнал является чисто вещественным, его преобразование является эрмитовым, т.е. компонент на частоте \(f_k\) является комплексно сопряжённым компоненту на частоте \(-f_k\), что означает, что для вещественных входных данных нет информации в компонентах отрицательных частот, которая не была бы уже доступна из компонентов положительных частот. Семейство функций rfft предназначено для работы с вещественными входными данными и использует эту симметрию, вычисляя только компоненты положительных частот, вплоть до и включая частоту Найквиста. Таким образом, n входных точек дают n/2+1 комплексных выходных точек. Обратные функции этого семейства предполагают ту же симметрию своего входа, и для выходных данных из n точек используется n/2+1 входных точек.
Соответственно, когда спектр чисто вещественный, сигнал является эрмитовым. Семейство функций hfft использует эту симметрию, используя n/2+1 комплексных точек во входном (временном) домене для n вещественных точек в частотной области.
В многомерных случаях FFT используются, например, для анализа изображений и фильтрации. Вычислительная эффективность FFT означает, что она также может быть более быстрым способом вычисления больших сверток, используя свойство, что свёртка во временной области эквивалентна точечному умножению в частотной области.
Многомерные случаи
В двумерном случае ДПФ определяется как
что очевидным образом обобщается на многомерные случаи, и обратные преобразования в многомерных случаях также обобщаются аналогичным образом.
Ссылки
- CT
-
Cooley, James W., and John W. Tukey, 1965, “An algorithm for the machine calculation of complex Fourier series,” Math. Comput. 19: 297-301.
- NR
-
Press, W., Teukolsky, S., Vetterline, W.T., and Flannery, B.P., 2007, Numerical Recipes: The Art of Scientific Computing, ch. 12-13. Cambridge Univ. Press, Cambridge, UK.
Примеры
Примеры см. в различных функциях.
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/routines.fft.html