日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

脑机接口基础学习03-认识及创建Epoch

發布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 脑机接口基础学习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對象
來看一個簡單的小例子:

''' ###讀取fif文件創建Epoch對象 步驟: (1)讀取fif文件,構建raw對象 (2)創建event對象 (3)創建epoch對象 (4)對epoch進行疊加平均得到evoked對象 (5)繪制evoked ''' #導入python庫函數 import mne from mne import io from mne.datasets import sample import matplotlib.pyplot as pltraw_fname=r'E:\腦機接口資料\MNE-sample-data\MEG\sample\sample_audvis_filt-0-40_raw.fif' event_fname=r'E:\腦機接口資料\MNE-sample-data\MEG\sample\sample_audvis_filt-0-40_raw-eve.fif' event_id,tmin,tmax=1,-0.2,0.5#讀取fif文件,創建raw對象 raw=io.read_raw_fif(raw_fname) #讀取包含event的fif文件,創建event對象 events=mne.read_events(event_fname)''' 挑選通道:EEG+MEG-bad channels''' raw.info['bads']+=['MEG 2443','EEG 053'] #bads+2more picks=mne.pick_types(raw.info,meg=True,eeg=False,stim=True,eog=True,exclude='bads')#讀取Epoch數據 epochs=mne.Epochs(raw,events,event_id,tmin,tmax,proj=True,picks=picks,baseline=(None,0),preload=True,reject=dict(grad=4000e-13,mag=4e-12,eog=150e-6))''' 對epochs數據進行求平均獲取誘發響應''' evoked=epochs.average() evoked.plot(time_unit='s') plt.show()

輸出結果:


下面來看一下如何從頭創建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

#引入python包import numpy as np import neoimport mne import matplotlib.pyplot as plt''' 設置 event id,用來識別 events''' event_id=1 #第一列表示樣本編號 events=np.array([[200,0,event_id],[1200,0,event_id],[2000,0,event_id]]) # List of three arbitrary events sfreq=1000#采樣頻率 times=np.arange(0,10,0.001)#Use 10000 samples(10s)sin=np.sin(times*10)#乘以10縮短周期 cos=np.cos(times*10)''' 利用sin和cos創建一個2個通道的700ms epochs的數據集只要是(n_epochs,n_channels,n_times)形狀的數據,都可以被用來創建'''epochs_data=np.array([[sin[:700],cos[:700]],[sin[1000:1700],cos[1000:1700]],[sin[1800:2500],cos[1800:2500]]])ch_names=['sin','cos'] ch_types=['mag','mag'] info=mne.create_info(ch_names=ch_names,sfreq=sfreq,ch_types=ch_types) epochs=mne.EpochsArray(epochs_data,info=info,events=events,event_id={'arbitrary':1}) epochs.plot(scalings='auto') plt.show()


OK,今天的腦機接口學習結束

總結

以上是生活随笔為你收集整理的脑机接口基础学习03-认识及创建Epoch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。