当前位置:   article > 正文

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

letswave

img
img
Hello,

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

之前写过eeglab数据处理,得到了大家的一致好评。拖了很久的时频更新,马上就要和大家见面了。
img
考虑到有的小伙伴没有编辑基础,所以我们先介绍一个界面的软件——letswave7。它和eeglab类似,只是它全部的处理都是界面化的,对于小白来说,十分友好。

今天就以oddball实验为例,简单介绍一下使用letswave7进行脑电数据预处理与叠加平均。然后第二期,再讲时频处理的原理和具体操作哟~

1 实验与工具介绍

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

图 经典odd-ball 实验

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

(详情请点击:Matlab软件包及安装

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

2 前期准备

2.1 letswave7安装与数据集准备

首先,打开matlab,点击“设置路径”。
img
其次,点击“添加并包含子文件夹”,将“letswave7”工具包导入进来,并保存所有文件。
img
关于本实验的数据集可在微信公众号行上行下后台回复“letswave”获取。

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

2.2 数据集导入

首先,在Matlab的命令窗口中输入“ letswave7 ”以打开Letswave7。将letwave7的路径设置为数据集的文件夹,例如此处的“F:\letswave7\rawdata1”。
img
其次,在管理器模块的菜单中选择 “File”->“Import”->“Import EEG / MEG datafiles”,弹出导入数据对话框,添加文件 “sub093.eeg”
img
img
最后, 点击绿色按钮以导入数据集。导入完成后,相应的数据集变为红色并显示“sub093(Done)”。关闭导入数据对话框,数据集“ sub093 ”将出现在管理器模块中。
img

2.3 数据集检查

首先,选择数据集 “sub093”,然后在菜单中单击 “View”->“continues Date Viewer” 以检查导入的数据集的数据质量。
img
img
在数据查看器中,可以看到通道P1明显异常。因此,在接下来的步骤中,我们将通道P1视为坏电极,需要对其进行插值。
img

3 数据预处理

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

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

3.1 通道位置赋值

首先,在管理器模块的数据列表中选择数据集 “ sub093 ”,然后在菜单中单击 “Edit”->“Electrodes”->“Edit electrode coordinates”
img
在处理模块中,显示默认分配的位置文件是“ Standard-10-20-Cap81.locs”。

然后,点击 “ Select custom files with channel locations” 以选择频道位置的自定义文件。在Letswave7中的 “Electrodes” 文件夹中,有多个通道位置文件用于不同的EEG记录系统。
img
img
PS: 如果不希望使用所有这些文件,还可以分配自己的频道位置文件。

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

3.2 删除无用的通道

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

首先,在管理器模块的数据列表中选择数据集 “ sub093 ”,然后单击 “ Edit”->“Arrange signals”->“Rearrange or delete epochs,channels,indexes”
img
然后,在处理模块中,点击**”Add All”**将所有通道添加到右侧列表框。
img
然后,选择通道 “IO”,点击 “ Remove” 进行移除。
img
最后,点击 “Run ” 按钮,名称为 “ sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。
img

3.3 滤波

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

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

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

首先,在管理器模块的数据列表中选择数据集 “ sel_chan sub093 ”,点击击 ”process”- >”Frequency analysis and filters”->”Butterworth filters”
img
其次,在处理模块中,将低截止频率(Hz)设置为0.05Hz,然后单击 ”Run” 按钮以进行带通滤波。
img
名称为 “ butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。
img

3.4 坏电极插值替换

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

首先, 在管理器模块的数据列表中选择数据集 “ butt sel_chan sub093 ” ,然后在菜单中单击 “ Edit”->“Electrodes”->“Interpolate channel using neighbouring electrodes ”
img
其次, 在处理模块中,在 “ Channel to Interpolate:Channels for” 列表框中选择通道P1,然后单击 “ Find closest electrodes ” 按钮。
img
由于默认设置中用于插值的通道数为 3,因此Letswave7将根据通道的位置自动找到最接近的电极 “ P3 ”“ Pz ”“ CP1 ” 进行插值。
img
PS: 也可以采用4个电极点,根据自己的实验进行设置哈。

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

3.5 ICA分解以删除成分

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

3.5.1 计算ICA矩阵

首先,在管理器模块的数据列表中选择数据集 “ chan_interp butt sel_chan sub093 ”,然后在菜单中单击 “ Process”->“Spatial filters(ICA / PCA)->Compute ICA matrix ”
img
其次,在处理模块中,成分数量选择 “decide by user”,并将 “Components Number” 设置为 “40”

PS: 数值也是可以自己进行设置的,一般要小于通道数目,但是数值也不要太小。若是64通道,常用30-64之间。
img
最后,单击 “Run ” 。名称为 “ ica chan_interp butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。
img

3.5.2 人工识别成分

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

首先,在管理器模块的数据列表中选择数据集“ ica chan_interp butt sel_chan sub093 ”,然后在菜单中单击 “ Process”->“Spatial filters(ICA / PCA)”->“Apply ICA / PCA Spatial filters ”。我们将看到手动删除空间过滤器成分的界面。
img
其次,在此界面中,黑色代表原始信号X,蓝色代表源信号S,橙色曲线代表滤波后的信号X_bar。我们将成分1识别为眨眼伪迹。成分2识别为水平眼球运动伪迹。在右侧面板中选择橙色comp 1,comp 2。单击 “OK” 对其进行移除。
img
最后,名称为“ sp_filter ica chan _interp butt sel_chan sub093 ” 的新数据集将出现在管理器模块的数据列表中。
img

3.6分段

在处理数据时需要对获取的EEG信号进行分段,以分析不同时期的数据。

首先,在管理器模块的数据列表中选择数据集 “ sp_filter ica chan_interp butt sel_chan sub093 ” ,然后在菜单中单击 “Process”- >“Epoch Segmentation”->“Segment relative to events(one file per code)”
img
其次, 在处理模块中,选择事件代码 “S9”“S10”,并将Epoch开始时间和持续时间设置为 “-1”“3”

PS: 时间段的选择也可以自己选择而定,因为后期我们会做时频分析,所以选取的时间比较长。若是只做ERP分析,也可以使用 -0.21
img
最后, 单击处理模块底部的 “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 ”模块
img

3.7 伪迹去除

在消除伪迹之前,有必要对所有时期进行观察。

首先,选择数据集 “ ep_S9 sp_filter ica chan_interp butt sel_chan sub093 ”“ ep_S10 sp_filter ica chan_interp butt sel_chan sub093 ” ,然后在右键菜单中选择 “View”
img
其次, 在波形画面查看器中,选择所有Epoch,将Epoch设置为叠加波。我们在这里对 Pz进行观察,因为它是P300分析中最有效的电极点。将y轴设置为从 -100100。在通道Pz上,对于这两个数据集,所有Epoch均未观察到明显的伪迹。
img
虽然这里没有观察到伪迹,但其它实验数据可能会存在伪迹。剔除伪迹有两种方法:

3.7.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”
img
其次,在处理模块中,将选择项设置为 “ Epoch ”,然后将要保留的Epoch放在右栏中。单击 “Run ” 以完成成分剔除。
img
最后,两个名为 “ 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 ” 将出现在管理器模块的数据列表中。
img

3.7.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)”
img
其次,在处理模块中,选中 “Select channels”,然后选择通道Pz。在右侧选中 “X-axis limits”,并将相应的间隔设置为02s。单击处理模块底部的“Run ”按钮以完成成分剔除。
img
最后,名称为“ 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 ”的两个新数据集将出现在管理器模块的数据列表中。
img

