赞
踩
Hello,
这里是行上行下,我是喵君姐姐~
之前写过eeglab数据处理,得到了大家的一致好评。拖了很久的时频更新,马上就要和大家见面了。
考虑到有的小伙伴没有编辑基础,所以我们先介绍一个界面的软件——letswave7。它和eeglab类似,只是它全部的处理都是界面化的,对于小白来说,十分友好。
今天就以oddball实验为例,简单介绍一下使用letswave7进行脑电数据预处理与叠加平均。然后第二期,再讲时频处理的原理和具体操作哟~
实验介绍: 采用视觉Odd-ball实验。在屏幕上,黑色为偏差刺激(标记为“ S 9”),白色为标准刺激(标记为“ S 10”)。每个矩形块持续80毫秒,ISI持续200毫秒。两分钟内总共安排了600次刺激试验,其中偏差刺激的可能性为5%。要求参与者计算黑色矩形块的数量,并在试次结束后报告,以使参与者在屏幕上保持注意力。
工具介绍: Letswave7是在Windows,Mac OSX和Linux或Unix平台下基于Matlab进行EEG信号处理的工具箱。在使用Letswave7之前,应下载并安装 Matlab 。
(详情请点击:Matlab软件包及安装)
在本教程中,将使用Letswave7对P300实验进行研究,以展示对单个主题和多个主题的数据分析过程,并且还将介绍在Letswave7中进行功能图形生成和脚本编写的过程。
首先,打开matlab,点击“设置路径”。
其次,点击“添加并包含子文件夹”,将“letswave7”工具包导入进来,并保存所有文件。
关于本实验的数据集可在微信公众号行上行下后台回复“letswave”获取。
最后,解压本地“rawdata1.zip”文件,其中包括三个文件:sub093.eeg,sub093.vhdr和sub093.vmrk。
首先,在Matlab的命令窗口中输入“ letswave7 ”以打开Letswave7。将letwave7的路径设置为数据集的文件夹,例如此处的“F:\letswave7\rawdata1”。
其次,在管理器模块的菜单中选择 “File”->“Import”->“Import EEG / MEG datafiles”,弹出导入数据对话框,添加文件 “sub093.eeg”。
最后, 点击绿色按钮以导入数据集。导入完成后,相应的数据集变为红色并显示“sub093(Done)”。关闭导入数据对话框,数据集“ sub093 ”将出现在管理器模块中。
首先,选择数据集 “sub093”,然后在菜单中单击 “View”->“continues Date Viewer” 以检查导入的数据集的数据质量。
在数据查看器中,可以看到通道P1明显异常。因此,在接下来的步骤中,我们将通道P1视为坏电极,需要对其进行插值。
由于原始脑电信号存在极大的噪声,它们在EEG信号中始终混合在一起。因此预处理对于提高信噪比,从而获得“清晰” EEG数据非常必要。
通常,预处理中常用的降噪方法如下:
首先,在管理器模块的数据列表中选择数据集 “ sub093 ”,然后在菜单中单击 “Edit”->“Electrodes”->“Edit electrode coordinates”。
在处理模块中,显示默认分配的位置文件是“ Standard-10-20-Cap81.locs”。
然后,点击 “ Select custom files with channel locations” 以选择频道位置的自定义文件。在Letswave7中的 “Electrodes” 文件夹中,有多个通道位置文件用于不同的EEG记录系统。
PS: 如果不希望使用所有这些文件,还可以分配自己的频道位置文件。
最后,点击 “Run”,名称为 “ chanlocs sub093 ” 的新数据集将出现在管理器模块的数据列表中。
有时,为了进行有效的分析并节省存储空间,我们需要删除无用的通道。在这里,IO记录了眼电信号(EOG)。而我们并不需要对EOG进行分析,因此需要删除通道IO。
首先,在管理器模块的数据列表中选择数据集 “ sub093 ”,然后单击 “ Edit”->“Arrange signals”->“Rearrange or delete epochs,channels,indexes”。
然后,在处理模块中,点击**”Add All”**将所有通道添加到右侧列表框。
然后,选择通道 “IO”,点击 “ Remove” 进行移除。
最后,点击 “Run ” 按钮,名称为 “ sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。
滤波可以滤除高频伪迹,低频漂移和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 ” 的新数据集将出现在管理器模块的数据列表中。
当我们检查导入的原始数据时,发现通道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 ” 的新数据集将出现在管理器模块的数据列表中。
ICA是一种基于矩阵算法的盲源信号分离方法。假设X代表基于 “通道X时间” 的EEG信号,S代表基于 “成分X时间” 的信号源,A代表基于 “通道X成分” 的混合矩阵。ICA的目的是计算出A矩阵以分离出每个成分。根据这个模型,我们使用ICA在EEG信号中进行人工移除。
首先,在管理器模块的数据列表中选择数据集 “ 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 ” 的新数据集将出现在管理器模块的数据列表中。
在获得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 ” 的新数据集将出现在管理器模块的数据列表中。
在处理数据时需要对获取的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.2 到 1。
最后, 单击处理模块底部的 “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 ”模块。
在消除伪迹之前,有必要对所有时期进行观察。
首先,选择数据集 “ 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轴设置为从 -100 到100。在通道Pz上,对于这两个数据集,所有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 ” 将出现在管理器模块的数据列表中。
首先,选择数据集“ 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”,并将相应的间隔设置为0至2s。单击处理模块底部的“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 ”的两个新数据集将出现在管理器模块的数据列表中。
在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 ”。
其次,处理模块中,在左侧列表框里选择TP9和TP10作为新参考,并在右侧列表框中选择“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 ”的两个新数据集将出现在管理器模块的数据列表中。
在分段中,我们将Epoch的开始时间和持续时间设置为 -1 和 3,这意味着Epoch将从 -1s 持续到 2s 。因此,我们将基线设置为从 -1s 到 0s,以进行基线校正。
首先,选择数据集“ 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 ”的两个新数据集将出现在管理器模块的数据列表中。
在预处理的十个步骤之后,我们可以简单地对各个时期进行平均以进行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 ”的两个新数据集将出现在管理器模块的数据列表中。
首先,选择数据集“ 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。
因此,根据数据集的名称,我们对处理步骤有了大致的了解,有关画图以及处理脚本等更高级的教程将在后面进行介绍,敬请期待哟~
本文首发于微信公众号行上行下,公众号后台回复“letswave”获取。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。