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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python与erp_Python-EEG处理和事件相关电位(ERP)

發(fā)布時(shí)間:2024/1/1 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python与erp_Python-EEG处理和事件相关电位(ERP) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

更多技術(shù)干貨第一時(shí)間送達(dá)

腦機(jī)接口社區(qū)推薦搜索

腦機(jī)接口

MNE

EEGLAB

算法

匯總

數(shù)據(jù)

有后臺(tái)留言問(wèn),代碼是在哪里運(yùn)行的。這里說(shuō)明一下,案例介紹的代碼均在jupyter notebook中運(yùn)行的,當(dāng)然這些代碼也可以在PyCharm等IDE中運(yùn)行(不過(guò)可能存在再不同環(huán)境下代碼需要稍微改動(dòng)的情況。)

Python腦電圖處理案例:

import mnefrom mne.datasets

import sample#加載數(shù)據(jù)文件data_path = sample.data_path()raw_fname = data_path + "/MEG/sample/sample_audvis_filt-0-40_raw.fif"event_fname = data_path + "/MEG/sample/sample_audvis_filt-0-40_raw-eve.fif"# 這些EEG數(shù)據(jù)已經(jīng)默認(rèn)有平均參考(average reference)raw = mne.io.read_raw_fif(raw_fname, preload=True)

# 只篩選 EEG 和 EOG數(shù)據(jù)raw.pick_types(meg=False, eeg=True, eog=True)# 查看 raw 信息, 可以發(fā)現(xiàn)有59個(gè)EEG通道和1個(gè)EOG通道print(raw.info)

實(shí)際上,擁有一些EOG通道的EEG通道是很普遍的。在實(shí)際獲取EEG數(shù)據(jù)時(shí),會(huì)受到眼動(dòng)等活動(dòng)的影響。

如果要更改通道類型,可以使用mne.io.Raw.set_channel_types()方法。

例如,要將EOG通道視為EEG,可以使用以下方法更改其類型:raw.set_channel_types(mapping={"EOG 061": "eeg"})print(raw.info)

比較上面前后兩個(gè)打印中的紅框內(nèi)容,可以發(fā)現(xiàn),EOG已被EEG取代了。

# 更改EOG通道的名稱raw.rename_channels(mapping={"EOG 061": "EOG"})# 為了講述案例,我們將EOG頻道重設(shè)為EOG類型。raw.set_channel_types(mapping={"EOG": "eog"})"""樣本數(shù)據(jù)集中的EEG通道有對(duì)應(yīng)通道位置。這些位置可在每個(gè)通道說(shuō)明的"位置"中找到。下面是獲取第一個(gè)通道的位置"""print(raw.info["chs"][0]["loc"])

[-0.03737009 0.10568011 0.073338750.00235201 0.11096951 -0.03500458

0. 1. 0. 0. 0. 1. ]

"""可以使用mne.io.Raw.plot_sensors()繪制通道位置。如果您的數(shù)據(jù)沒(méi)有位置,則可以使用MNE隨附的Montages來(lái)設(shè)置"""raw.plot_sensors()raw.plot_sensors("3d") # in 3D

設(shè)置腦電圖參考

首先,從原始對(duì)象中刪除參考。

這顯示的移除了MNE默認(rèn)的EEG平均參考。

raw_no_ref, _ = mne.set_eeg_reference(raw, [])

EEG channel type selected for re-referencing

EEG data marked as already having the desired reference. Preventing automatic future re-referencing to an average reference.

Removing existing average EEG reference projection.

然后,定義了Epochs,并計(jì)算了左聽(tīng)覺(jué)狀態(tài)的ERP。reject = dict(eeg=180e-6, eog=150e-6)event_id, tmin, tmax = {"left/auditory": 1}, -0.2, 0.5events = mne.read_events(event_fname)epochs_params = dict(events=events, event_id=event_id, tmin=tmin, tmax=tmax,reject=reject)evoked_no_ref = mne.Epochs(raw_no_ref, **epochs_params).average()del raw_no_ref

# save memorytitle = "EEG Original reference"evoked_no_ref.plot(titles=dict(eeg=title), time_unit="s")evoked_no_ref.plot_topomap(times=[0.1], size=3., title=title, time_unit="s")

設(shè)置平均參考電極

