python傅里叶变化matplot
时间: 2025-01-08 11:22:03 浏览: 3
### 实现傅里叶变换并可视化
为了在Python中实现傅里叶变换并使用`matplotlib`进行结果的可视化,可以按照以下方法操作。此过程涉及创建一个时间序列信号,对其进行快速傅里叶变换(FFT),然后绘制其频谱特性。
#### 导入必要的库
首先,需要导入几个重要的Python库来完成这项工作:
```python
import numpy as np
from matplotlib import pyplot as plt
```
这些库提供了数值运算以及绘图的功能[^2]。
#### 创建测试信号
定义一个简单的正弦波作为输入信号来进行实验:
```python
t = np.linspace(0, 1, 1000) # 定义时间向量
frequency = 5 # 设置信号频率为5Hz
signal = np.sin(2 * np.pi * frequency * t) # 构建正弦波形
```
这段代码构建了一个周期性的正弦波,其中包含了特定的时间间隔和已知频率的信息[^4]。
#### 执行快速傅里叶变换
利用NumPy中的`fft`模块执行快速傅里叶变换,并获取相应的频率分量及其对应的振幅值:
```python
transformed_signal = np.fft.fft(signal)
amplitude_spectrum = np.abs(transformed_signal)
# 计算真实的频率轴
sample_rate = 1 / (t[1]-t[0]) # 基于采样定理得到样本率
positive_frequencies = np.fft.fftfreq(len(t), d=1/sample_rate)[:len(t)//2]
positive_amplitudes = amplitude_spectrum[:len(t)//2]*2/len(t) # 归一化处理
```
这里特别注意的是只取了一半的数据用于显示正值部分的频谱,因为对于实数输入来说,另一半是对称重复的部分。
#### 绘制图形
最后一步就是调用Matplotlib来展示原始时间和转换后的频域特征图表:
```python
plt.figure(figsize=(12, 6))
# 绘制原有时域信号
plt.subplot(1, 2, 1)
plt.plot(t, signal)
plt.title('Time Domain Signal')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
# 绘制频域下的幅度谱
plt.subplot(1, 2, 2)
plt.stem(positive_frequencies, positive_amplitudes, 'b', markerfmt=" ", basefmt="-b")
plt.title('Frequency Domain Amplitude Spectrum')
plt.xlabel('Frequency [Hz]')
plt.ylabel('Magnitude')
plt.tight_layout()
plt.show()
```
上述脚本会生成两个子图窗口——左侧是最初产生的时域内随时间变化的正弦波;右侧则是经过傅里叶变换之后,在不同频率上的强度分布情况[^3]。
阅读全文