簡體   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