Spec-Zone.ru › NumPy 1.18

Дискретное преобразование Фурье (numpy.fft)

Стандартные 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-мерное обратное дискретное преобразование Фурье.

Вещественные FFT

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

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

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

Вычислить обратное n-точечное ДПФ для вещественного входного сигнала.

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

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

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

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

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

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

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

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

Эрмитовы FFT

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.

Нормализация

По умолчанию прямые преобразования не масштабируются, а обратные преобразования масштабируются на 1/n. Можно получить унитарные преобразования, установив ключевой аргумент norm в значение "ortho" (по умолчанию None), так что как прямые, так и обратные преобразования будут масштабироваться на 1/\sqrt{n}.

Вещественные и эрмитовы преобразования

Если входной сигнал чисто вещественный, его преобразование является эрмитовым, т.е. составляющая на частоте f_k является комплексно сопряжённой с составляющей на частоте -f_k, что означает, что для вещественных входов информация в составляющих отрицательных частот не содержит информации, которая уже не содержится в составляющих положительных частот. Семейство функций rfft предназначено для работы с вещественными входными данными и использует эту симметрию, вычисляя только составляющие положительных частот, вплоть до и включая частоту Найквиста. Таким образом, n входных точек дают n/2+1 комплексных выходных точек. Обратные преобразования из этого семейства предполагают ту же симметрию своего ввода, и для выходных данных из n точек используется n/2+1 входных точек.

Соответственно, если спектр чисто вещественный, сигнал является эрмитовым. Семейство функций hfft использует эту симметрию, используя n/2+1 комплексных точек во входной (временной) области для n вещественных точек в частотной области.

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

Более высокие измерения

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

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

Кули, Джеймс У., и Джон У. Такер, 1965, «Алгоритм для машинного вычисления комплексных рядов Фурье», Math. Comput. 19: 297-301.

NR

Пресс, У., Теукольский, С., Веттерин, У.Т., и Фланнери, Б.П., 2007, Числовые рецепты: Искусство вычислений в науке, гл. 12-13. Изд-во Кембриджского университета, Кембридж, Великобритания.

Примеры

Примеры см. в различных функциях.

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/routines.fft.html

Spec-Zone.ru

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