"""平均參考:通常默認(rèn)情況下添加,但也可以顯式添加。"""raw.del_proj()raw_car, _ = mne.set_eeg_reference(raw,

"average", projection=

True)evoked_car = mne.Epochs(raw_car, **epochs_params).average()del raw_car

# save memorytitle =

"EEG Average reference"evoked_car.plot(titles=dict(eeg=title), time_unit=

"s")evoked_car.plot_topomap(times=[

0.1], size=

3., title=title, time_unit=

"s")

自定義參考:

使用通道EEG 001和EEG 002的平均值作為參考raw_custom, _ = mne.set_eeg_reference(raw, [

"EEG 001",

"EEG 002"])evoked_custom = mne.Epochs(raw_custom, **epochs_params).average()del raw_custom

# save memorytitle =

"EEG Custom reference"evoked_custom.plot(titles=dict(eeg=title), time_unit=

"s")evoked_custom.plot_topomap(

times=[0.1], size=3.,title=title, time_unit=

"s")

可以使用" / "分隔的"標(biāo)記"來(lái)選擇Epochs中的試驗(yàn)子集。

首先,我們創(chuàng)建一個(gè)包含4個(gè)條件的Epochs對(duì)象。

event_id = {"left/auditory": 1, "right/auditory": 2,"left/visual": 3, "right/visual": 4}epochs_params = dict(events=events, event_id=event_id, tmin=tmin, tmax=tmax,reject=reject)epochs = mne.Epochs(raw, **epochs_params)print(epochs)

接下來(lái),我們創(chuàng)建左刺激和右刺激試驗(yàn)的平均值。

我們可以使用基本的操作,例如,構(gòu)建和繪制不同的ERP。left,

right = epochs[

"left"].average(), epochs[

"right"].average()# create and plot difference

ERPjoint_kwargs = dict(ts_args=dict(time_unit="s"),topomap_args=dict(time_unit="s"))mne.combine_evoked([

left, -

right], weights="

equal").plot_joint(**joint_kwargs)

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EEG : ["EEG 001"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

這是權(quán)重相等的差異。

如果試驗(yàn)編號(hào)不平衡,則也可以考慮使每個(gè)條件的事件數(shù)相等(使用epochs.equalize_event_counts)。

例如,首先,我們?yōu)槊糠N情況創(chuàng)建單獨(dú)的ERP。aud_l = epochs[

"auditory",

"left"].average()aud_r = epochs[

"auditory",

"right"].average()vis_l = epochs[

"visual",

"left"].average()vis_r = epochs[

"visual",

"right"].average()all_evokeds = [aud_l, aud_r, vis_l, vis_r]print(all_evokeds)

"""這可以通過(guò)Python列表理解來(lái)簡(jiǎn)化"""all_evokeds = [epochs[cond].average()

for cond

in sorted(event_id.keys())]print(all_evokeds)# 然后,我們也以這種方式構(gòu)造和繪制左右試驗(yàn)的未加權(quán)平均值:mne.combine_evoked([aud_l, -aud_r, vis_l, -vis_r], weights=

"equal").plot_joint(**joint_kwargs)Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EEG : ["EEG 001"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

Rejecting epoch based on EOG : ["EOG"]

[, , , ]

通常,在字典或列表中存儲(chǔ)誘發(fā)對(duì)象是有意義的——無(wú)論是不同的條件,還是不同的主題。

"""如果將它們存儲(chǔ)在一個(gè)列表中,就可以很容易地對(duì)它們求平均值,例如,跨主題(或條件)的總平均值。"""grand_average = mne.grand_average(all_evokeds)mne.write_evokeds(

"tmp\\tmp-ave.fif", all_evokeds)# 如果“誘發(fā)對(duì)象”對(duì)象存儲(chǔ)在詞典中,則可以按名稱檢索它們。all_evokeds = dict((cond, epochs[cond].average())

for cond

in event_id)print(all_evokeds[

"left/auditory"])# 除了顯式訪問(wèn)外,還可以用于設(shè)置標(biāo)題。for cond

in all_evokeds:all_evokeds[cond].plot_joint(title=cond, **joint_kwargs)

總結(jié)

以上是生活随笔為你收集整理的python与erp_Python-EEG处理和事件相关电位(ERP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。