脑机接口基础学习05---认识Evoked及其对象创建

Evoked potential(EP)诱发电位或诱发反应是指出现诸如闪光或纯音之类的刺激后,从人类或其他动物
的神经系统,特别是大脑的特定部分记录的特定模式的电位。不同形式和类型的刺激会产生不同类型的电位
诱发电位振幅往往较低,从小于1微伏到数微伏不等,而脑电图为数十微伏,肌电图为毫伏,心电图通常接近20毫伏。为了在EEG、ECG、EMG等生物信号和环境噪声的背景下解决这些低幅度电位,通常需要对信号进行平均。信号被时间锁定在刺激上,大部分噪声是随机产生的,这样就可以通过对重复响应来平均掉噪声

诱发电位(Evoked)结构主要用于存储实验期间的平均数据,在MNE中,创建Evoked对象通常使用:
mne>epochs.average()来平均epochs数据来实现。

#######Evoked结构简介

import os.path as op
import matplotlib.pyplot as plt
import mne

'''
从文件中读取诱发数据集

'''

data_path=r'E:\脑机接口资料\MNE-sample-data'
#加载包含事件events的听觉数据集
fname=op.join(data_path,'MEG','sample','sample_audvis-ave.fif')
evokeds=mne.read_evokeds(fname,baseline=(None,0),proj=True)
print(evokeds)

在这里插入图片描述

'''
使用read_evokeds函数来加载诱发文件,并返回evoked实例列表,可以使用condition参数来读取指定类别

这里有['Left Auditory','Right Auditory','Left Visual',‘Right Visual’]等类别

'''
evoked=mne.read_evokeds(fname,condition='Left Auditory')
evoked.apply_baseline((None,0)).apply_proj()
print(evoked)

在这里插入图片描述

#打印evoked信息,这个信息和Raw对象以及Epochs对象中的info很相似

print(evoked.info)
print(evoked.times)

在这里插入图片描述

#查看evoked结构其他属性

print(evoked.nave)#Number of averaged epochs
print(evoked.first)#First time sample
print(evoked.last)#Last time sample
print(evoked.comment)#Comment on dataset.Usually the condition
print(evoked.kind) #Type of data,either average or standard_error

在这里插入图片描述

#快速提取并绘制全局能力谱(Global Field Power,GFP)作为跨通道的标准偏差
#这里仅对EEG显示

gfp=evoked.copy().pick_types(eeg=True,meg=False).data.std(axis=0)
fig,ax=plt.subplots(1)
ax.plot(evoked.times,gfp/1e6)#scale to uV
ax.set(xlabel='Time(sec)',ylabel='GFP(uV)')
fig.tight_layout()

在这里插入图片描述

########  a.读取evoked对象,创建evoked对象
#sample_audvis-ave.fif文件包含了听觉诱发电位

#1)读取fif文件,创建evoked对象
from mne import read_evokeds
from mne.datasets import sample
import matplotlib.pyplot as plt

'''
文件存放地址

'''
data_path=r'E:\脑机接口资料\MNE-sample-data'
fname = data_path + '/MEG/sample/sample_audvis-ave.fif'

'''
读取fif文件:
sample_audvis-ave.fif

只读取左听觉的电位数据

'''

condition='Left Auditory'
evoked=read_evokeds(fname,condition=condition,baseline=(None,0),proj=True)

在这里插入图片描述

#2)绘制evoked数据
#将结果显示为蝶形图
#可以通过使用exclude=[],这里不排除不良通道,将不良通道以红色显示

evoked.plot(exclude=[],time_unit='s')
plt.show()

在这里插入图片描述

#将结果以二维图片的形式显示(x:time,y:channels,color:amplitude)

evoked.plot_image(exclude=[],time_unit='s')
plt.show()

在这里插入图片描述
实际过程中,有时需要从头自动创建数据来创建Evoked对象
方式:利用mne.EvokedArray创建Evoked对象,创建时直接构建numpy数组即可,数组的形状必须是(n_epochs,n_chans,n_times)
数据对应的单位:
V:eeg,eog,seeg,emg,ecg,bio,ecog
T:mag
T/m:grad
M:hbo,hbr
Am:dipole
AU:misc

#######  案例1  #########

import mne
import numpy as np
import matplotlib.pyplot as plt

###第一步:创建数据
'''
构建一个大小为10x5x200的三维数组,数组中数据是随机数
第一维数据表示:10epochs
第二维数据表示:5channels
第三维数据表示: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)


###第二步:创建evoked对象
#利用mne.EvokedArray创建Evoked对象


'''
tmin:event开始前的时间,如果未指定,则默认为0

'''

#设置事件开始前时间为-0.1s
tmin=-0.1

#对数据求平均
data_evoked=data.mean(0)

#epochs的数量
nave=data.shape[0]

#给evoked起一个名称
comment='Smiley faces'

'''
利用mne.EvokedArray创建evoked对象

'''

evoked_array=mne.EvokedArray(data_evoked,info,tmin,comment=comment,nave=nave)
print(evoked_array)
_=evoked_array.plot(time_unit='s')

在这里插入图片描述

########## 案例2 ############
import numpy as np
import neo

import 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的数据集

只要是(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)

nave=len(epochs_data)#Number of averaged epochs
evoked_data=np.mean(epochs_data,axis=0)

evokeds=mne.EvokedArray(evoked_data,info=info,tmin=-0.2,comment='Arbitrary',nave=nave)

picks=mne.pick_types(info,meg=True,eeg=False,misc=False)

evokeds.plot(picks=picks,show=True,units={'mag':'-'},
            titles={'mag':'sin and cos averages'},
            time_unit='s')
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值