EEG脑电数据处理及时频分析2(脑电数据处理)
EEG脑电数据处理及时频分析2(脑电数据处理)
zhouEEG脑电数据处理及时频分析2(脑电数据处理)
以下内容可以在哔哩哔哩寻找到教程零基础脑电数据处理教程_01_基础知识预备和预处理
被删除线标记的意味着对于ds004151数据集来说不需要的步骤(也许是不需要吧),或者是我没有进行的步骤。欢迎交流。
脑电数据预处理
打开EEGLAB
接下来的操作都要在EEGLAB这个程序里面进行操作,所以要先打开eeglab
在下方的命令行窗口内输入eeglab,回车就可以启动eeglab了
导入set数据集
打开放数据集的文件夹,选择打开即可
定位电极
在ds004151数据集里的数据已经定位了电极,不用再自己定位电极。如果不嫌麻烦可以检查一下
基础知识
电极标准 10/20 10/05
注意使用的模型MNI还是BESA
如果eeglab没有正确定位电极(电极无数据),无数据电极 ,matlab会在命令窗口提示,可以找到电极文件位置,查看电极文件数据,最后去修改eeglab
基本操作
剔除无用电极 Edit——select data
我找到的资料是讲64个电极的,128电极我不清楚哪个是参考电极,所以我没有经历这个步骤
基础知识
HEOG、VEOG是眼动之类的电极,但现在后期ica可以剔除,所以没用
M1、M2一般是没用的
基本操作
仅仅做个示范
按住Ctrl可以多选电极
后面的操作就需要保存了,建议养成个好习惯,每一步都单独做个文件夹去保存,比如像这样,每一步处理完成之后的文件就保存在对应的文件夹下面
滤波
我们研究的四个脑波频率在1-30Hz,所以我们做1-30Hz的带通滤波就可以了,至于工频干扰,额,了解一下带通滤波就发现做了好像意义不大,只做带通滤波就行了
基础知识
滤波分为高通滤波,低通滤波,带通滤波和凹陷滤波。
高通滤波是指,高于某个频率的信号可以通过,而低于这个频率的信号会被衰减过滤掉。
低通滤波则相反,指的是低于某个频率的信号可以通过,而高于这个频率的信号则相反。所以,在输入数值的时候,高通滤波要输入的是一个较小的数字,而低通滤波则是输入一个较大的数字。这可能跟我们的第一反应有点相悖。因此,也可以用它们的英文叫法来辨别,高通high-pass,低通low-pass,英文看起来就更为直观了。
带通滤波,指的是在某个频率段范围内的信号可以通过,而这个频率段范围以外的信号会被衰减过滤掉,就相当于同时做了高通滤波和低通滤波。
凹陷滤波,指的是在某个频率范围内的信号会被衰减过滤掉,而这个频率范围以外的信号会被保留下来。这个操作通常是用来去除50Hz市电的干扰。我国的50Hz,因此在收集到的信号中,会有一个非常强烈的50Hz频段的信号存在,这就可以用凹陷滤波来去掉。
参数选择
基本操作
带通滤波会过滤掉除开指定范围的所有值,而且我们只考虑脑电数据,脑电数据四个波在1-30Hz范围内,如果我们做1-30Hz的带通滤波就不用考虑工频干扰,低通,高通之类的滤波了,第三步那个是画个图,没什么用,勾不勾选都无所谓
保存文件
为这一步新建一个文件夹,点开这个文件夹
输入文件名,保存
降采样
这部分操作还是可以做的,我降到了250,就是为了,处理数据能处理快点
基础知识
采样率:单位时间内采样点的个数
frames per epoch 每段采样点
EEG.times可以查看采样点和时刻点
为什么要降采样
Nyquist采样定理,采样率必须两倍以上,最好是3-4倍才不会有信息损失
脑电波一般在40hz以下,所以脑电信号采样率一般在250-1000hz就足够了
降采样最大的好处就是减少数据量,提高计算速度
基本操作
修改成250,新建文件夹保存
分段和基线矫正
这个是肯定要做的,ds004151数据集按照‘Ton+’和‘Ton-’进行分段,分段之后根据论文是252+108=360的epochs,可以在EEGLAB的主界面看到epochs的数量,然后的基线矫正,在完成分段之后就会自动跳出来对话框让你做了
基础知识
epoch:-1到2 (预留多一点,方便后面处理),包含一点静息态还有任务态
然后将epoch拼接起来
基本操作
按住Ctrl选中这两个,这里分段依据的mark主要是根据论文里面的实验设计,如果没有明确的信号说明,就先猜测,然后分段出来,看看数量是否匹配,比如下方
论文说一共有252+108=360个marks
我按照Ton+和Ton-进行分段之后再EEFLAB主界面。Epochs一共360个,刚好符合
我们继续上面选择完mark之后的操作,新建文件夹正常保存
保存之后会自动跳出来基线矫正的对话框,我们不用特别设置,直接确认就可以,但是不用新建文件夹保存了,直接点下面的overwrite…覆盖
插值坏导和剔除坏段
呃呃呃,看情况做吧,一般插值坏导不要超过十个,删除坏段也不要超过1/3,实在不行,数据太烂了,就先不管了,先把组平均地形图跑出来看看结果,结果没问题,就先不管了
基础知识
坏导:某一通道出现了问题
解决办法:插值,不能删除电极,会发生不匹配。把周围电极的值取一个平均
Spherical算法:容积传导效应,周围电极有权重,然后再计算
坏段:某一段出现了问题,直接删除
基本操作
注意不要点错了,下面的用ICA reject也有个extreme values
把框出来的改了,这个100是100uV的意思,如果有脑电信号超过了±100uV,那就肯定不是脑电信号了,脑电数值没这么大
会跳出来两个框框,有个是文件保存框,建议新建文件夹保存一下文件,如果已经保存了,可以点cancel取消保存
还有一个框是这样的,有绿色标记的和没有被绿色标记的,没有被标记是正常数据,如果这个时候直接点右下角reject会把所有的绿色给去除掉,当然也可以自己标记,点击一下片段会变黄,也算是标记,再点一下就是取消。但,我们这步重点不是reject,重点是查看有哪些坏道,那我们怎么看坏道呢?
这个界面有bug其实,他在绿色标记段,本来应该用红色标记出哪个电极有问题的,但是他没有。不过我们可以在片段上右键,会跳出来一个地形图,把地形图关掉,再移动片段,异常的电极就会被红色标记出来
异常就被标记出来了
但这个时候还有个问题,就是电极实在是太多了,左边一列密密麻麻,根本看不清楚,我们要怎么调节呢?我们有两个办法,第一个调节显示的电极数目,第二个放大缩小,推荐第二个
第一个办法,调节显示的点击数
第二个办法有点bug。在我们做完这个操作之后,电脑没有什么反应,这个时候我们需要像显示红色的异常数据那样,在片段上鼠标右键一下,等一下,鼠标就会变成一个十字,这个时候就已经可以通过鼠标滚轮放大缩小了,但是我们会发现,异常红线没了,我们需要再进行一次右键,这次不会出现地形图,只会出来个右键菜单,然后再移动片段,红线就能正常展示了。
一些其他方便的操作
了解、统计完有哪些电极不正常之后,我们需要对这些电极进行插值,左下角取消掉上面那个图,千万别reject了,删得有点多,我们后面再删。
最后新建文件夹保存数据
对电极进行插值之后,数据会变得好看一些
重参考
这个还是要做的,ds004151数据集有128个电极,直接做全脑平均就OK了
基础知识
原参考:脑电数据采集的数据,就是电极位置和参考电极之间的电位差
重参考:在分析数据的时候,有些时候需要转换参考电极的位置,因为离参考电极近的电极的电位差会非常小
常用的参考方式:双侧乳突平均参考(32个以下),全脑平均参考(电极32个以上)
基本操作
我们做全脑平均,直接Ok
然后正常新建文件夹保存数据
独立成分分析ICA
这个操作也很简单,但算是自动化操作里面最费时间的了,57个被试我整整跑了十个小时
在进行ICA之前,EEGLAB的主界面长这样,除了ICA weights那一项,其它都有正常数据了
基础知识
ICA又称盲源分离算法,ICA可以找到不同脑电信号源活动以及它们的头皮分布。这一步骤的主要目的是去除眼电、心电、肌电等伪迹
ICA原理
每一个麦克风记录到的都是一个混合的声音,来自于不同声源的不同强度的声音的总和,有的记录到的乐队演奏的声音比较大,有的记录到的人们的交流声音比较大,通过对比不同麦克风记录到的成分,分离出来彼此独立的成分。而且分离出成份数一定小于等于麦克风数
基本操作
如果我们在插值那一步调整了电极,调整了几个电极,就在后面添加‘pca’,几个,例如我调整了两个,就如下输入。(其实不管这个直接点OK,他好像也会自动识别你调整了几个电极,然后跳出来对话框,告诉你,你不懂就点ok就行,我不太明白,拿不准就直接全部点ok,就什么也别管)这一步是在告诉ICA程序有多少个有效数据
完成之后就会出现这个框,千万别点interrupt,等他跑完了,就自动没了
跑完了之后不会主动跳保存框,一定要记住自己新建文件夹保存
剔除伪迹/坏段
使用ICALAB插件就OK了,但ICA分析出来的成分不要去除太多了,去除太多,有效成分就被去除了,一般去除默认的眼电和肌电就可以了
基础知识
常见伪迹
眨眼VEOG
前端分布、小方块、随机分布、低频能量高、成分排序靠前
眼漂HEOG
前端两侧分布,红蓝相对、长条状,红蓝相间、随机分布、低频能量高、成分排序靠前,但一般排在眨眼后面
头动
- 周围分布、长条状、随机分布、在单个trial里有,非常明显的漂移
工频干扰
- 分布在地线周围、单个trial的分布非常有规律、50hz明显
心电
- 呈雨点般散落状
ICLabel项目 准确的EEG-IC分类器,用大数据研究
基础操作
因为跑完了ICA,我们直接用ICALAB就可以自动去伪迹了,不用手动去挑,一路确认就OK。做完这个会出来一堆图,全部关掉就OK
然后我们标记出来,一路ok就行
在MATLAB的命令窗口我们还能看到具体标记情况
然后自动移除标记片段
绝对阈值法去坏段
跟插值坏导同理,数据太烂就先不管了,看看结果先,这个步骤需要很多经验,拿不准就多问
基本操作
可以先在MATLAB命令行窗口看看有多少trails被标记了,再决定reject与否
结束
数据处理真的需要专业人士给予建议,而且细节非常多,网络上的教程又不够详尽,很多想知道的不一定搜得到,就算搜到了可能讲的是原理,对于与小白也很抽象。
最最抽象的是,原始数据可能会很烂。烂到不忍直视,以上预处理步骤都不太理想,这个时候就更需要专业人士进行指导了,这是坑最多的一个部分了