banner
学习与分享

您的当前位置:首页 > 新闻资讯 > 学习与分享

MATLAB脑电数据处理精要(三、实操)

来源:微信公众号:人因工程系统 │ 发表时间:2024-11-12 | 浏览数:载入中...

上期指路

《MATLAB脑电数据处理精要(一、概述)》

《MATLAB脑电数据处理精要(二、原理)》

留言私信互动可获得《EEGLAB操作手册(中文版)》,贾会宾教授

00 / 准备工作

将EEGLAB插件导入到MATLAB

0.1 下载EEGLAB压缩包文件(如,'eeglab2022.0.zip')。

0.2 将下载的EEGLAB压缩包文件解压到一个易于访问的位置,例如 'C:\eeglab' 或 '/Users/username/eeglab' 

解压完成后,应该会看到一个包含多个子文件夹和文件的目录。

0.3 启动MATLAB并设置路径

在MATLAB命令窗口中,使用cd命令导航到EEGLAB的解压目录。例如:

cd 'C:\eeglab\eeglab2022.0'

(在Mac或Linux系统上):

cd '/Users/username/eeglab/eeglab2022.0'

添加EEGLAB路径及其子文件夹到MATLAB搜索路径。可以在命令窗口中输入以下命令:

addpath(genpath(pwd));

或者在MATLAB菜单中选择 'Home > Environment > Set Path > Add with Subfolders' ,然后选择EEGLAB的解压目录。

0.4 启动EEGLAB

在MATLAB命令窗口中,输入以下命令启动EEGLAB:

eeglab;

如果一切正常,EEGLAB图形用户界面(GUI)将会打开,您现在可以开始使用EEGLAB进行数据处理了。

0.5 安装EEGLAB插件

EEGLAB提供了许多插件以扩展其功能,可以根据需要安装这些插件。

在EEGLAB GUI中,选择 'File > Manage EEGLAB extensions > Data processing extensions' 

浏览可用插件列表,选择需要安装的插件并点击 'Install/Update' 按钮。

注意:EEGLAB是基于MATLAB的一个工具包,一般加载的时候都从添加子文件夹导入。在添加多个工具包时,记得只保留必要的工具包,避免兼容报错的问题。

01 / 导入数据

常见的数据格式包括EDF、BDF和set等。使用'File > Import data > Using EEGLAB functions and plugins' 选项,根据数据格式选择相应的导入方法。(数据类型为.cnt选From Neuroscan.CNT file)

其中,BP设备和ANT设备的数据,都是从.vhdr中导入。

若是要导入EEGLAB保存的数据(数据类型为.set),可以使用'File > Load exiting dataset > eeglab_data.set' 选项。

根据流程点击 'OK' 进行下一步。

主 GUI 图就会提供文件的一些基本属性,例如通道数和采样率。

使用'Plot > Channel data (scroll)' 查看数据,熟悉各通道的波形特点和整体数据的质量。

02 / 电极定位

加载与记录数据时相匹配的电极位置文件。使用'Edit > Channel locations' 选项,导入标准电极位置文件,如standard-10-5-cap385.elp。确认每个通道的名称和位置,确保与记录时的设置一致。

注意:如果检查到某个电极点的坐标信息为空白,可能是该通道的名称在加载的模板文件中找不到,那么:

  1. 如果确定该通道是根据国际排布系统来确定的,那可以修改label名称后再点击下方的 look up locs 来更新通道位置信息;
  2. 如果不是国际排布系统,可以向厂家要电极的坐标位置信息;
  3. 如果知道该电极点的精确坐标,可以手动输入;
  4. 双侧乳突的电极点位置可能会根据脑电系统的不同而不同,比如TP9 TP10,A1 A2, M1 M2这三对都是指双侧乳突

显示“Yes”显示通道位置已定位成功。为了处理多个实验文件,可以使用MATLAB脚本批量完成:

1)使用 eeh() 函数(参考):

