在 Python 中绘制快速傅立叶变换(FFT)
Shivam Arora
2023年1月30日
2021年10月2日
在这篇 Python 教程文章中,我们将了解快速傅立叶变换并在 Python 中绘制它。
傅里叶分析将函数作为周期性分量的集合并从这些分量中提取这些信号。当函数及其变换都与离散部分交换时,则表示为傅立叶变换。
FFT 主要与计算算法一起工作以提高执行速度。滤波算法、乘法、图像处理是它的一些应用。
使用 Python scipy.fft
模块进行快速傅立叶变换
在快速傅立叶变换中要衡量的最重要的一点之一是我们只能将其应用于时间戳一致的数据。scipy.fft
模块将给定的时域转换为频域。长度为 N 序列 x[n]
的 FFT 由 fft()
函数计算。
例如,
from scipy.fftpack import fft
import numpy as np
x = np.array([4.0, 2.0, 1.0, -3.0, 1.5])
y = fft(x)
print(y)
输出:
[5.5 -0.j 6.69959347-2.82666927j 0.55040653+3.51033344j
0.55040653-3.51033344j 6.69959347+2.82666927j]
我们还可以使用噪声信号,因为它们需要大量计算。例如,我们可以使用 numpy.sin()
函数来创建一个正弦序列并绘制它。为了绘制系列,我们将使用 Matplotlib
模块。
请参考以下示例。
import scipy.fft
import matplotlib.pyplot as plt
import numpy as np
N = 500
T = 1.0 / 600.0
x = np.linspace(0.0, N*T, N)
y = np.sin(60.0 * 2.0*np.pi*x) + 0.5*np.sin(90.0 * 2.0*np.pi*x)
y_f = scipy.fft.fft(y)
x_f = np.linspace(0.0, 1.0/(2.0*T), N//2)
plt.plot(x_f, 2.0/N * np.abs(y_f[:N//2]))
plt.show()
请注意,scipy.fft
模块建立在 scipy.fftpack
模块之上,具有更多附加功能和更新的功能。
使用 Python numpy.fft
模块进行快速傅立叶变换
numpy.fft
的工作原理类似于 scipy.fft
模块。scipy.fft
从 numpy.fft
导出一些功能。
处理二维数组时,numpy.fft
被认为更快。实现是一样的。
例如,
import matplotlib.pyplot as plt
import numpy as np
N = 500
T = 1.0 / 600.0
x = np.linspace(0.0, N*T, N)
y = np.sin(60.0 * 2.0*np.pi*x) + 0.5*np.sin(90.0 * 2.0*np.pi*x)
y_f = np.fft.fft(y)
x_f = np.linspace(0.0, 1.0/(2.0*T), N//2)
plt.plot(x_f, 2.0/N * np.abs(y_f[:N//2]))
plt.show()