用python写连续小波将一维数据变为时频图的代码
时间: 2024-05-04 11:17:26 浏览: 108
以下是用Python实现连续小波变换将一维数据变为时频图的代码:
```python
import numpy as np
import pywt
import matplotlib.pyplot as plt
# 生成测试数据
t = np.linspace(0, 1, 1000)
x = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 20 * t) + np.sin(2 * np.pi * 30 * t)
# 定义连续小波分析所需的参数
wavelet = 'morl' # 选择 Morlet 小波
scales = np.linspace(1, 100, 1000) # 尺度序列
sampling_rate = 1 / (t[1] - t[0])
# 进行连续小波分析
coefficients, frequencies = pywt.cwt(x, scales, wavelet, sampling_period=1/sampling_rate)
# 绘制时频图
plt.figure(figsize=(8, 4))
plt.imshow(abs(coefficients), extent=[0, 1, frequencies[-1], frequencies[0]], cmap='jet', aspect='auto')
plt.colorbar()
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.title('Continuous Wavelet Transform')
plt.show()
```
上述代码中,我们首先生成了一个包含三个正弦波的测试数据,然后选择了 Morlet 小波作为连续小波变换的基函数,定义了尺度序列和采样率,并使用 `pywt.cwt()` 函数进行连续小波分析,得到了小波系数和频率序列。最后,使用 `plt.imshow()` 函数绘制出了时频图。
阅读全文