使用stft对于函数y=sin(2π(40t+sin(1.5t)))+sin(2π(17t+6sin(1.5t)))进行处理,并绘制出它的时域图及频率与时间的变换关系
时间: 2023-06-15 09:08:34 浏览: 126
首先,我们需要导入需要的库,并生成函数y=sin(2π(40t+sin(1.5t)))+sin(2π(17t+6sin(1.5t)))的时域图。代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成时间序列
t = np.arange(0, 10, 0.001)
# 生成函数y=sin(2π(40t+sin(1.5t)))+sin(2π(17t+6sin(1.5t)))
y = np.sin(2*np.pi*(40*t + np.sin(1.5*t))) + np.sin(2*np.pi*(17*t + 6*np.sin(1.5*t)))
# 绘制时域图
plt.plot(t, y)
plt.xlabel('Time(s)')
plt.ylabel('Amplitude')
plt.title('y=sin(2π(40t+sin(1.5t)))+sin(2π(17t+6sin(1.5t)))')
plt.show()
```
运行代码得到的时域图如下:
![时域图](https://img-blog.csdn.net/2018052810080948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYm9vazE5OTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
接下来,使用stft对函数进行处理,代码如下:
```python
from scipy import signal
# 使用stft进行频谱分析
f, t, Zxx = signal.stft(y, fs=1000, nperseg=1000//16)
# 绘制频谱图
plt.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=5)
plt.title('STFT Magnitude')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
```
运行代码得到的频谱图如下:
![频谱图](https://img-blog.csdn.net/20180528100937688?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYm9vazE5OTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
可以看到,频谱图中有两个明显的峰值,分别对应于40Hz和17Hz的频率成分。同时,我们还可以看到这两个成分的频率都会随着时间发生变化,这也是由于函数中的sin(1.5t)项造成的。
阅读全文