>> eegh() 
% 打开EEGLAB历史命令窗口
[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;
% 初始化EEGLAB并创建必要的全局变量

EEG = pop_loadcnt('D:\EEG文件集\我的实验\Ex1_n2pc_tar\EEG数据\n2pc_02_23_03.cnt' , 'dataformat', 'auto', 'memmapfile', '');
% 从指定路径加载EEG数据文件,文件格式自动检测,使用内存映射文件

[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 1, 'gui', 'off');
% 将加载的数据集添加到全局变量ALLEEG中,并设置为当前数据集

EEG = eeg_checkset( EEG );
% 检查加载的数据集,确保其正确性

EEG = pop_chanedit(EEG, 'lookup', 'D:\\备份\\编程_研究生\\EEG\\64chan.ced');
% 加载并设置EEG通道位置文件

[ALLEEG EEG] = eeg_store(ALLEEG, EEG, CURRENTSET);
% 将更新后的数据集存储回ALLEEG中

2)检查 EEG.history(参考):

>> EEG.history
ans =

    '
     EEG.etc.eeglabvers = '14.1.2'; % 这表示使用的EEGLAB版本,可以忽略
     EEG = pop_loadcnt('D:\EEG文件集\我的实验\Ex1_n2pc_tar\EEG数据\n2pc_02_23_03.cnt' , 'dataformat', 'auto', 'memmapfile', '');
     EEG = eeg_checkset( EEG );
     EEG=pop_chanedit(EEG, 'lookup','D:\\备份\\编程_研究生\\EEG\\64chan.ced');
     EEG = eeg_checkset( EEG );'

03 / 剔除无用电极

在数据处理前,移除不必要的电极,如双侧乳突点或眼电通道。

使用 'Edit > Select data > Select channels' 选项,选择并剔除不需要的电极。注意,要删除的无用电极一定要勾选,不然还是会保留在数据里。

04 / 重参考

根据实验要求,选择合适的参考电极位置,如双侧乳突平均参考或全脑平均参考(CAR)。使用'Tools > Re-reference' 选项,重新参考数据。重参考可以减少不同电极之间的偏差,提高数据的一致性。

05 / 重采样

降低采样率以减少数据量,通常在滤波之后进行。使用'Tools > Change sampling rate' 选项,选择合适的目标采样率。确保新采样率至少是感兴趣频段的两倍。

06 / 滤波

应用高通和低通滤波器,去除数据中的噪声和伪迹。

使用 'Tools > Filter the data' 选项,选择合适的高通和低通截止频率。通常高通滤波在0.1Hz左右,低通滤波在30Hz到60Hz之间。

注意,两个一起填**进行带通滤波,建议分开进行。

带通滤波常用于消除50 Hz或60 Hz的电源线噪声,这种噪声也称为陷波滤波。然而,为了更有效地消除电源线噪声,可以使用EEGLAB中的CleanLine插件。

07 / 分段和基线校正

将连续数据分段,提取事件相关的时间段。

使用 'Tools > Extract epochs' 选项,根据事件标记分段。

应用基线校正,调整每段数据的基线水平。基线校正可减少数据漂移的影响,通常选择事件前的时间段作为基线。

08 / 插值坏导(可选)

根据实验需求,如果实验关注的通道在数据采集时出现数据记录问题,对该坏导联进行插值处理,以周围导联的平均值可以替代坏导联数据。

1)使用 'Tools > Interpolate electrodes' 选项,选择 'Select from data channels' 坏导联并进行插值处理。

2)使用代码操作:

EEG.data(a,:,:) = mean(EEG.data([b c d],:,:)) ;

其中a**坏掉的电极点数值,b c d **要进行插值平均的电极点数值

如果不确定通道数值是多少,可以通过 'Plot - channel locations - by name' 来进行查看。

09 / **成分分析(ICA)✭

注意,在ICA之前需要将脑电测量设备产生的干扰信号的趋势消除掉,参考滤波步骤。并且,需要完成删除不良通道及不良数据部分,保证数据集足够干净。

