Преобразование Фурье разлагает функцию на составляющие ее частоты. Частным случаем является выражение музыкального аккорда через громкость и частоту составляющих его нот.
Преобразование Фурье — это прикладная концепция в мире науки и цифровой обработки сигналов. FT (преобразование Фурье) обеспечивает представление исходного сигнала в частотной области. Например, учитывая синусоидальный сигнал во временной области, преобразование Фурье обеспечивает составляющую частоту сигнала.
С помощью преобразования Фурье периодические и непериодические сигналы могут быть преобразованы из временной в частотную область. Но сначала давайте посмотрим, как вычислять преобразования Фурье в Python.
Что такое функция numpy fft.fft() в Python?
Numpy fft.fft() — это функция, которая вычисляет одномерное дискретное преобразование Фурье в Python. Метод numpy fft.fft() вычисляет одномерное дискретное n-точечное дискретное преобразование Фурье (DFT) с помощью эффективного алгоритма быстрого преобразования Фурье (БПФ — англ. FFT) [CT].
Если вы уже установили numpy и scipy и хотите создать простое FFT набора данных, вы можете использовать функцию numpy fft.fft().
Синтаксис
|
1 |
numpy.fft.fft(a, n=None, axis=-1, norm=None) |
Параметры
- array_like
Входной массив может быть сложным.
- n: целое, необязательный
Длина преобразованной оси выхода. Если n меньше входной длины, то вход обрезается. Если он больше, то ввод дополняется нулями. Если n не задано, то используется длина входа по оси.
- axis: целое, необязательный
Ось, по которой вычисляется FFT. Если не указано, используется последняя ось.
- norm: {None, «ortho»}, необязательный
Новое в версии 1.10.0.
Режим нормализации(см. numpy.fft ). По умолчанию None.
Примеры
Прежде чем писать какой-либо код, установите следующие пакеты:
- Matplotlib: python3 -m pip install -U matplotlib.
- numpy: python3 -m pip install -U numpy.
- scipy: python3 -m pip install -U scipy.
Пример 1
Напишем код в файле app.py.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# app.py import matplotlib.pyplot as plt import numpy as np import scipy.fftpack # Number of sample points N = 600 # sample spacing T = 1.0 / 800.0 x = np.linspace(0.0, N*T, N) y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x) yf = scipy.fftpack.fft(y) xf = np.linspace(0.0, 1.0//(2.0*T), N//2) fig, ax = plt.subplots() ax.plot(xf, 2.0/N * np.abs(yf[:N//2])) plt.show() |
Выход:

Пример 2
Напишем следующий код в файле app.py.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py import matplotlib.pyplot as plt import numpy as np t = np.arange(256) sp = np.fft.fft(np.sin(t)) freq = np.fft.fftfreq(t.shape[-1]) plt.plot(freq, sp.real, freq, sp.imag) plt.show() |
Выход:

В приведенном выше примере реальный вход имеет FFT Hermitian. Например, симметричный в реальной части и антисимметричный в мнимой части, как описано в документации numpy.fft .
Заключение
Быстрое преобразование Фурье (БПФ — англ. FFT) является одним из наиболее важных алгоритмов обработки сигналов и анализа данных. БПФ — это быстрый алгоритм 0[NlogN] для вычисления дискретного преобразования Фурье (DFT), который наивно представляет собой вычисление 0[N^2]. ДПФ, как и более известная непрерывная версия преобразования Фурье, имеет прямую и обратную формы.
