我有一些64频道的EEG数据以256Hz采样,我试图对每个频道进行时间频率分析并绘制频谱图。
数据存储在一个numpy 3d数组中,其中一个维度的长度为256,每个元素包含所有采样时间点的微伏读数(每个数据通道的总长度为1秒)。
要清楚:我的3D阵列是64 * 256 * 913(电极*电压*试验)。试验只是一个实验的单一试验。所以我想做的是从单次试验中获取单个电极,以及整个1D电压矢量并创建时频谱图。所以我想从数据[0,:,0]创建一个谱图。
对于每个电极,我想要一个图表,其中y轴是频率,x轴是时间,颜色/强度是功率
我试过在python中使用它:
from matplotlib.pyplot import specgram
#data = np.random.rand(256)
specgram(data, NFFT=256, Fs=256)
这给了我一些看起来像这样的东西:
对我来说这看起来不正确,因为轴范围不正确
此外,当我为所有EEG通道运行相同的代码时,在我的所有数据上,我最终得到完全相同的图(即使我已经验证每个数据的数据不同)
我对信号处理很陌生,是不是在我的数据布局方式或我如何使用我的功能时出错?
答案 0 :(得分:0)
specgram
函数的documentation:
绘制光谱图。
呼叫签名:
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长度段和每个部分的频谱 计算。窗口函数窗口应用于每个段, 并且使用noverlap指定每个段的重叠量。 谱图被绘制为色图(使用imshow)。
x:1-D数组或序列包含数据的数组或序列
看起来您的问题是您没有传递一维数据。尝试:
from matplotlib.pyplot import specgram
specgram(data.flatten(), NFFT=256, Fs=256)