Spec-Zone.ru › NumPy 1.21

Преобразование Фурье (numpy.fft)

Модуль SciPy scipy.fft является более полным набором, чем numpy.fft, который включает только базовый набор процедур.

Стандартные преобразования Фурье

fft(a[, n, axis, norm])

Вычисление одномерного дискретного преобразования Фурье.

ifft(a[, n, axis, norm])

Вычисление одномерного обратного дискретного преобразования Фурье.

fft2(a[, s, axes, norm])

Вычисление двумерного дискретного преобразования Фурье.

ifft2(a[, s, axes, norm])

Вычисление двумерного обратного дискретного преобразования Фурье.

fftn(a[, s, axes, norm])

Вычисление N-мерного дискретного преобразования Фурье.

ifftn(a[, s, axes, norm])

Вычисление N-мерного обратного дискретного преобразования Фурье.

Преобразования Фурье для вещественных данных

rfft(a[, n, axis, norm])

Вычисление одномерного дискретного преобразования Фурье для вещественного входного сигнала.

irfft(a[, n, axis, norm])

Вычисляет обратное преобразование rfft.

rfft2(a[, s, axes, norm])

Вычисление двумерного преобразования Фурье для вещественного массива.

irfft2(a[, s, axes, norm])

Вычисляет обратное преобразование rfft2.

rfftn(a[, s, axes, norm])

Вычисление N-мерного дискретного преобразования Фурье для вещественного входного сигнала.

irfftn(a[, s, axes, norm])

Вычисляет обратное преобразование rfftn.

Преобразования Фурье для эрмитовых сигналов

hfft(a[, n, axis, norm])

Вычисление преобразования Фурье сигнала с эрмитовой симметрией, т.е. вещественного спектра.

ihfft(a[, n, axis, norm])

Вычисление обратного преобразования Фурье сигнала с эрмитовой симметрией.

Вспомогательные функции

fftfreq(n[, d])

Возвращает частоты дискретного преобразования Фурье.

rfftfreq(n[, d])

Возвращает частоты дискретного преобразования Фурье (для использования с rfft, irfft).

fftshift(x[, axes])

Смещает нулевую частоту к центру спектра.

ifftshift(x[, axes])

Обратное преобразование fftshift.

Общие сведения

Анализ Фурье — это метод представления функции как суммы периодических составляющих и восстановления функции по этим составляющим. При дискретизации функции и ее преобразования Фурье, получается дискретное преобразование Фурье (ДПФ). ДПФ стало основой числовых вычислений, благодаря быстрому алгоритму его вычисления, называемому быстрым преобразованием Фурье (БПФ), которое было известно Гауссу (1805) и было освещено Кули и Такье [CT]. Пресс и др. [NR] предлагают доступное введение в анализ Фурье и его приложения.

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

Детали реализации

Существует много способов определения ДПФ, отличающихся знаком экспоненты, нормировкой и т.д. В этой реализации ДПФ определяется как

\[A_k = \sum_{m=0}^{n-1} a_m \exp\left\{-2\pi i{mk \over n}\right\} \qquad k = 0,\ldots,n-1.\]

ДПФ в общем случае определяется для комплексных входных и выходных данных, и отдельная составляющая с линейной частотой \(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).

Обратное ДПФ определяется как

\[a_m = \frac{1}{n}\sum_{k=0}^{n-1}A_k\exp\left\{2\pi i{mk\over n}\right\} \qquad m = 0,\ldots,n-1.\]

Отличается от прямого преобразования знаком аргумента экспоненты и нормализующим множителем по умолчанию \(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 означает, что она также может быть более быстрым способом вычисления больших сверток, используя свойство, что свёртка во временной области эквивалентна точечному умножению в частотной области.

Многомерные случаи

В двумерном случае ДПФ определяется как

\[A_{kl} = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} a_{mn}\exp\left\{-2\pi i \left({mk\over M}+{nl\over N}\right)\right\} \qquad k = 0, \ldots, M-1;\quad l = 0, \ldots, N-1,\]

что очевидным образом обобщается на многомерные случаи, и обратные преобразования в многомерных случаях также обобщаются аналогичным образом.

Ссылки

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API