给出一个利用小波变换将数据信号转换成时频图的代码
时间: 2024-11-22 08:36:22 浏览: 17
小波变换是一种将信号分解为不同频率和时间尺度成分的技术,可以提供比傅立叶变换更丰富的时空信息。在Python中,常用的是`pywt`库来进行小波分析。下面是一个简单的例子,展示如何使用`pywavelets`库生成一个二维的时间-频率(时频)图:
```python
import numpy as np
from pywt import wavedec2, imshow_wavedec2
# 假设我们有一个简单的正弦信号
data = np.sin(2 * np.pi * np.arange(0, 1000) / 100)
# 使用Daubechies 4级小波(db4)进行小波分解
cA, (cH, cV, cD) = wavedec2(data, 'db4', level=4) # 第四个level通常足够细致地显示高频细节
# 将系数重构到时频图上
coeffs = [cA] + [np.abs(i) for i in (cH, cV, cD)] # 取绝对值显示幅度
frequencies = np.array([8, 16, 32, 64]) # 因为我们在第4层停止,所以对应的是这些频率
fig, axs = plt.subplots(nrows=2, ncols=2)
for ax, freq, coef in zip(axs.flat, frequencies, coeffs):
t, s = np.meshgrid(np.arange(len(data)), np.arange(freq))
im = ax.imshow(s, extent=[t.min(), t.max(), data.min(), data.max()], cmap='gray')
ax.set_title(f"Frequency: {freq} Hz")
ax.set_xlabel('Time')
ax.set_ylabel('Amplitude')
plt.tight_layout()
plt.show()
阅读全文