脑机接口基础学习03-认识及创建Epoch
前面兩篇文章一直在寫Epoch,那么Epoch到底是什么東西?
概念簡介:從連續的腦電圖信號中提取一些特定時間窗口的信號,這些時間窗口可以稱作為epochs
由于EEG是連續收集的,要分析腦電事件相關的電位時,需要將信號‘切分’成時間片段,這些時間片段被鎖定到某個事件(例如刺激)中的時間片段,比如在EEGLAB分析中,EEGLAB將連續數據視為由一個較長的周期(long epoch)組成,而將數據切分后,它由多個較小的時期(small epoch)組成
舉個例子:
假如我們有一個長度為60s的信號X,采樣頻率為1Hz,腦電信號的矩陣表示1x60矩陣,如果將信號劃分為一些2s的信號,則將有30個peoch(信號中每2s就是一個epoch)
在MNE中,Epoch對象是一種把連續型數據作為時間段集合的表示方法,形狀為(n_events,n_channels,n_times)的數組形式:
創建Epochs對象方式有三種:
(1)通過Raw對象和事件點(event times)
(2)通過讀取.fif文件數據生成Epoch對象
(3)通過mne.EpochsArray從頭創建Epoch對象
來看一個簡單的小例子:
輸出結果:
下面來看一下如何從頭創建Epoch對象
在實際過程中,有時需要從頭創建數據來創建Epoch對象,方式:利用mne.EpochsArray創建Epochs對象,創建時直接構建numpy數組即可,數據對應的單位:
V:eeg,eog,seeg,emg,ecg,bio,ecog
T:mag
T/m:grad
M:hbo.hbr
Am:dipole
AU:misc
案例1
#引入python包 import mne import numpy as np import matplotlib.pyplot as plt''' 主要步驟如下: 第一步:構建數據 構建一個大小為10x5x200的三維數組,數組中數據是隨機數: 第一維數據表示:10 epochs 第二維數據表示:5 channels 第三維數據表示:2 seconds per epoch'''#采樣頻率sfreq=100 data=np.random.randn(10,5,sfreq*2)#創建一個info結構info=mne.create_info(ch_names=['MEG1','MEG2','EEG1','EEG2','EOG'],ch_types=['grad','grad','eeg','eeg','eog'],sfreq=sfreq)''' 構建events 在創建Epochs對象時,必須提供一個‘events’數組, 事件(event)描述的是某一種波形(癥狀)的起始點,其為一個三元組,形狀為(n_events,3): 第一列元素以整數來描述事件起始采樣點; 第二列元素對應的是當前事件來源的刺激通道(stimulus channel)的先前值(previous value),該 值大多數情況是0; 第三列元素表示的是該event的id''' events=np.array([[0,0,1],[1,0,2],[2,0,1],[3,0,2],[4,0,1],[5,0,2],[6,0,1],[7,0,2],[8,0,1],[9,0,2], ])''' 設置事件的id 如果是dict,則以后可以使用這些鍵訪問關聯的事件。示例:dict(聽覺=1,視覺=3) 如果是int,將創建一個id為string的dict 如果是列表,則使用列表中指定ID的所有事件 如果沒有,則所有事件都將一起使用,并使用與事件id整數對應的字符串整數名稱創建dict''' #創建event id,受試者或者微笑或者皺眉 event_id=dict(smiling=1,frowning=2)#tmin:event開始前的時間,如果未指定,則默認為0#設置事件開始前時間為-0.1s tmin=-0.1''' 創建epochs對象''' #利用mne.EpochsArray創建epochs對象custom_epochs=mne.EpochsArray(data,info,events,tmin,event_id) print(custom_epochs)#繪制 _=custom_epochs['smiling'].average().plot(time_unit='s')
案例2
OK,今天的腦機接口學習結束
總結
以上是生活随笔為你收集整理的脑机接口基础学习03-认识及创建Epoch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈工大软件构造笔记1
- 下一篇: 网站架构优化之css+div设计对SEO