pyi*_*gal 6 python signal-processing wavelet pywt
我有一个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)
Run Code Online (Sandbox Code Playgroud)
然后我绘制了coef矩阵:
plt.matshow(coef)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我的问题是如何调整比例和时间轴?
该函数plt.matshow(coef)不使用时间和频率数组来创建轴(但它创建基于样本索引的轴)。
我建议使用plt.pcolormesh(t, freqs, coef),因此时间和频率用于轴。然后你可以使用比例 \xe2\x80\x93 比如说,将频率轴放在对数比例 \xe2\x80\x93 中并产生类似的结果:
这是生成图像的代码,源自您的示例:
\n\nimport pywt\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom scipy.signal import chirp\n\n# Define signal\nfs = 128.0\nsampling_period = 1 / fs\nt = np.linspace(0, 2, 2 * fs)\nx = chirp(t, 10, 2, 40, \'quadratic\')\n\n# Calculate continuous wavelet transform\ncoef, freqs = pywt.cwt(x, np.arange(1, 50), \'morl\',\n sampling_period=sampling_period)\n\n# Show w.r.t. time and frequency\nplt.figure(figsize=(5, 2))\nplt.pcolor(t, freqs, coef)\n\n# Set yscale, ylim and labels\nplt.yscale(\'log\')\nplt.ylim([1, 100])\nplt.ylabel(\'Frequency (Hz)\')\nplt.xlabel(\'Time (sec)\')\nplt.savefig(\'egg.png\', dpi=150)\nRun Code Online (Sandbox Code Playgroud)\n