[英]Time frequency spectrogram in Python
我有一些以 256Hz 采样的 64 通道脑电图数据,我正在尝试对每个通道进行时频分析并绘制频谱图。
数据存储在 NumPy 3d 数组中,其中一个维度的长度为 256,每个元素包含所有采样时间点的微伏读数(每个数据通道的总长度为 1 秒)。
需要明确的是:我的 3D 阵列是 64 256 913(电极 * 电压 * 试验)。 试验只是一次试验的一次试验。 所以我想做的是从一次试验中取出一个电极,以及整个一维电压矢量,然后创建一个时频频谱图。 例如,我想从 data[0,:,0] 创建一个频谱图。
对于每个电极,我想要一个图,其中 y 轴是频率,x 轴是时间,颜色/强度是功率
我试过在 python 中使用它:
from matplotlib.pyplot import specgram
#data = np.random.rand(256)
specgram(data, NFFT=256, Fs=256)
这给了我一些看起来像这样的东西:
马上,这对我来说看起来不正确,因为轴范围不正确
此外,当我对所有 EEG 通道运行相同的代码时,我的所有数据都会得到完全相同的图(即使我已经验证每个通道的数据都不同)
我对信号处理还很陌生,在我的数据布局方式或我的功能使用方式上是否有什么地方出错了?
从specgram
函数的文档中:
绘制频谱图。
来电签名:
specgram(x,NFFT=256,Fs=2,Fc=0,detrend=mlab.detrend_none,window=mlab.window_hanning,noverlap=128,cmap=None,xextent=None,pad_to=None,sides='default', scale_by_freq=None, mode='default', scale='default', **kwargs)
计算并绘制 x 中数据的频谱图。 数据被分成 NFFT 长度段,并计算每个段的频谱。 对每个段应用加窗函数window,每个段的重叠量用noverlap指定。 频谱图被绘制为颜色图(使用 imshow)。
x:一维数组或序列 包含数据的数组或序列
看起来您的问题是您没有传递一维数据。 尝试:
from matplotlib.pyplot import specgram
specgram(data.flatten(), NFFT=256, Fs=256)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.