【发布时间】:2021-07-26 03:41:41
【问题描述】:
我想创建脑电波的时频表示(通过 MEG 神经成像获得的神经活动数据)。
我的问题由我的previous question跟进
我需要的是脑电波不同频段的时频表示(幅度值或功率值)。
更具体地说,脑电波的频带定义如下:
增量:0.5-4 赫兹 θ:4-8赫兹 阿尔法:8-12 赫兹 测试版:12-30 赫兹 low_gamma 30-80 赫兹 high_gamma = 80 - 120 赫兹
previous thread 中我的(固定)代码:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from scipy import signal
N = 5000
rnd = np.random.RandomState(12345)
brain_signal = np.sin(np.linspace(0, 1000, N)) + rnd.uniform(0, 1, N)
widths = np.arange(1, N//8)
cwtmatr = signal.cwt(brain_signal, signal.ricker, widths)
fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(10, 6))
axes = ax.flatten()
sns.lineplot(np.linspace(0, 1000, N), brain_signal, ax=axes[0], lw=2)
sns.heatmap(cwtmatr, cmap='Spectral', ax=axes[1]);
axes[0].set_title('Brain signal')
axes[1].set_title('CWT of brain signal')
plt.tight_layout()
我的问题是,y 轴上的值是否正确显示频率信息?如果没有,我应该如何解决?
更新: 上述代码的结果:
提前致谢
【问题讨论】:
-
不,小波变换不会产生频域信息,尽管它是相似的。如果你真的需要频域信息,也许你应该做 FFT 而不是 CWT。 en.wikipedia.org/wiki/Wavelet_transform
标签: python numpy scipy signal-processing wavelet-transform