1 软件基础:emotiv launcher、emotiv pro、matlab2020a、eeglab14_1_2b和eprime(本人通过eprime和emotiv_pro之间的串口通讯发送的event标签),eeglab插件的安装这里不再复述,可参考其他博主的安装教程。

2 在一次实验完成后,我们可通过emotiv_pro软件将原始脑电数据以EDF或CSV的格式导出到指定文件夹,具体操作如下:



这里为了对数据格式进行分析我同时也导出了CSV格式的文件,观察emotiv采集的数据究竟长什么样

3 接下来要完成数据向EEGLAB的导入,也是最重要的一步。
首先需要在EEGLAB中插入专门用于导入EDF文件的Biosig插件(很多博主给出了下载链接,这里不再提供下载途径),随后将下载好的Biosig插件保存至EEGLAB的plugins文件夹中,例如我的路径如下(D:\matlab2020a\toolbox\eeglab14_1_2b\plugins)。
在安装完Biosig后打开EEGLAB,按顺序点开File→Import data→Using the BIOSIG Interface,选择我们之前保存的EDF文件,随后出现如下页面:

点击Ok即可,并进行命名

**问题出现了!!!**为啥导入后数据格式如此混乱呢?主要出现以下三个问题

问题1:明明是32导联的数据,这里咋成了115个通道?
问题2:明明打了很多mark(这里博主我打了1,2,3,4四个数字mark,每个10次,共40个mark),为什么这里只显示1个events?
问题3:导联(通道)的坐标信息去哪了呢?

不要慌,这是因为EEGLAB直接将EDF中所有的数据(包括各通道数据、时间戳、mark等)全都一股脑地放入了自身结构体中的data变量中,那么我们就需要打开EEG.data这个属性变量看看里面究竟长什么样,并且根据需求对数据格式进行调整。



有经验的朋友一眼可以看出1-6很明显不是脑电信号数据,而从7-38的32维数据才是各个通道的脑电信号。至此,问题1得到解释:EEGLAB是将EDF中所有的文件都一股脑的导入到了本应该只保存脑电信号数据的EEG.data变量中,因此导致出现"115"维度的脑电数据,而不是32维.

但是!!!, 不要着急把其他维度的数据删除,因为剩下的数据中还有我们最重要的标签数据!!!

标签数据在哪里呢?这里我们就需要借助CSV格式文件的数据, 寻找我们的mark.

从csv文件中可以看出, 我之前打入的mark(int类型的1,2,3,4, 这里以mark=1为例)位于这一行86的后面隔两行的位置, 86这一行代表什么是数据我也不知道, 把它当作参考就好.

接着返回我们matlab的EEG.data中, 发现标签就是在"86"这一行下面隔了两行的位置!!!
细心的读者可注意到之前CSV中, 标签"1"出现在4220行,而在matlab中出现在4018行,这是因为matlab中的数据没有title列, 所以比csv数据少了两行, 因此两边的数据是完全对应上的.

到此, 第二个问题得到解释, 原来我的mark都导入到了EEG.data中, 而不是应有的EEG.event中.

Ok,那么现在我们就要开始编写一段脚本来把之前混乱的数据"分门别类"了, 具体的脚本思路不再阐述,其实就是从原始数据中把各个模块的数据赋予对应的变量即可(如,把7-38行的32通道数据赋值给EEG.data, 把46行的非0mark值以及对应的index赋予到EEG.event这个结构体中).

这里直接上代码, 读者在将EDF导入EEGLAB后,直接运行这段代码即可完成数据格式的调整.

%截取7-38行的32导数据
Emotiv_data = EEG.data(7:38,:); %截取46行的mark数据
event_line = round(EEG.data(46,:));%获取非0的mark标签、在数据中的位置以及对应的序列号
event_type = [];
event_latency = [];
event_ur = [];
n = 0;
for i = 1:length(event_line)if event_line(i) ~= 0event_type = [event_type;event_line(i)];event_latency = [event_latency;i];n = n + 1;event_ur = [event_ur;n];end
end%对EEG。event和EEG.urevent这两个有关mark的结构体进行赋值
for j = 1:length(event_type)EEG.event(j).type = event_type(j);EEG.event(j).latency = event_latency(j);EEG.event(j).urevent = event_ur(j);EEG.urevent(j).type = event_type(j);EEG.urevent(j).latency = event_latency(j);
enddata_length = size(Emotiv_data,2);%将脑电信号数据赋予EEG.data数组EEG.data = single(Emotiv_data);%调整一些其他必要的变量
EEG.nbchan = 32;EEG.pnts = data_length;EEG.srate = 128;

运行完后得到EEGLAB中新的EEG结构体如下:

这里我们可以看到, data变成了32维的信号数据, 而且我的40个mark也出现在了正确的变量中(event和urevent)

那么就剩下最后一个难题, 导联坐标!!!

熟悉EEGLAB的朋友们都知道,EEGLAB为用户提供了自定义坐标文件的导入通道, Edit→Channel Location, 随后选择对应的.locs文件即可. 然而不幸的是EEGLAB并未提供一套Emotiv32导联定制化的通道文件, 所以需要自己整理出emotiv32导联的位置信息, 构建新的.ced文件.

万幸的是Emotiv32导脑电帽和EEGLAB中给出的部分ced文件均遵循10-20规范, 而且给出的81导联中涵盖了所有的emotiv32导通道. ced文件可直接用文本打开, 如下图所示:

我们只需按照CSV文件中给出的通道的名称进行筛选即可, 把32个导联数据保存下来,其余的删去. (采用14, 64导的用户同样可按自己的需求保存对应导联的坐标信息以创建新的坐标文件)

注意!!! 导联位置.ced文件中的第一行"Number"一定要和实际采集到的通道排序相同, 这里需要结合CSV文件进行修改, 不然在EEGLAB中数据对应的通道是错误的.

Ok, 完成通道的筛选后,我们保存ced文件即可,并且命名为32导"Standard-10-20-Cap32.ced",方便调用.
这里附上博主自己创建好的Emotiv32导联位置文件, 望给好评, 谢谢!
链接:https://pan.baidu.com/s/1VWV1vktiLHGRAn0dwD6xAg
提取码:dvn3

最后在EEGLAB中利用Edit→Channel Location调用我们保存的32导联位置文件, 操作如下:





至此, 已完成所有操作, 我们发现通道变成了32导, 事件标签(Mark)也全部导入, 通道坐标信息也得到完善. 因此可以开始采用EEGLAB对数据进行进一步处理了. 为了方便重复操作, 这里可以将导入好的数据保存为EEGLAB官方提供的.set格式,下次直接调用即可, 无需再重复上面复杂的操作.

Ok!!! 这里做一个总结, 在完成上述工作后, 导入新的Emotiv EDF格式数据只需要下述五步:
1 从Emotiv Pro中导出EDF格式的数据文件
2 启动EEGLAB, 并采用BIOSIG插件导入EDF文件
3 运行数据赋值处理脚本
4 导入Emotiv32导联位置文件 (也可以是其他类型的导联)
5 进行进一步的EEGLAB处理与数据保存

到此, 对如何将Emotiv的数据导入EEGLAB中的介绍就结束了, 如有异议或问题欢迎在评论区指出.
全文为博主独创, 如转载或公开代码等文件需进行引用声明, 私自转载者必究其责任.
最后制作不易, 如果觉得还可以的话望各位同行施舍好评.
谢谢!!!

Emotiv EPOCFLEX 32导脑电仪数据准确导入EEGLAB相关推荐

  1. mysql导vertica_vertica系列:数据的导入导出

    本文仅涉及 Vertica 导入导出本地文件, 以及两个 Vertica 集群相互导出, 不涉及 Vertica 和 hdfs/Hive 导入导出和互操作. copy 数据导入工具 copy 命令无疑 ...

  2. EMOTIV Epoc X 无线便携式脑电仪

    Emotiv Epoc X无线便携脑电系统是美国加州旧金山的神经科技公司开发的一个全新的人机界面控制系统-Emotiv Epoc X头戴设备.这款设备利用一部能够测量脑电活动的.类似于脑电图的装置,来 ...

  3. 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据

    文章来源| 脑机接口社区群友 认知计算_茂森的授权分享 在此非常感谢 认知计算_茂森! 本篇文章主要通过思维导图来介绍利用LSTM(长短期记忆网络)来处理脑电数据. 文章的内容来源于社区分享的文章&l ...

  4. 脑电数据相关分析参数 定义 后续实现陆续增加

    目录 1 第一章 常规脑电相关素材积累 3 1实时分析 3 1.1癫痫发作报警 3 1.2脑电双频指数(BIS)值 3 1.3大脑状态指数(CSI) 3 2非实时分析 3 2.1脑电图频域分析fft变 ...

  5. Python协方差矩阵处理脑电数据

    在本教程中,我们将介绍传感器协方差计算的基础知识,并构建一个噪声协方差矩阵,该矩阵可用于计算最小范数逆解. 诸如MNE的源估计方法需要从记录中进行噪声估计. 在本教程中,我们介绍了噪声协方差的基础知识 ...

  6. eeglab脑电数据预处理:step by step

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 学脑电的小伙伴对 matlab 软件和 eeglab 插件一定不会陌生,它们是脑电数据分析过程中的重要法宝.在对脑电数据进行分析处理之前需 ...

  7. 脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据

    今天主要介绍一下MNE中如何用协方差矩阵来处理脑电数据的. MNE中的许多方法,包括源估计和一些分类算法,都需要根据记录进行协方差估计. 在本教程中,我们将介绍传感器协方差计算的基础知识,并构建一个噪 ...

  8. Python脑电数据的Epoching处理

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 import os.path as op import numpy as np import mne import ma ...

  9. 使用时空-频率模式分析从脑电数据的一些试验中提取N400成分

    今天介绍的内容是清华大学高小榕教授团队的研究成果,从脑电数据中提取N400成分. 关于高小榕教授的介绍,可以查看本社区之前分享的<第1期 | 国内脑机接口领域专家教授汇总> 高小榕教授 单 ...

最新文章

  1. Nginx reload的时候出现的问题/usr/local/nginx/logs/nginx.pid
  2. CentOS7_装机软件推荐
  3. draw.io基础使用
  4. windows下mysql安装配置启动
  5. 近期知识图谱顶会论文推荐,另附超详笔记解读
  6. layui 日期重置_日期时间插件--日期时间组件文档 - layui.laydate
  7. angular js实现开关效果
  8. ms sql 触发器( 转)
  9. HUE集成Hbase
  10. 网盘用户分享独播剧链接 百度未及时封禁一审被判赔偿百万余元
  11. 别忘记了修正反欺诈中的这些内容
  12. 遥感大辞典_学习遥感必读的十本专业书
  13. 免费的ERP软件哪一款好用?这3款让综合管理更高效
  14. 安全系统工程徐志胜电子版_安全系统工程-第3版
  15. 20190321——Python模块
  16. python在电力系统中的应用_SKIDL: 在PYTHON中描述你的电路
  17. eclipse中JSP文件编写乱码问题及解决方案
  18. 【求助】BEXCEL文件如何编辑?
  19. MIUI系统获取短信权限问题
  20. VS2019_Windows桌面应用程序_01

热门文章

  1. 组态王与三菱PLC编程软件GXWorks2通过OPC数据库进行动态仿真
  2. ubuntu16.04下安装录屏软件OBS studio
  3. ctf misc 学习总结大合集
  4. Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
  5. 30 张图,概览 CPU 制作全过程
  6. 初探深度优化搜索--小白版
  7. lazada各国家站点讲解
  8. Unable to set custom 'dev_loss_tmo' value in RHEL7
  9. 微信小程序报错“getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.js...“
  10. 【STM32-HAL库】一步步搭建出FOC矢量控制(附C代码)