查看原文
其他

Letswave 教程:脑电数据预处理与叠加平均

喵君姐姐 行上行下 2022-04-26

Hello,
这里是行上行下,我是喵君姐姐~


之前写过eeglab数据处理,得到了大家的一致好评。拖了很久的时频更新,马上就要和大家见面了。

 


考虑到有的小伙伴没有编辑基础,所以我们先介绍一个界面的软件——letswave7。它和eeglab类似,只是它全部的处理都是界面化的,对于小白来说,十分友好。
 
今天就以oddball实验为例,简单介绍一下使用letswave7进行脑电数据预处理与叠加平均。然后第二期,再讲时频处理的原理和具体操作哟~


实验介绍采用视觉Odd-ball实验。在屏幕上,黑色为偏差刺激(标记为“ S 9”),白色为标准刺激(标记为“ S 10”)。每个矩形块持续80毫秒,ISI持续200毫秒。两分钟内总共安排了600次刺激试验,其中偏差刺激的可能性为5%。要求参与者计算黑色矩形块的数量,并在试次结束后报告,以使参与者在屏幕上保持注意力。


图 经典odd-ball 实验

工具介绍Letswave7是在Windows,Mac OSX和Linux或Unix平台下基于Matlab进行EEG信号处理的工具箱。在使用Letswave7之前,应下载并安装 Matlab 。
(详情请点击:Matlab软件包及安装

在本教程中,将使用Letswave7对P300实验进行研究,以展示对单个主题和多个主题的数据分析过程,并且还将介绍在Letswave7中进行功能图形生成和脚本编写的过程。

 


1. letswave7安装与数据集准备
 
首先,打开matlab,点击“设置路径”。



其次,点击“添加并包含子文件夹”,将“letswave7”工具包导入进来,并保存所有文件。



关于本实验的数据集可在后台回复“letswave”获取。



最后,解压本地“rawdata1.zip”文件,其中包括三个文件:sub093.eegsub093.vhdrsub093.vmrk

 


2. 数据集导入

 

首先,在Matlab的命令窗口中输入“ letswave7 ”以打开Letswave7。将letwave7的路径设置为数据集的文件夹,例如此处的“F:\letswave7\rawdata1”。

 


其次在管理器模块的菜单中选择“File”->“Import”->“Import EEG / MEG datafiles”,弹出导入数据对话框,添加文件“sub093.eeg”

 


最后 点击绿色按钮以导入数据集。导入完成后,相应的数据集变为红色并显示“sub093(Done)”。关闭导入数据对话框,数据集“ sub093 ”将出现在管理器模块中。



3.数据集检查


首先,选择数据集“sub093”,然后在菜单中单击“View”->“continues Date Viewer”以检查导入的数据集的数据质量。



在数据查看器中,可以看到通道P1明显异常。因此,在接下来的步骤中,我们将通道P1视为坏电极,需要对其进行插值。

 

 


由于原始脑电信号存在极大的噪声,它们在EEG信号中始终混合在一起。因此预处理对于提高信噪比,从而获得“清晰” EEG数据非常必要。


通常,预处理中常用的降噪方法如下:

1.通道位置赋值


首先,在管理器模块的数据列表中选择数据集“ sub093 ”,然后在菜单中单击“Edit”->“Electrodes”->“Edit electrode coordinates”

 


在处理模块中,显示默认分配的位置文件是“ Standard-10-20-Cap81.locs”。

 

然后,点击“ Select custom files with channel locations”以选择频道位置的自定义文件。在Letswave7中的“Electrodes”文件夹中,有多个通道位置文件用于不同的EEG记录系统。

 

 

PS:如果不希望使用所有这些文件,还可以分配自己的频道位置文件。
 
最后,点击“Run”,名称为“ chanlocs sub093 ” 的新数据集将出现在管理器模块的数据列表中。

 


2.删除无用的通道


有时,为了进行有效的分析并节省存储空间,我们需要删除无用的通道。在这里,IO记录了眼电信号(EOG)。而我们并不需要对EOG进行分析,因此需要删除通道IO。


首先,在管理器模块的数据列表中选择数据集“ sub093 ”,然后单击“ Edit”->“Arrange signals”->“Rearrange or delete epochs,channels,indexes”

 


然后,在处理模块中,点击”Add All”将所有通道添加到右侧列表框。

 


然后,选择通道“IO”,点击“ Remove”进行移除。

 


最后,点击“Run ”按钮,名称为“ sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。

 


3.滤波


滤波可以滤除高频伪迹,低频漂移和50 / 60Hz电源线干扰。在letswave7中,采用Butterworth滤波器进行频率滤波。

对于P300数据集,由于300ms左右的正波是慢波,因此我们将带通滤波器设为0.05-30Hz。对于50Hz电源线干扰,将不使用陷波滤波器,因为它已经超出了带通滤波器的范围。

PS:这个数值只是一个参考数值,具体情况具体分析,最好自己领域的相关文献哟~

首先在管理器模块的数据列表中选择数据集“ sel_chan sub093 ”,点击击”process”- >”Frequency analysis and filters”->”Butterworth filters”



其次,在处理模块中,将低截止频率(Hz)设置为0.05Hz,然后单击”Run”按钮以进行带通滤波。

 


名称为“ butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。

 


4.坏电极插值替换


当我们检查导入的原始数据时,发现通道P1是坏的。在此步骤中,我们将通道P1进行插值。

首先, 在管理器模块的数据列表中选择数据集“ butt sel_chan sub093 ”,然后在菜单中单击“ Edit”->“Electrodes”->“Interpolate channel using neighbouring electrodes ”

 


其次, 在处理模块中,在“ Channel to Interpolate:Channels for”列表框中选择通道P1,然后单击“ Find closest electrodes ”按钮。

 


由于默认设置中用于插值的通道数为3,因此Letswave7将根据通道的位置自动找到最接近的电极“ P3 ”“ Pz ”“ CP1 ”进行插值。



PS:也可以采用4个电极点,根据自己的实验进行设置哈。

最后点击”Run”。名称为“ chan_interp butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。


 

5.ICA分解以删除成分

 
ICA是一种基于矩阵算法的盲源信号分离方法。假设X代表基于“通道X时间”的EEG信号,S代表基于“成分X时间”的信号源,A代表基于“通道X成分”的混合矩阵。ICA的目的是计算出A矩阵以分离出每个成分。根据这个模型,我们使用ICA在EEG信号中进行人工移除。

 

 

5.1 计算ICA矩阵


首先,在管理器模块的数据列表中选择数据集“ chan_interp butt sel_chan sub093 ”,然后在菜单中单击“ Process”->“Spatial filters(ICA / PCA)->Compute ICA matrix ”



其次,在处理模块中,成分数量选择“decide by user”,并将“Components Number”设置为“40”

PS:数值也是可以自己进行设置的,一般要小于通道数目,但是数值也不要太小。若是64通道,常用30-64之间。



最后单击“Run ”。名称为“ ica chan_interp butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。



5.2 人工识别成分

在获得ICA矩阵,混合矩阵A和分离矩阵pinv(A)之后,我们需要人工识别成分。

首先,在管理器模块的数据列表中选择数据集“ ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“ Process”->“Spatial filters(ICA / PCA)”->“Apply ICA / PCA Spatial filters ”。我们将看到手动删除空间过滤器成分的界面。



其次,在此界面中,黑色代表原始信号X,蓝色代表源信号S,橙色曲线代表滤波后的信号X_bar。我们将成分1识别为眨眼伪迹。成分2识别为水平眼球运动伪迹。在右侧面板中选择橙色comp 1,comp 2。单击“OK”对其进行移除。



最后,名称为“ sp_filter ica chan _interp butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。

 


7.分段


在处理数据时需要对获取的EEG信号进行分段,以分析不同时期的数据。
 
首先,在管理器模块的数据列表中选择数据集“ sp_filter ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“Process”- >“Epoch Segmentation”->“Segment relative to events(one file per code)”

 


其次, 在处理模块中,选择事件代码“S9”“S10”,并将Epoch开始时间和持续时间设置为“-1”“3”

PS:时间段的选择也可以自己选择而定,因为后期我们会做时频分析,所以选取的时间比较长。若是只做ERP分析,也可以使用-0.21

 

 

最后, 单击处理模块底部的“Run ”按钮,然后两个新数据集名称为“ ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”“ ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”模块

 

 

8.伪迹去除


在消除伪迹之前,有必要对所有时期进行观察。
 
首先,选择数据集“ ep_S9 sp_filter ica chan_interp butt sel_chan sub093 ”“ ep_S10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后在右键菜单中选择“View”

 

 

其次, 在波形画面查看器中,选择所有Epoch,将Epoch设置为叠加波。我们在这里对Pz进行观察,因为它是P300分析中最有效的电极点。将y轴设置为从-100100。在通道Pz上,对于这两个数据集,所有Epoch均未观察到明显的伪迹。

 


虽然这里没有观察到伪迹,但其它实验数据可能会存在伪迹。剔除伪迹有两种方法:
 
8.1  手动剔除带有伪迹的Epoch。
 
首先,选择数据集“ ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”“ ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后单击“ Edit” ->“Arrange signals”->“Rearrange or delete epochs,channels,indexes”

 


其次,在处理模块中,将选择项设置为“ Epoch ”,然后将要保留的Epoch放在右栏中。单击“Run ”以完成成分剔除。

 


最后,两个名为“ sel_epoch ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”“sel_epoch ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”将出现在管理器模块的数据列表中。

 

 

8.2  第二种方法是参照标准来剔除伪迹。
 
首先,选择数据集“ ep_S9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ ep_S10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“Process”- > “ Artefact rejection and suppression”->“Reject epoch (amplitude criterion)”

 

 

其次,在处理模块中,选中“Select channels”,然后选择通道Pz。在右侧选中“X-axis limits”,并将相应的间隔设置为02s。单击处理模块底部的Run ”按钮以完成成分剔除

 


最后,名称为“ ar-amp ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ ar-amp ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”的两个新数据集将出现在管理器模块的数据列表中。

 

 

9.重参考


在P300的研究中,通常选择双侧乳突区域的平均值作为参考。因此,我们将重新参考TP9和TP10的平均值。
 
PS:不同的型号有不同的说法,也有的叫A1和A2。此外,也可以采用其他参考方法,例如,零参考,全脑平均等。(详情可点击:EEG信号处理与分析常用工具包介绍
 
首先,选择数据集“ ep_S9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ ep_S10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“Process”- >“Rereference signals”->“Rereference ”

 

 

其次,处理模块中,在左侧列表框里选择TP9TP10作为新参考,并在右侧列表框中选择“Apply reference for”。点击“Run”按钮在处理模块的底部完成成分剔除。
 

 

最后,名称为“ reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”的两个新数据集将出现在管理器模块的数据列表中。

 


10.基线校正


在分段中,我们将Epoch的开始时间和持续时间设置为-13,这意味着Epoch将从-1s持续到2s。因此,我们将基线设置为从-1s0s,以进行基线校正。

首先,选择数据集“ reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“Process”- >“Baseline”->“Baseline correction”



其次,将默认设置保留在处理模块中,然后单击处理模块底部的Run ”以完成成分剔除。
 


最后,名称为“ bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”的两个新数据集将出现在管理器模块的数据列表中。



11.平均


在预处理的十个步骤之后,我们可以简单地对各个时期进行平均以进行ERP的分析。 

首先选择数据集“ bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击“Process”- > “ Arrange ”- >“Compute arrange,std,median across epoch”



其次将默认设置保留在处理模块中,然后单击处理模块底部的“Run”按钮进行平均。



最后,名称为“ avg bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ avg bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”的两个新数据集将出现在管理器模块的数据列表中。
 


12.查看结果


首先选择数据集“ avg bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ avg bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”。单击右键菜单中的“View”,我们可以在多视图器中查看波形的结果。

 


然后选择两个数据集并选择通道Pz,我们可以在Pz上看到P300的结果。在工具栏中选中“cursor”并将设置为0.35,我们可以观察到P300的波形。由于这是单个主题的结果,因此ERP仍然很嘈杂。

 


总结:在这一部分中,我们逐步演示了预处理和ERP的分析。对于每个步骤,文件名中都会添加一个前缀,例如butt,ica和reref。

因此,根据数据集的名称,我们对处理步骤有了大致的了解,有关画图以及处理脚本等更高级的教程将在后面进行介绍,敬请期待哟~

 

版:华华


Matlab软件包及安装
脑电数据采集指导手册
Analyer脑电数据处理指导手册
eeglab脑电数据预处理指导手册

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存