Python中连续小波变换图(比例图)中的频率轴

9

我有一个EEG信号,希望在时间和频率域分析。我已经使用了scipy.signal.spectrogram函数,但我认为使用小波可以获得更好的特征提取结果。我尝试在我创建的人工信号上运行连续小波变换,如下:

fs = 128.0
sampling_period = 1/fs
t = np.linspace(0, 2, 2*fs)
x = chirp(t,10,2,40,'quadratic')

coef, freqs = pywt.cwt(x, np.arange(1,50),'morl', 
sampling_period=sampling_period)

然后我绘制了coef矩阵:

plt.matshow(coef)
plt.show()

上面代码的结果

我的问题是如何调整比例尺和时间轴?

1个回答

4

plt.matshow(coef)函数不使用时间和频率数组来创建坐标轴(但它创建基于样本索引的坐标轴)。

我建议使用plt.pcolormesh(t, freqs, coef),这样时间和频率就用于坐标轴。然后您可以尝试调整比例-例如,将频率轴放在对数比例上-并产生类似于以下内容的内容:

enter image description here

以下是根据您的示例生成图像的代码:
import pywt
import numpy as np
import matplotlib.pyplot as plt

from scipy.signal import chirp

# Define signal
fs = 128.0
sampling_period = 1 / fs
t = np.linspace(0, 2, 2 * fs)
x = chirp(t, 10, 2, 40, 'quadratic')

# Calculate continuous wavelet transform
coef, freqs = pywt.cwt(x, np.arange(1, 50), 'morl',
                       sampling_period=sampling_period)

# Show w.r.t. time and frequency
plt.figure(figsize=(5, 2))
plt.pcolor(t, freqs, coef)

# Set yscale, ylim and labels
plt.yscale('log')
plt.ylim([1, 100])
plt.ylabel('Frequency (Hz)')
plt.xlabel('Time (sec)')
plt.savefig('egg.png', dpi=150)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接