正弦波fft的频谱图
时间: 2024-12-26 08:20:03 浏览: 6
### 绘制正弦波的FFT频谱图
为了更好地理解和展示正弦波经过快速傅里叶变换(FFT)后的频谱特性,下面提供了一个完整的 Python 代码示例来生成并绘制这样的频谱图。
#### 导入必要的库
首先需要导入一些常用的科学计算和绘图库:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
```
#### 创建正弦波数据
定义参数以创建一个简单的正弦波信号。这里假设采样率为 `sr` Hz,并设定正弦波的具体频率 `f` 和持续时间 `duration` 秒:
```python
# 参数设置
sr = 1000 # 采样率 (Hz)
f = 5 # 正弦波频率 (Hz)
duration = 2 # 时间长度 (秒)
t = np.linspace(0., duration, int(sr * duration), endpoint=False) # 时间向量
signal = np.sin(2 * np.pi * f * t) # 构建正弦波形
```
#### 应用 FFT 变换
接着应用 FFT 函数到上述构建好的正弦波上,并获取对应的频率范围:
```python
N = signal.size # 获取样本数量
yf = fft(signal) # 执行离散傅立叶变换
xf = fftfreq(N, 1 / sr)[:N//2] # 计算相应的频率分量
amplitudes = 2.0/N * np.abs(yf[:N//2]) # 归一化幅度值
```
#### 绘制频谱图
最后一步就是利用 Matplotlib 来可视化这些结果,其中横坐标表示的是不同频率下的分布情况而纵坐标则对应于各频率处的能量大小:
```python
plt.figure(figsize=(8, 6))
plt.plot(xf, amplitudes)
plt.grid()
plt.title('Spectrum of a Sine Wave')
plt.xlabel('Frequency [$\mathrm{Hz}$]')
plt.ylabel('Amplitude')
plt.show()
```
通过这段程序可以清晰看到,在指定位置有一个明显的尖峰,这正好反映了原始输入信号中存在的特定频率成分[^1]。
阅读全文