【教程+代码讲解】用EEGLab去除眼部伪迹

这篇笔记是我在学习如何使用EEGLab去除脑电图中的眼部肌肉噪声时所记录的。原文是英文,由ChatGPT翻译成中文。文章分为两个主要部分。第一部分是原理部分,主要内容摘自EEGLab官方文档(EEGLab Wiki)。第二部分则是算法和代码示例,重点介绍和演示了EEGLab中与ICA相关的函数。

背景

EEG信号处理中,常见的伪迹包括:

  • 电眼图(EOG)
  • 肌电图(EMG,肌电图)

而伪迹去除算法有如下几个类别:

  • 回归 - “回归模型使用参考通道估计伪迹效应,然后可以从受污染的脑电图中减去回归值以获取去噪信号”
  • 盲源分离(Blind Source Separation, BSS) - BSS方法将嘈杂信号分离成不同的成分并在重构过程中去除与伪迹相关的成分(例如:ICA,典型相关分析)
  • 小波分解
  • 经验模态分解(empirical mode decomposing)
  • 混合方法

一些研究使用深度学习进行伪迹去除(例如:GCTNet)。

独立成分分析(Independent Component Analysis, ICA)

ICA的定义: 独立成分分析(ICA)是一种用于将多元信号分离成可加性子分量的计算方法(即,统计独立的非高斯信号源的线性组合)。

ICA的应用

  • “鸡尾酒会问题”(语音识别)
  • EEG分析,可以追溯到1990年代。ICA可用于移除嵌入数据中的伪迹(肌肉、眼睑或眼动),而不会移除受影响的数据部分,使数据总量不变。

ICA的数学公式:
U = W X U=WX U=WX
上式中, W ∈ R c × c ′ W\in R^{c\times c'} WRc×c 是解混矩阵(Unmixing matrix), X X X 是信号矩阵。

ICA分离信号的效果是否好基于是否满足以下两个假设:

  • 源信号彼此独立。
  • 每个源信号中的值具有非高斯分布。

使用ICA有两个步骤

  • 将EEG信号分解成多个独立成分。
  • 然后手动检查并移除伪迹。

EEGLAB中的ICA

ICA有不同的算法,EEGLAB允许用户尝试不同的ICA分解算法并且设置超参数(比如迭代计算的停止条件)。比如runica.m是Infomax ICA、jader.m是Jader算法sobi.m是SOBI算法。

当通道数量(N)较大(>>32)时,可能需要大量数据才能找到N个成分。当数据不足时,使用 ‘pca’ 选项来找到少于N个成分可能是唯一的好选择。

如何用ICA取出伪迹?

以下是EEGLab的一些建议:

  • 在运行ICA之前修复坏通道和数据的接触不良的部分。
  • 在连续数据上应用ICA,而不是在分段数据上。
  • 在ICA之后计算平均参考。

方法1:人工审查出与伪迹高度相关的成分并移除

有经验的人可以通过2D头皮成分图成分活动功率谱识别与伪迹相关的成分。也可以通过一些算法自动检测伪迹性的ICA成分(请查看EEGLab维基上的教程)。

要绘制2-D头皮成分图,选择绘图 → 成分图 → 2-D Plot → Component maps → In 2-D)中。然后,交互窗口(如下所示)将由pop_topoplot.m函数生成。只需按“确定”以绘制所有成分。

以下是一个由于以下原因而产生的眼睛伪迹成分的示例:

  • 平稳下降的EEG频谱(底部面板)是眼睛伪迹的典型特征;
  • 头皮图显示了典型的眼睛伪迹分布在前额的投影;以及
  • 在组件erpimage.m(右上面板)中可以看到个别眼动。

在这里插入图片描述
以下是与肌肉相关的伪迹的示例:

  • 这个成分在空间上局部化,
  • 在高频率(20-50 Hz及以上)上显示高功率。
    在这里插入图片描述

方法2:通过算法自动检测伪迹性ICA成分

请查看EEGLab维基以获取更多自动伪迹去除插件。

Luca Pion-Tonachini的ICLabel插件是EEGLAB的默认安装插件,它提供了对每个独立成分(脑、眼、肌肉、线噪声等)类型的估计,如下图所示。默认设置是对那些有超过90%可能性属于肌肉或眼睛伪迹(眨眼和眼动)类别的成分进行标记。
在这里插入图片描述

方法3:通过代码和MATLAB函数去除特定部分(含Matlab代码)

从数据中减去ICA成分
以下是一个示例代码片段,演示如何通过操作ICA权重来移除特定的ICA成分:

% 加载数据集
eegSet = pop_loadset('mydata.set');
% 运行ICA,ICA的混解矩阵会储存为名叫“weight”的属性中。
% weights = ICA weight matrix with the shape of (comps,chans)
eegSet = pop_runica(eegSet, 'icatype', 'runica');
% 指定要移除的成分ID,以下数值无意义
componentsToRemoved = [3, 5, 7];
% 移除成分,函数的第三个参数为布尔型,True代表结束ICA计算后弹出UI让用户检查处理后的数据
processedEEGSet = pop_subcomp(eegSet, componentsToRemoved, 1);
% 提取EEG数组
processedEEGArray = processedEEGSet.data;

处理之后的脑电波对比,蓝色是原信号,红色是ICA处理后的:

在这里插入图片描述


参考资料:

Independent component analysis - Wikipedia

https://eeglab.org/tutorials/06_RejectArtifacts/RunICA.html

eeglab/functions/adminfunc/eeg_checkset.m at develop · sccn/eeglab · GitHub

J. Yin, A. Liu, C. Li, R. Qian and X. Chen, “A GAN Guided Parallel CNN and Transformer Network for EEG Denoising,” in IEEE Journal of Biomedical and Health Informatics, doi: 10.1109/JBHI.2023.3277596.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值