Python - 时间频谱图

时间:2015-08-07 11:10:39

标签: python scipy signal-processing spectrogram time-frequency

我有一些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)

这给了我一些看起来像这样的东西:

enter image description here

对我来说这看起来不正确,因为轴范围不正确

此外,当我为所有EEG通道运行相同的代码时,在我的所有数据上,我最终得到完全相同的图(即使我已经验证每个数据的数据不同)

我对信号处理很陌生,是不是在我的数据布局方式或我如何使用我的功能时出错?

1 个答案:

答案 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)