python使用stft绘制一个时变信号的时域图、频域图
时间: 2024-06-09 14:06:27 浏览: 234
要绘制一个时变信号的时域图和频域图,需要使用Python的信号处理库中的STFT函数。
首先,你需要导入所需的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
```
接下来,生成一个时变信号:
```python
# 生成一个时变信号
fs = 1000
t = np.linspace(0, 1, fs)
f1 = 5
f2 = 100
x = np.sin(2*np.pi*f1*t) + np.sin(2*np.pi*f2*t)
x += np.random.normal(0, 0.1, len(x)) # 添加噪声
```
现在,你可以使用STFT函数计算出时变信号的时域图和频域图:
```python
# 计算STFT
f, t, Zxx = signal.stft(x, fs, nperseg=100, noverlap=75)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.pcolormesh(t, f, np.abs(Zxx), cmap='viridis')
plt.title('STFT Magnitude')
plt.xlabel('Time [sec]')
plt.ylabel('Frequency [Hz]')
plt.ylim(0, 200)
plt.colorbar()
plt.show()
# 绘制频域图
plt.figure(figsize=(10, 6))
plt.pcolormesh(t, f, np.angle(Zxx), cmap='hsv')
plt.title('STFT Phase')
plt.xlabel('Time [sec]')
plt.ylabel('Frequency [Hz]')
plt.ylim(0, 200)
plt.colorbar()
plt.show()
```
这些代码将生成一个时域图和一个频域图,如下所示:
![STFT Magnitude](https://i.imgur.com/dh5a4tB.png)
![STFT Phase](https://i.imgur.com/lO3b7G3.png)
这些图表显示了时变信号的频率分量随时间的变化,以及相位随时间的变化。
阅读全文