前面两篇文章一直在写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相关推荐

  1. 脑机接口基础学习19---救救我吧,Evoked数据可视化

    在这一节的学习中,我遇到了非常大的问题 Evoked potential(EP)诱发电位或诱发反应是指出现在诸如闪光或纯音之类的刺激后,从人类或其他动物的神经系统,特别是大脑的特定部分记录的特定模式的 ...

  2. 脑机接口基础学习06---机器学习算法随机森林判断睡眠类型

    案例介绍 本案例对多导睡眠图(Polysomnography,PSG)数据进行睡眠阶段的分类来判断睡眠类型 训练:对Alice的睡眠数据进行训练 测试:利用训练结果对Bob的睡眠数据进行测试,判断其睡 ...

  3. 深度学习技术在脑机接口中的应用

    大家好! Rose给大家分享一下深度学习技术在脑机接口中的应用. 什么是脑机接口? 脑机接口(BCI)是一种系统,可将受试者(人类或动物)的大脑活动模式提取并转换为用于交互式应用程序的消息或命令.脑活 ...

  4. 快速入门脑机接口:BCI基础(二)

    关于脑机接口的分类可以查看<快速入门脑机接口:BCI基础(一)> 组成成分 脑活动 神经系统由两个主要部分组成:中枢神经系统和周围神经系统.大脑是中枢神经系统的主要器官,它包含约1000亿 ...

  5. 伍冬睿教授:脑机接口中迁移学习的完整流程

    大家好,今天Rose分享一篇关于脑机接口中的迁移学习的完整流程.本文由华中科技大学伍冬睿教授授权分享. 关于脑机接口中迁移学习方面的研究,伍教授团队做过大量的工作.之前社区分享过<脑机接口中的流 ...

  6. 脑机接口等在线学习课堂视频分享(供下载)

    由博睿康组织的"Neuracle-在线学习课堂"三场直播已经结束,相关讲座视频介绍与分享如下. 直播课程一 讲师:綦宏志,天津大学精密仪器与光电子工程学院生物医学工程系副教授.綦老 ...

  7. 快速入门脑机接口:BCI基础(一)

    在本模块中,将介绍脑机接口的基础知识. 定义:脑机接口是什么? 脑机接口(BCI)是允许大脑与各种机器之间进行通信的系统. 它们的工作分为三个主要步骤:收集大脑信号,对其进行解释,然后根据接收到的大脑 ...

  8. 深度学习下的脑机接口BCI究竟有多远?

    BCI | ECoG  | 脑机接口 LFP | CMRR | 生物计算 随着生命科学.医药研发.数据分析.数据挖掘.LFP.生物计算.靶点发现.基因测序等技术的快速发展,脑科学逐渐出现在人们的视野中 ...

  9. 研究人员通过小鼠控制光标来研究意图控制,探索更好的脑机接口使用方式

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 通过我们对外部物体的感官体验,可以有效地控制外部物体.为了研究因果关系的学习和影响方式,研究人员设计了一种使用宽场钙信号 ...

最新文章

  1. eclipse中编辑properties文件无法看到中文
  2. 理解Android系统的进程间通信原理------RPC机制
  3. python工程师一个月多少钱-苏州工业园区学编程大概多少钱一个月
  4. 【2015沈阳现场A】
  5. 基于Matlab的标记分水岭分割算法(imreconstruct)
  6. SpringBoot中访问静态资源
  7. 非proguard无法发现jar(已编译)的外部引用错误,(javac + proguard 则会检查)
  8. c语言汇编混编,c语言与汇编混编写法
  9. LeetCode 255. 验证前序遍历序列二叉搜索树(单调栈)*
  10. Andorid AlertDialog 点击后自动消失_不看后悔!2011年别克更换完变速箱电脑后,要如何做设定匹配...
  11. 快速排序算法思路分析和C++源代码(递归和非递归)
  12. AcWing 859. Kruskal算法求最小生成树(稀疏图)
  13. cad插件制作教程_画图必备的CAD超级工具箱插件下载(含gif教程)
  14. php gb2312转big5 函数
  15. python自动发公众号_itchatmp | 基于python微信公众号接口
  16. 洛谷 P3987 我永远喜欢珂朵莉~(Splay+BIT+无限卡常)
  17. MySql解除安全模式
  18. 【干货】9个网络故障排除经典案例,网工都得会
  19. gentoo linux 安装记录
  20. echart 自适应屏幕大小

热门文章

  1. 李子柒,停更3个月!
  2. 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树
  3. Web送货单打印管理系统毕业设计
  4. SOR迭代法c语言报告,SOR迭代_C语言代码
  5. GMP认证|企业需依据产品特性制定卫生标准程序
  6. js 的 onblur 事件
  7. 单片机音乐演奏(STC89C51)
  8. 【51单片机】(三)数码管(原理,静态、动态显示)
  9. 罗德里格斯(Rodrigues)旋转公式及其推导
  10. 多体格林函数的定义以及理解