如果宝宝的脑电数据是由一家德国公司BrainVision发行的软件BrainVision Recorder采集的,那么一份完整的脑电数据将由以下三个部分构成:
.vhdr, .vmrk, .eeg
缺一不可哦~
同时确保电脑上正确安装了matlab和工具箱eeglab.
接下来我们正式开始进行数据预处理吧!
1. 数据导入
打开matlab,在命令窗口中输入eeglab,回车,此时就可以打开工具箱eeglab了,页面如下:
图1 未导入数据的eeglab页面
对于一个没有经过任何处理的原始数据(看一看上文提到的三种格式是否齐全),数据导入如下(见图2):
File- Import data- Using EEGLAB functions and plugins- From Brain Vis. Rec..vhdr or .ahdr file- 选择需要导入的数据
图2 数据导入示意图
我们会发现,数据导入的这一步事实上识别的是.vhdr格式数据,.vhdr格式的数据是脑电数据的“元数据(meta data)”,用于描述数据的属性。好奇的宝宝可以通过记事本打开看看,里面详细记录了数据的通道数目、各个通道的标签(也就是这个通道叫啥,用于后续的电极定位)、采样率、采样时间间隔等等。
一个小tip:数据采集完毕后保存数据,结果发现数据名称写错了怎么办?直接将三个数据名称改了可以吗,不可以。正确的做法是用记事本打开.vhdr格式数据,在里面将我圈起来的两个地方改掉并保存(见图3),然后再将三个格式的数据改成正确的名称哦~
图3 .vhdr格式数据内容
数据导入后,会出现两个弹窗(图4),第一个问你导入什么时间间隔的数据以及哪些通道的数据,如果默认全部导入,直接点击OK;第二个问你这个数据要不要给它取个名字,但这个名字仅在eeglab的页面呈现,和宝宝最终保存数据的名称无关,因此可填可不填,不取名就空着,直接点OK。
图4
数据导入成功后,页面会出现很多信息,下面我将用一个不要了的脑电数据(见图5)为大家讲解一番
图5 导入数据后的eeglab界面
#1 :表示步骤1。eeglab很棒的一点就是会保存宝宝们的每一步操作。如果想回到上一步,点击Datasets即可选择。每进行一步之前都会有弹窗让我们命名,因此宝宝们如果很有耐心,可以为每一个步骤命名,以便于确定数据预处理到了什么阶段。
Channels per frame:每个采样点的通道数
Frames per epoch:每段脑电数据有多少个采样点
Epochs:专属名词,可以理解为“段”。由于脑电数据是连续采集的,因此在未分段之前的epoch是1
Events:专属名词,可以理解为“事件”,即事件相关电位中的“事件”,也就是刺激。事件的数量是根据Marker数目而定的。
Sampling rate(Hz):采样率。如图5,本数据的采样率为500 Hz,即1 s内采集500次,也就是说每2 ms对脑电数据进行一次采集。采样率越大数据越精确,想象一段猪肉被菜刀剁的次数越多,肉质越细腻。
Reference:这里的参考一般设置的不是采集脑电数据中的参考电极,而是数据离线分析中的重参考电极,至于为什么设置重参考,可以看后面啦~
剩下的后面再解释~
2. 电极定位
Edit- Channel locations- OK- OK(见图6)
请注意前面数据导入的时候,我们说可以导入脑电数据的一些信息,比如有哪些通道,它们叫什么,电压是多少,然而我们只知道某通道有某数据,却不知道这个通道具体在脑袋上的什么位置,这岂不是抓瞎。电极定位的目的就是“对账”,根据eeglab中符合国际标准导联放置的方法将标签相同的通道对应起来,因此通过电极定位我们便可以知道叫这个标签的通道在脑袋上的具体位置!
当成功定位后,Channel locations后面会变成Yes哦~
图6 电极定位
3. 去除无用电极
Edit- select data- Channel range- remove these- 摁住control键一一选择我们需要删除的通道- OK(见图7)
为什么辛辛苦苦采集的数据,有些通道不要了呢。那是因为有些通道采集的是眼电,例如垂直眼电(VEOG)和水平眼电(HEOG),这些电压值都是无用的。根据脑电帽的不同,无用电极也是不同的,因此不一一展示我删除了哪些无用电极了。
图7 去除无用电极
4. 滤波 (包括高通滤波、低通滤波和凹陷滤波)
Tools- Filter the data- Basic FIR filter (new, default)- 输入参数,先进行高通滤波和低通滤波(见图8),完毕后勾选“Notch filter the data instead of pass band”,输入参数进行凹陷滤波(见图9)
图8 高通滤波和低通滤波
输入参数之前我们需要明白这几个参数是什么意思
Lower edge of the frequency pass band (Hz): 高通滤波。即设置一个允许通过的脑电波频率的下限值,只有频率高于这个值的脑电信号才允许保留。如果频率太低,大部分会被过滤掉哦。请理解它的意思,因为中英文看起来相反,可能会记错。
Higher edge of the frequency pass band (Hz): 低通滤波。同理,设置一个允许通过的脑电波频率的上限值。低于这个值的信号大部分会被过滤掉。
PS: 这里我使用的工具箱的版本允许同时输入高通滤波和低通滤波的参数,但有些旧版本不能同时进行,如果拿不准的话,我还是建议一步步来。
Notch filter the data instead of pass band: 凹陷滤波 (如图9)。为了减少50Hz的工频干扰,我们会设置一个范围,处于这个范围内的信号会被衰减过滤掉。我们国家使用的是50Hz的交流电,电力系统引起的50Hz的正弦波将会对我们的脑电信号的测量产生干扰,因此我们需要尽量对其衰减过滤。一般参数有48~52,49~51。
图9 凹陷滤波
5. 插值坏导并去除坏段
插值坏导的意思是如果有损坏的导联,我们可以运用一些算法利用正常的导联的数据来修复损坏的导联数据。运用的算法基本分为两种,第一种比较“傻瓜”,就是取坏导周围导联的算数平均数进行代替,好处是可以通过代码完成,坏处是不太准确,因此一般不太推荐这个方法;第二种是eeglab内置的算法,叫做球面线性插值法(Spehrical算法)。简单来说,我们的脑袋是一个近似球体,根据容积传导效应,一个“源”并非一对一传导到某个导联,而是传导到头皮的不同位置,且各个导联的值是不同的,而球面线性插值法根据远近权重的不同进行插值,算出我们所需的点的数据。
实际在eeglab的操作中,插值坏导有两种方法:1) 肉眼观察; 2) 自动识别
1) 肉眼观察是我比较推荐的。Plot- Channel data (scroll),打开脑电图看看并判断坏导
肉眼观察哪个通道出现问题,是否头到尾有很大程度的波动,由此可以判断该通道是损坏的,这种完全损坏的通道是我们需要插值的。另外,有宝宝可能发现数据有这种情况:好像大部分时间导联都很稳定,只是偶尔出现一些波动,这需要将整个通道都插值吗?这个时候肉眼观察判断的优势就体现出来了。事实上插值坏导的算法再怎么精确,也会有一定程度的失真,为了保证数据的精确,我们还是尽可能的保留通道,如果偶尔出现波动,可以在去除坏段的时候针对性地将有起伏的地方删掉。
去除坏段方法见图10。去除坏段的方法很简单,Tools- Channel data (scroll)- 鼠标拖动需要去除的坏段- 点击REJECT
图10 去除坏段
若没有坏导,可以跳到步骤6;若有坏导,如图11,Tools- interpolate channels- Select from data channels- 选择需要插值的坏导,点击OK即可
图11 插值坏导
2) 自动识别。一般不推荐完全依靠自动识别,因为自动识别过于机械,有时候把尚可以保留的坏导都标记了。但这里还是分享一下方法,因为自动识别可以帮忙判断。
Tools- automatic channel rejection- OK, 接着大家可以在matlab的命令行窗口看到自动识别的结果(图12)
图12 自动识别坏导的结果
这里帮我自动识别了5个坏导。宝宝们可以根据自动识别的结果再进行插值坏导(方法见图11)。
6. 重参考
Tools- re-refernce the data- 勾选Re-reference data to channel(s)- 选择设定为重参考的电极(见图13)
图13 重参考
我这里使用的是A1A2左右乳突重参考,圈起来的还有一个叫做Compute average reference (全脑平均),根据宝宝们的需求进行选择吧。重参考完毕后,eeglab界面的Reference 后面的unknown会变成重参考的电极(或全脑平均)~
7. ICA
Tools- Decompose data by ICA
请注意在英文模式下输入参数 ,'pca',50 (见图14)
这指的是将全部信号分为50份,这样在去除眼电的时候我们会得到50个图像;不输入参数直接点击OK也可以,即为默认有多少通道便将信号分为多少份,这里建议统一输入50。数据越大,运行ICA的时间越久,在此期间可以站起来活动活动啦~
图14 ICA参数
8. 去眼电、肌电等伪迹
Tools- Reject data using ICA- Reject components by map- 在Components to plot中输入想看的成分的数目的范围,如果想看前20个,则输入1:20- 点击成分的序号并判断是否为伪迹成分,若是,点击ACCEPT变为REJECT即可进行标记(见图15)
图15 标记伪迹成分
标记需要拒绝的成分后,我们就要remove它们了
Tools- remove components from data- 点击Yes,之后我们会看到一个确认弹窗,即5和6。点击5我们将可以看到去除伪迹后的脑电图并判断是否将伪迹去除干净,如果效果不理想,可以回到上一步重新选择标记- 如果效果理想,点击6 Accept即可
图16 移除伪迹成分
肉眼观察伪迹的方法讲完了,下面我又要分享自动识别的方法了
Tools- Classsify component using ICLabel- OK- 同样更改一下要查看的成分的范围-结果如图17
图17 自动识别伪迹成分
同样的,这也是一个辅助手段,并不是很推荐完全依靠自动识别,还是靠肉眼观察比较保险
可能同学们会疑惑,为什么一定要修改查看范围呢,就不能全都看一看嘛?可以的,不过eeglab会将伪迹成分占比更多的信号放在前面,因此我们一般看一看前20个就足够了~
9. 分段及基线校正
ERPs是锁时和锁相的,因此分段的依据有2个,Markers和Time
Tools- Extract epochs- 见图18,点击...选择你需要锁相的标记,我这里选择的是S 1和S100- 更改分段的时间窗,这里我更改为-0.2 1,意为刺激的前200 ms和后1000 ms- 接着自动弹出弹窗,图19,即为基线校正,默认按照刺激前200 ms的脑电作为基线,当然这也是可以更改的~
图18 分段
图19 基线校正
10. 去除极端值
Tools- Reject data using ICA- Reject extreme values- 更改参数,我这里将极端值更改为±100μV,这里大家可以按照需求自行设置哦~
图20 去除极端值
11. 叠加平均,获得ERP波形图
Plot- Channel ERP imag- 如图21,我们需要根据自己的需要选择三个地方:Channel, Epoch-sorting filed和Event types
图21
12. 保存数据
File- save current datasets as- 选择文件夹并进行对数据命名
注意已经处理过的数据的格式只有一个,那就是.set
一个小tip: 每进行一步预处理,都可以保存在对应的文件夹当中,这样假如哪一步出了问题,或者想重新处理数据,就不同重头再来,大大节省时间呀!博主的方式是这样的(如图22),我感觉在处理数据的过程中有条理了很多,可以供大家参考~
图22
到这里预处理就全部完成啦,加油吧!