使用'Tools > Run ICA'选项,运行ICA算法。ICA可以将混合信号分解为**的成分,有助于识别并剔除伪迹。

注意,如果之前的插值坏导步骤中使用了其他通道的数据生成了补充数据,相当于丢失了一个有效通道的数据。而ICA的默认假设是所有通道的数据都是有效的,所以在这种情况下需要进行一些修改。

具体来说,在调用ICA函数时,必须告诉它实际有效的数据通道数。举例来说,如果你原本有60个通道,但因为插值坏导步骤损失了一个有效通道,实际有效通道数就变成了59。

因此,在设置ICA参数时,需要在 'extended', 1后面加上 'pca', 59 ,中间用英文逗号和空格(英文输入法)隔开。这表示在进行ICA之前,先进行主成分分析(PCA),并且只保留59个主成分来进行后续的ICA处理。

对话框(下图)在ICA计算结束后会消失,不用操作,直到在Matlab命令窗口看到'Done',表示ICA已跑完。

运行完ICA计算之后建议先保存当前数据,然后再进行伪迹剔除操作。这是因为保存未剔除伪迹的ICA结果可以在剔除不当时回溯到未剔除状态,重新进行选择。保存数据时,EEGLAB会使用.set格式文件。

10 / 剔除ICA成分

该步骤检查和识别伪迹成分,如眼电伪迹、肌电伪迹等。使用'Tools > Reject data using ICA > Reject components by map'选项,手动选择并剔除伪迹成分。

按两次'OK'按钮后,可以检查 ICA 产生的 64 个分量(默认通道数,可以根据需求更改)。下图还显示了单击名为'1'的数字按钮时出现的弹出窗口。点击数字按钮可直接观察并去除眼睛附近显示异常值或EOG伪影的不良电极,如下:

在编号 '1' 中可以看到坏电极,在编号 '3' 中可以看到似乎出现在眼睛附近的伪影,因此选择这两个数字按钮,当出现弹出窗口时,按底部中心的 'ACCEPT' 按钮。确认要删除的所有组件均已变为红色后,单击屏幕右下角的 'OK' 按钮。

接着,现在我们将删除选定的组件。要删除,请选择 'Tools > Remove components' 

此时会弹出询问窗口,会提示是否删除,并且,组件'1''3'已被选中,点击'OK' 按钮。

注意,在删除之前,可以选择绘制通道来检查数据。选择第三选项如下图,检查确认无误后点击 'Accept' 进行剔除操作:

所有通道的单个trial图:黑色表示组件被移除之前的状态,红色表示组件被移除之后的状态

所有通道的ERP图示例:红色**未剔除的数据,蓝色**剔除后的数据

11 / 剔除坏段

在去除伪迹后,检查并剔除数据中波幅超过特定阈值的坏段。

1)**阀值:

使用'Tools > Reject data epochs' 选项,设置波幅阈值并剔除坏段。通常设置为100微伏左右,严格情况下可以设置为80微伏。

2)目视检查法:

使用 'Plot > Channel data(scroll)' 选项

逐个trial进行查看,如果发现有伪迹过大的trial想要剔除的话,单击该trial,它会变成黄色。选择完所有trials后,点击下方的 'Reject' 即可。

12 / 保存数据

在预处理完成后,保存处理后的数据。使用'File > Save current dataset'选项,保存数据为.set格式,以便后续分析使用。

OWKmNL7t55O6LusG3SeNG1S6MADn1au2CEs9K75yubDi3qw66E0y87K8kv+aO8dRB1U31hoxqSwq3CgUJuu0Nky1tLSzykpMPy+LkKI/70mZkM4fMi7x5IUESOshqFjCRpXk5zJoU6DOtwyR9Y7iUOxZTX8MBfYmgSmI9UeJGpe8t0SDXSp08skdYsIgjR2281HHGY5c9vYZue4GREZMcD/IfPULjKRd9gQFHdc4lwc=