📜  Python|快速傅里叶变换(1)

📅  最后修改于: 2023-12-03 15:19:20.156000             🧑  作者: Mango

Python | 快速傅里叶变换

简介

快速傅里叶变换(FFT)是一种重要的数学算法,用于计算数字信号的傅里叶变换。Python中有许多库可以进行FFT操作,包括NumPy、SciPy、PyFFTW、pyFFTW等。本文将介绍如何在Python中使用NumPy库进行FFT操作。

安装NumPy

要使用NumPy进行FFT操作,首先需要安装NumPy库。可以使用以下命令在终端中安装NumPy库:

pip install numpy

使用NumPy进行FFT操作

在NumPy库中,使用numpy.fft模块可以进行FFT操作。可以使用以下代码导入该模块:

import numpy.fft as fft
一维FFT

假设有一个时间序列,可以使用fft.fft()函数进行一维FFT操作。该函数接受一个一维数组作为参数,并返回一个包含复数值的一维数组。

例如,下面的代码展示了如何对一个时间序列进行FFT操作:

import numpy as np
import matplotlib.pyplot as plt

# 生成时间序列
t = np.linspace(0, 1, 500)
# 生成信号
signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t)

# 对信号进行FFT
fft_signal = fft.fft(signal)

# 绘制信号
plt.plot(t, signal)
plt.title('Original Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()

# 绘制FFT结果
freqs = np.linspace(0, 1, len(fft_signal))
plt.plot(freqs, np.abs(fft_signal))
plt.title('FFT Result')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()

该代码将生成一个包含两个子图的图形。第一个子图将显示时域信号,第二个子图将显示频域信号。

二维FFT

在NumPy库中,可以使用fft2()函数进行二维FFT操作。该函数接受一个二维数组作为参数,并返回一个包含复数值的二维数组。

例如,下面的代码展示了如何对一个二维的灰度图像进行FFT操作:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 读取图像
img = cv.imread('lena.jpg', cv.IMREAD_GRAYSCALE)

# 对图像进行FFT
fft_img = fft.fft2(img)

# 移动零频率分量到中心
fft_shift_img = fft.fftshift(fft_img)

# 绘制原图
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')

# 绘制FFT结果
plt.subplot(122)
plt.imshow(np.abs(fft_shift_img), cmap='gray')
plt.title('FFT Result')
plt.show()

该代码将生成一个包含两个子图的图形。第一个子图将显示原始图像,第二个子图将显示FFT结果。

总结

本文介绍了如何在Python中使用NumPy库进行FFT操作。通过本文的学习,可以更好地理解FFT算法的应用以及如何使用Python库对其进行实现。