繁体   English   中英

Python中的时间频谱图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM