2025年Emotiv EPOCFLEX 32导脑电仪数据准确导入EEGLAB

Emotiv EPOCFLEX 32导脑电仪数据准确导入EEGLAB1 软件基础 emotiv launcher emotiv pro matlab2020a eeglab14 1 2b 和 eprime 本人通过 eprime 和 emotiv pro 之间的串口通讯发送的 event 标签 eeglab 插件的安装这里不再复述 可参考其他博主的安装教程 2 在一次实验完成后

大家好,我是讯享网,很高兴认识大家。

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

2 在一次实验完成后,我们可通过emotiv_pro软件将原始脑电数据以EDF或CSV的格式导出到指定文件夹,具体操作如下:
选中所需数据文件,单击Export
讯享网
这里选择导出EDF格式的文件到指定文件夹,接着单击Export即可
在指定文件夹里可以看到导出了四个文件,数据从Emotiv导出完成
这里为了对数据格式进行分析我同时也导出了CSV格式的文件,观察emotiv采集的数据究竟长什么样
导出的CSV文件
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文件,随后出现如下页面:
导入EDF后出现该界面
点击Ok即可,并进行命名
命名数据文件,这里默认不修改,直接点击OK
问题出现了!!!为啥导入后数据格式如此混乱呢?主要出现以下三个问题
出现问题了
问题1:明明是32导联的数据,这里咋成了115个通道?
问题2:明明打了很多mark(这里博主我打了1,2,3,4四个数字mark,每个10次,共40个mark),为什么这里只显示1个events?
问题3:导联(通道)的坐标信息去哪了呢?

不要慌,这是因为EEGLAB直接将EDF中所有的数据(包括各通道数据、时间戳、mark等)全都一股脑地放入了自身结构体中的data变量中,那么我们就需要打开EEG.data这个属性变量看看里面究竟长什么样,并且根据需求对数据格式进行调整。
在这里插入图片描述
导入后的EEG.data
在这里插入图片描述
有经验的朋友一眼可以看出1-6很明显不是脑电信号数据,而从7-38的32维数据才是各个通道的脑电信号。至此,问题1得到解释:EEGLAB是将EDF中所有的文件都一股脑的导入到了本应该只保存脑电信号数据的EEG.data变量中,因此导致出现"115"维度的脑电数据,而不是32维.

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

标签数据在哪里呢?这里我们就需要借助CSV格式文件的数据, 寻找我们的mark.
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数据少了两行, 因此两边的数据是完全对应上的.
EEG.data中的mark
到此, 第二个问题得到解释, 原来我的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) ~= 0 event_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); end data_length = size(Emotiv_data,2); %将脑电信号数据赋予EEG.data数组 EEG.data = single(Emotiv_data); %调整一些其他必要的变量 EEG.nbchan = 32; EEG.pnts = data_length; EEG.srate = 128; 

讯享网

运行完后得到EEGLAB中新的EEG结构体如下:
运行完脚本后的EEG结构体
这里我们可以看到, data变成了32维的信号数据, 而且我的40个mark也出现在了正确的变量中(event和urevent)

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

熟悉EEGLAB的朋友们都知道,EEGLAB为用户提供了自定义坐标文件的导入通道, Edit→Channel Location, 随后选择对应的.locs文件即可. 然而不幸的是EEGLAB并未提供一套Emotiv32导联定制化的通道文件, 所以需要自己整理出emotiv32导联的位置信息, 构建新的.ced文件.
EEGLAB中给出的导联位置文件,注意倒数第三行的32导文件是博主自建的,原始EEGLAB中是没有的
万幸的是Emotiv32导脑电帽和EEGLAB中给出的部分ced文件均遵循10-20规范, 而且给出的81导联中涵盖了所有的emotiv32导通道. ced文件可直接用文本打开, 如下图所示:
10-20标准的81导联位置信息文件
我们只需按照CSV文件中给出的通道的名称进行筛选即可, 把32个导联数据保存下来,其余的删去. (采用14, 64导的用户同样可按自己的需求保存对应导联的坐标信息以创建新的坐标文件)

注意!!! 导联位置.ced文件中的第一行"Number"一定要和实际采集到的通道排序相同, 这里需要结合CSV文件进行修改, 不然在EEGLAB中数据对应的通道是错误的.
注意实际采集到的EEG中各导联的位次
Ok, 完成通道的筛选后,我们保存ced文件即可,并且命名为32导"Standard-10-20-Cap32.ced",方便调用.
这里附上博主自己创建好的Emotiv32导联位置文件, 望给好评, 谢谢!
链接:https://pan.baidu.com/s/1VWV1vktiLHGRAn0dwD6xAg
提取码:dvn3

最后在EEGLAB中利用Edit→Channel Location调用我们保存的32导联位置文件, 操作如下:
这里不用管,直接Cancel
单击Read locations
选择32导位置文件,打开
默认autodetect就行,点击OK
数据导入完成!
至此, 已完成所有操作, 我们发现通道变成了32导, 事件标签(Mark)也全部导入, 通道坐标信息也得到完善. 因此可以开始采用EEGLAB对数据进行进一步处理了. 为了方便重复操作, 这里可以将导入好的数据保存为EEGLAB官方提供的.set格式,下次直接调用即可, 无需再重复上面复杂的操作.

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

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

小讯
上一篇 2025-03-11 18:03
下一篇 2025-02-15 09:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14194.html