3.8 重参考

在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 ”
img
其次,处理模块中,在左侧列表框里选择TP9TP10作为新参考,并在右侧列表框中选择“Apply reference for”。点击 “Run” 按钮在处理模块的底部完成成分剔除。
img
最后,名称为“ 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 ”的两个新数据集将出现在管理器模块的数据列表中。
img

3.9 基线校正

在分段中,我们将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”
img
其次,将默认设置保留在处理模块中,然后单击处理模块底部的 “Run” 以完成成分剔除。
img
最后,名称为“ 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 ”的两个新数据集将出现在管理器模块的数据列表中。
img

3.10 平均

在预处理的十个步骤之后,我们可以简单地对各个时期进行平均以进行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”
img
其次,将默认设置保留在处理模块中,然后单击处理模块底部的 “Run” 按钮进行平均。
img
最后,名称为“ 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 ”的两个新数据集将出现在管理器模块的数据列表中。
img

3.11 查看结果

首先,选择数据集“ 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”,我们可以在多视图器中查看波形的结果。
img
然后,选择两个数据集并选择通道 Pz,我们可以在Pz上看到P300的结果。在工具栏中选中“cursor”并将设置为0.35,我们可以观察到P300的波形。由于这是单个主题的结果,因此ERP仍然很嘈杂。
img
总结:在这一部分中,我们逐步演示了预处理和ERP的分析。对于每个步骤,文件名中都会添加一个前缀,例如butt,ica和reref。

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

本文首发于微信公众号行上行下,公众号后台回复“letswave”获取。

排版:华华

img

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号