python 傅里叶变换画图
时间: 2025-03-01 17:46:50 浏览: 61
### 使用 Python 实现傅里叶变换并绘图
为了实现傅里叶变换并绘制相应的图形,可以利用 `numpy` 和 `matplotlib` 库来完成这一过程。下面是一个完整的代码示例,展示了如何创建一个正弦波形,在时间域上对其进行采样,执行快速傅里叶变换 (FFT),最后展示其频谱。
#### 导入必要的库
首先需要导入用于数值计算和数据可视化的两个主要库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
#### 设置参数与生成时域信号
定义一些基本参数如采样频率 (`Fs`)、目标频率 (`f`) 以及基于这些设置构建的时间向量 (`t`) 和对应的正弦波形式的时域信号 (`x`)。
```python
# 参数设定
Fs = 1000 # 采样频率
Ts = 1.0 / Fs # 采样间隔
f = 5 # 正弦波频率
time_end = 1 # 总持续时间为1秒
# 构建时间和信号数组
t = np.arange(0, time_end, Ts)
x = np.sin(2 * np.pi * f * t) # 创建正弦波信号[^1]
```
#### 执行 FFT 并处理结果
通过调用 `np.fft.fft()` 函数来进行离散傅立叶变换操作,并获取到转换后的复数表示的结果。接着计算出对应的真实物理意义下的频率轴以便于后续作图解释。
```python
n_samples = len(x) # 获取样本总数
y_fft = np.fft.fft(x) # 对输入信号做FFT得到复数输出
freq_axis = np.fft.fftfreq(n_samples, d=Ts) # 得到真实的频率范围
# 考虑到镜像特性只保留前半部分的数据
half_n = int(np.ceil((n_samples + 1)/2))
positive_freqs = freq_axis[:half_n]
magnitude_spectrum = 2*np.abs(y_fft)[:half_n]/n_samples # 归一化幅度谱[^3]
phase_spectrum = np.angle(y_fft)[:half_n] # 计算相位角
```
#### 绘制图像
最终使用 Matplotlib 来分别显示幅度谱和相位谱图表。
```python
plt.figure(figsize=(14,6))
# 绘制双边振幅谱(已归一化)
plt.subplot(1, 2, 1)
plt.plot(positive_freqs, magnitude_spectrum)
plt.title('单边振幅谱')
plt.xlabel('Frequency [Hz]')
plt.ylabel('|Y(f)|')
# 绘制双边相位谱
plt.subplot(1, 2, 2)
plt.plot(positive_freqs, phase_spectrum)
plt.title('单边相位谱')
plt.xlabel('Frequency [Hz]')
plt.ylabel(r'$\angle Y(f)$')
plt.tight_layout()
plt.show()
```
上述代码片段不仅实现了对给定模拟信号的傅里叶分析,还提供了直观的方式去理解该信号在不同频率成分上的分布情况及其相对强度和相位关系。
阅读全文
相关推荐

















