傅里叶变换是一种数学工具,用于将信号从其原本的时间域或者空间域转换到频率域。对于连续时间信号,我们通常讨论的是傅里叶变换(Fourier Transform),而对于离散时间信号,则会使用离散傅里叶变换(Discrete Fourier Transform, DFT)。在实际应用中,快速傅里叶变换(Fast Fourier Transform, FFT)算法被广泛用来高效地计算DFT。
在Python中,我们可以使用numpy
库来进行傅里叶变换,而matplotlib
库则可以用来可视化结果。
下面是一个使用numpy.fft
模块进行快速傅里叶变换的例子,我们将对一个简单的正弦波信号进行FFT,并展示其频谱。
import numpy as np
import matplotlib.pyplot as plt
# 设置采样率和时间长度
fs = 1000 # 采样频率
T = 1/fs # 采样间隔
N = 1000 # 采样点数
t = np.linspace(0, N*T, N, endpoint=False) # 时间向量
# 创建信号,假设是一个50Hz的正弦波
signal = np.sin(2 * np.pi * 50 * t) + 0.5 * np.sin(2 * np.pi * 120 * t)
# 计算傅里叶变换
yf = np.fft.fft(signal)
xf = np.fft.fftfreq(N, T)[:N//2]
yf = 2.0/N * np.abs(yf[:N//2])
# 绘制图形
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title('Original Signal')
plt.ylabel('Amplitude')
plt.subplot(2, 1, 2)
plt.plot(xf, yf)
plt.title('Magnitude of FFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.tight_layout()
plt.show()