使用傅里叶变换画图Python代码
时间: 2025-03-23 07:12:01 浏览: 34
### Python 实现傅里叶变换并绘图
以下是基于 `numpy` 和 `matplotlib` 的代码示例,展示如何通过傅里叶变换来分析信号频率成分,并将其可视化。
```python
import numpy as np
import matplotlib.pyplot as plt
# 创建时间序列
t = np.linspace(0, 1, 1000, endpoint=False)
# 构造复合波形 (由多个正弦波组成)
frequencies = [5, 25, 50] # 频率分量
amplitudes = [1, 0.5, 0.2] # 幅度分量
signal = sum([amp * np.sin(2 * np.pi * freq * t) for amp, freq in zip(amplitudes, frequencies)])
# 执行快速傅里叶变换 (FFT)
fft_result = np.fft.fft(signal)
fft_magnitude = np.abs(fft_result) / len(t) # 归一化幅度
fft_phase = np.angle(fft_result) # 获取相位角
frequency_axis = np.fft.fftfreq(len(t), d=t[1]-t[0])[:len(t)//2]
# 可视化原始信号和频谱
plt.figure(figsize=(12, 6))
# 子图1:原始信号
plt.subplot(2, 1, 1)
plt.plot(t, signal, color='blue')
plt.title('Original Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 子图2:频域表示
plt.subplot(2, 1, 2)
plt.stem(frequency_axis, fft_magnitude[:len(t)//2], 'r', markerfmt=" ", basefmt="-b")
plt.title('Frequency Spectrum via FFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.tight_layout()
plt.show()
```
上述代码实现了以下功能:
- 使用 `np.linspace` 创建均匀分布的时间轴。
- 合成一个多频率的正弦波作为测试信号[^2]。
- 利用 `numpy.fft.fft` 对信号执行离散傅里叶变换 (DFT),提取其频域特征。
- 将结果分为幅值 (`magnitude`) 和相位 (`phase`) 进行进一步分析。
- 使用 `matplotlib` 绘制时域中的原始信号以及频域中的频谱图。
此方法广泛应用于音频处理、振动分析等领域,能够有效揭示隐藏在复杂信号背后的周期性和谐振特性[^3]。
#### 注意事项
为了运行以上代码,请确保已成功安装 `numpy` 和 `matplotlib` 库。如果尚未完成安装,可以参考官方文档或指定站点获取 `.whl` 文件进行本地安装。
---
###
阅读全文
相关推荐

















