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