文章来源于"脑机接口社区"
letswave7中文教程3:脑电数据预处理-ICA去除伪影mp.weixin.qq.com![9c61c4f04c8780881fb1ed7a04a8ed95.png](https://i-blog.csdnimg.cn/blog_migrate/b05dd38e094ea39d6e3725ae76ef32a3.png)
ICA/BSS的理论与模型
独立成分分析(ICA)是一种盲信号分离(Blind Signal Separation,BSS)方法。ICA可线性建模如下图所示.
![694e4ec37680975cbc0164baf2a64f78.png](https://i-blog.csdnimg.cn/blog_migrate/9a772d5382467b1d3724c81b2f46a1ee.png)
假设X为”通道x时间”的脑电信号,S为”成分x时间”的源信号,A为混合矩阵。ICA的目的是找到混合矩阵A,使每一个分量(每一行)相互独立。根据线性模型,采用独立成分分析方法对脑电信号进行去伪迹处理。
- 执行ICA算法得到混合矩阵A;
- 自动得到源信号S = pinv(A)×X;
- 在S中手动识别伪影成分,通过将相应的行设置为0,我们有S_bar;
- 通过移除伪影后的S_bar,我们可以自动得到X_bar= A×S_bar。
信号X_bar是ICA伪影去除的结果。在Letswave7中,步骤2和步骤4可以自动完成,其中pinv(A),也称为混合矩阵,是矩阵A的伪逆矩阵。步骤1 (computer ICAmatrix)和步骤3 (identify artifact component)需要手动执行。因此,在Letswave7中,我们需要两个步骤来完成ICA的移除伪影工作。
关于ICA之前也介绍过很多,可以查看:
1.ICA处理后,如何判断眼电、心电等成分?
2.结合matlab代码案例解释ICA独立成分分析原理
3.Scott等大神的33篇ICA独立成分分析论文汇总
4.ICA独立成分分析去除EEG伪影
5.eeglab教程系列(12)-学习和删除ICA组件
说明,这部分的教程是基于前面几次教程的基础上进行的。所以要进行ICA预处理进行伪影去除,需要:
1.先导入数据《letswave7中文教程1:软件安装与脑电数据导入》;
2.然后《letswave7中文教程2:脑电数据预处理-通道位置分配》,之后开始本节的教程。
第5步:计算ICA矩阵
在管理模块数据列表中选择“chan_interpbutt sel_chan sub093”数据集,在菜单中点击Process->Spatial filters(ICA/PCA)->Compute ICA matrix。
![13910be5057ec163178b468d479f3e44.png](https://i-blog.csdnimg.cn/blog_migrate/9127d5920a3edbc45069be7c0903e30d.jpeg)
在Batch模块中,选择decide byuser 成分数量,设置Components Number(成分数量)为40。
[Tips:成分数量可以自己设定,一般小于通道数。]
![0064955e8549b2ad46e7ed8dff09224c.png](https://i-blog.csdnimg.cn/blog_migrate/e5f03610b59b2476af401978ed8f5e8b.jpeg)
点击Run按钮以进行不良电极插值。[注,这里运行需要一些时间,所以耐心等待]。
一个名为“icachan_interp butt sel_chan sub093”的新数据集将出现在管理器模块的数据列表中。
![655cf5125abb4508eedbecd1c3ac2926.png](https://i-blog.csdnimg.cn/blog_migrate/c85b258360caa4afa8a0c3b62ab08afd.png)
第6步:识别伪影成分
在得到ICA矩阵、混合矩阵A和逆混合矩阵pinv(A)后,我们需要人工识别其伪影分量。
在管理器模块数据列表中选择数据集“ica chan_interp buttsel_chan sub093”,在菜单中点击Process->Spatial filters(ica /PCA)->Applyica /PCA Spatial filter。
![36803708cdbefc024af4b6fdad9d4757.png](https://i-blog.csdnimg.cn/blog_migrate/c084ccc026eb2907944b10e16031a466.jpeg)
我们将看到用于手动删除空间过滤器成分的界面。
![92a10d703253cea81d9e10160d848a96.png](https://i-blog.csdnimg.cn/blog_migrate/91db7ed9816aaf7c8700c79b29463fc1.jpeg)
在这个界面中,不同的信息用不同的颜色来标记。黑色表示原始信号X,蓝色表示源信号S,橙色表示过滤后的信号X_bar。利用左侧面板中的黑色列表框,我们可以选择数据集、epoch和通道来检查原始信号X作为中间面板中的黑色曲线。接下来,我们可以选择左侧面板中蓝色的成分,来检查底部蓝色面板中源S中每个成分的时间/频率/空间特征。在我们将成分标识为而言之后,我们可以在右边的橙色面板中选择它们。相应地,中间面板中的橙色曲线将显示经过过滤的信号X_bar。我们可以立即检查ICA过滤器的结果。
在本研究中,我们将成分1识别为眨眼伪影。头皮地形图显示眼睛附近存在“等效电流偶极子”(ECD)。时域波形呈尖峰状,频域功率集中在低频(<5Hz),说明该独立分量为眨眼伪影。
![329f571814e670607a6fba503b777d00.png](https://i-blog.csdnimg.cn/blog_migrate/b02bf82f85f9d23708526ddc946a4bb2.png)
![57437b5619be365d33e0e6ae1b940e16.png](https://i-blog.csdnimg.cn/blog_migrate/f3f8e6d0272525466a5c2a42e554f863.png)
![e3792bb3a2d1841711ac9dcb04774f2c.png](https://i-blog.csdnimg.cn/blog_migrate/8d378b2a8e522c026f29ae0d7be2f575.png)
![fd5b92b1c4c99d609afdd85a63042d79.png](https://i-blog.csdnimg.cn/blog_migrate/8feff653dfed85d6319d0d9eb077823b.png)
当我们通过选择右侧面板中的comp1移除该成分后,与中间面板中的橙色曲线X_bar和黑色曲线X相比,眨眼(blink)伪影已经被有效地移除。同样,成分2为伪像,具有侧向眼动。可以从头皮地形图上观察到清晰的证据。
在右边面板中选择橙色的comp1, comp 2,然后点击OK按钮。
![ab1e694426b6313fb07cd18ede52dcce.png](https://i-blog.csdnimg.cn/blog_migrate/66287357eafe862d2b9a426f4f5beeba.jpeg)
一个名为sp_filterica chan_interp butt sel_chan sub093的新数据集将出现在管理器模块的数据列表中,这是ica去除伪影后的结果。
![af9e960fceef1736e22a121ba3ef4468.png](https://i-blog.csdnimg.cn/blog_migrate/a3126438430e14bc880c32a8ce830e5f.png)
讨论
为了在Letswave7中运行ICA,需要讨论几件事情。
在菜单中,ICA矩阵计算有两项,分别是Compute ICA matrix和Compute ICA matrix(merged)。它们功能相似,但输入和输出不同。如果选择了多个数据集,则ComputeICA matrix将分别计算ICA矩阵。而Compute ICA matrix(merged),letswave7首先将所有选定的数据集合并在一起,然后为所有数据集计算一个公共ICA矩阵。
在预处理中还应讨论ICA的操作顺序和分割。由于ICA是一种用于去除伪影的数据驱动方法,因此我们需要足够的数据来运行ICA。而过多的数据量会大大增加计算时间,但对结果准确性的提高是有限的。通常情况下,我们在分割后运行ICA,因为分割可以缩短数据长度,去除不相关的噪声。然而,在P300的研究中,试验之间的重叠非常严重,分割后运行ICA会不必要地增加计算时间。因此在这个示例里,我们先运行ICA,然后在分割。
在本示例中,我们通过选择成分数量为40来运行ICA。通常,可以分离的独立分量的最大数目等于原始信号X中的通道数目。在本例中,由于通道数64已经足够大,所以我们将独立组件的数量设置为40就可以了
letswave7以及rawdata1.zip 数据资源下载
在公众号后台回复"letswave"(建议复制),获取数据资源。
参考:
letswave7中文教程3:脑电数据预处理-ICA去除伪影