【发布时间】:2015-10-30 19:33:24
【问题描述】:
我有一些以 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,您应该使用一维数组或序列,所以我认为问题可能就在这里。
-
抱歉不清楚。我已经更新了这个问题。基本上我的 3D 阵列的 3 个维度是电极 * 电压 * 试验。我在一次试验中为单个电极采用一维阵列(电压),并希望从中获得频谱图。所以是的,我正在绘制一维数组
-
尝试类似
specgram(data, NFFT=64, noverlap=63, Fs=256)如果您只有 256 个样本并且对 256 个样本进行 FFT,那么您将无法及时解决 -
成功了,谢谢!如果您将其发布为答案,我可以接受它
标签: python scipy signal-processing spectrogram time-frequency