首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中连续小波变换图(尺度图)中的频率轴

python中连续小波变换图(尺度图)中的频率轴
EN

Stack Overflow用户
提问于 2017-04-24 19:51:21
回答 1查看 3.4K关注 0票数 9

我有一个脑电图信号,我有兴趣在时域和频域对其进行分析。我已经使用了scipy.signal.spectrogram函数,但我认为使用小波可以获得更好的特征提取结果。我尝试对我创建的人工信号运行连续小波变换,如下所示:

代码语言:javascript
复制
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矩阵:

代码语言:javascript
复制
plt.matshow(coef)
plt.show()

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 11:25:36

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

我建议使用plt.pcolormesh(t, freqs, coef),因此时间和频率用于轴。然后你可以玩尺度游戏--比如说,把频率轴放在对数尺度上--并产生类似这样的结果:

以下是从您的示例派生而来的生成图像的代码:

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43587314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档