文章来源于"脑机接口社区"手把手教你EEG脑电数据预处理-原理篇​mp.weixin.qq.com

感谢简书ID:亚内士多德 授权分享

EEG脑电数据预处理-原理篇

本文不涉及具体的操作步骤,而是对脑电数据预处理中的每一步进行解说,根据我自己的经验来解释为什么要这么做,希望能够对刚入门脑电数据的朋友有所帮助。如果发现有什么错漏之处,也请指正。

基本步骤定位通道位置

删除无用通道

滤波

分段

基线校正

重参考

降低采样率

插值坏导

独立主成分分析

剔除坏段

0. EEG data首先要认识脑电数据是什么样子。我们采集到的原始信号,是一系列随着时间变化而不断变化的曲线,如下图所示,这是一个8个通道的示例数据,一共有两种mark类型,分别为S1跟S2。

mark,或者event,或者trigger,其实表示的都是同一个意思,即在我们关注的事件发生时,打上一个我们认得出的标记,这样子就可以从我们收集到的一长段数据中,找到我们感兴趣的事件范围了。EEG示例数据

1. 定位通道数据首先我们将EEG数据加载进eeglab之后,eeglab能够读取到的仅仅是每一个通道的名称和数值,但是它并不知道这个通道是位于头皮上的什么地方,因此我们需要加载进一个跟记录数据时相匹配的通道位置信息

eeglab中默认的文件是 standard-10-5-cap385,指的是按照国际10-5系统排布的一共有385个电极点信息的模板,一般来说使用这个模板就可以了。

关于模板的更多信息还可以看这里《脑电定位系统》、《10-20国际标准导联系统》

2. 删除无用数据在采集数据的过程中,有可能会记录一些后期并不需要用到的通道信息,这时候我们就可以将它们剔除掉,不必纳入后续的分析中。

比如双侧乳突点。

又比如眼电通道的数据。在使用eeglab来对数据进行预处理的时候,可以通过ICA的方式来去除眼电成分,而这种方式可以不需要眼电通道数据的参与就可以进行。

3.滤波滤波分为高通滤波,低通滤波,带通滤波和凹陷滤波。

高通滤波是指,高于某个频率的信号可以通过,而低于这个频率的信号会被衰减过滤掉。而低通滤波则相反,指的是低于某个频率的信号可以通过,而高于这个频率的信号则相反。所以,在输入数值的时候,高通滤波要输入的是一个较小的数字,而低通滤波则是输入一个较大的数字。这可能跟我们的第一反应有点相悖。因此,也可以用它们的英文叫法来辨别,高通high-pass,低通low-pass,英文看起来就更为直观了。

而带通滤波,指的是在某个频率段范围内的信号可以通过,而这个频率段范围以外的信号会被衰减过滤掉,就相当于同时做了高通滤波和低通滤波。

凹陷滤波,指的是在某个频率范围内的信号会被衰减过滤掉,而这个频率范围以外的信号会被保留下来。这个操作通常是用来去除50Hz市电的干扰。我国的50Hz,因此在收集到的信号中,会有一个非常强烈的50Hz频段的信号存在,这就可以用凹陷滤波来去掉。

值得注意的是,滤波并不能完全过滤出我们想要的频段。比如30Hz的低通滤波,并不是说30Hz以外的信号就通通被过滤掉了,而是以30Hz为截止频率,高于这个截止频率的信号会被逐渐衰减。

如下图所示,横轴为频率,纵轴为增益系数,在截止频率f的左边,最开始的增益系数皆为1,指的是信号乘以1,被完整保留下来,而在接近截止频率的一定范围内,增益系数开始逐渐下降,直到我们的截止频率f处,增益系数正好是0.5,指的是经过了截止频率为f的低通滤波之后,f这个频段的数据有50%被过滤,而50%被保留下来。随后增益系数再逐渐下降,信号被逐渐衰减,直至接近于0。

因此,我们有时候会看到数据在做了30Hz的低通滤波之后,还会再做一个50Hz的凹陷滤波,就是因为,并不是做了30Hz的低通滤波就能够完全把30Hz以上的信号全部过滤掉,而50Hz的干扰又是非常强的,所以最好还是再做一个50Hz的凹陷滤波。低通滤波器

4.分段我们的数据是从实验开始到实验结束时全程记录的,但是我们感兴趣的,只是被试在接受到某个刺激,或者做出某个反应时那段事件的信号,因此,我们要根据我们打上的mark,讲数据切分成一段一段的,而在这些范围以外的数据,我们就不要了。

一般的ERP分段在事件前200毫秒到事件后1000毫秒这个时间段就足够了,因为几乎所有的ERP成分,都是在1秒以内产生的。但是如果后期还要做时频分析的话,则需要将分段时间拉长,扩大到事件前1秒到事件后2秒这个时间段内,因为时频分析的算法,要求数据要有一定的长度。

5.基线校正在ERP实验中,我们关心的是这个刺激事件带给被试什么样的变化,因此需要有一个比较。而在事件发生之前的时间里,我们认为被试是处于一个相对平静的状态,此时的脑电活动,代表了一个平静状态下的脑电活动。所以我们将这段时间内的脑电活动当成一个基线,拿事件发生之后的活动去跟它做比较,来分辨刺激事件到底让被试产生了什么样的活动。

一般来说,都是以分段中,事件之前这段时间来作为基线的,比如分段为-200毫秒到1000毫秒,那就将所有的数据,减去前200毫米以内数据的均值。换言之,,就是将这前200毫秒以内的数据均值当成是“海平面”,所有其他的数据的数值,都是相对于这个“海平面”数据的高度。

基线校正的第二个作用,防止数据漂移带来的影响。有时候因为某些原因,我们采集到的数据,会呈现一个逐渐缓慢向上漂移的趋势,而在分完段之后,由于向上飘的影响,每一段数据的起点将不在同一个地方,也会使得这段数据的绝对波幅变高。而基线校正就可以校正这种漂移带来的影响,让每一段数据都拥有一个差不多的起点。

6. 重参考首先要解释的是参考的定义。我们看到采集之后的数据是一个个的数值,但这个数值是什么意思呢,就是电极所在位置跟参考电极之间的电位差。

一般在脑电记录的时候会采用的参考电极有鼻尖参考,cz或头顶中央参考,还有单侧乳突参考,乳突就是耳朵后面一小块突起的区域。我们所看到的每个通道的数值,其实就是指这个通道跟参考通道之间的电位差。

在分析数据的时候,有时候我们会想要转换参考点的位置。因为不同位置的参考,会对数据造成一定的影响。比如记录时采用的是cz或头顶中央参考,那么自然地,距离cz点较近的电极点,记录到的电位差会非常小,而离得远的电极记录到的电位差就自然会大一点,这种大与小的差异,并不是由认知活动产生的,而是由记录方式产生的。又比如,单侧乳突参考,那脑袋左边的电极点跟右边的电极点,也会存在着记录方式不同产生的电位差不同。

常用的一些参考位置有双侧乳突平均参考,指将两个乳突数据的平均值作为参考数据,或者是全脑平均参考,指的是将全脑所有数据的均值作为参考数据的方法,不过使用全脑平均参考的时候要注意,眼电数据不要纳入其中,因为眼电数据的波动起伏非常大,很容易对数据造成比较大的干扰。

7. 降低采样率采样率的单位是Hz,指的是一秒内要记录多少个数据点的意思,比如原始数据的采样率是1000Hz的话,就是代表一秒内有1000个数据点。

在后期分析的时候,我们有时候会想要降低采样率,比如降到500Hz或者250Hz。这样做最大的好处其实就是减小数据量,以提高计算速度,没有其他的作用了。所以这一步并不是必须的。

但降低采样率需要注意两点,一是降低采样率要在滤波之后。因为降低采样率会使我们丢失高频信息,使高频信息变得扭曲,所以最好在保留了我们感兴趣波段之后再去降低采样率,这样可以保证信号最大程度不会失真。二是有一个采样定理,理论上来说,我们的采样率必须是我们想要分析的波段的两倍,比如我们想要分析60Hz的波,那数据采样率为120Hz就足够了。实际上,建议采样率最好在分析波段的三到四倍。

8. 插值坏导在做完上述这些处理之后,可以保存一下数据。因为在这之前的操作,是每个被试都需要做的基础操作,后期我们可以通过代码来实现批处理。而在这之后的操作,是需要根据每个被试的具体情况具体分析去处理的,因此只能一个个做,不能进行批处理。

从这一步开始可以说是真正的去除伪迹的过程了。去伪迹大体分为两种,横向操作和纵向操作,横向即对通道进行校正操作,对数据不好的导联进行插值处理,纵向是指挑出数据不好的trials,删除掉。建议是先横向处理后再纵向剔除,尽量保留下更多的trials数。

EEGLAB中插值坏导有两种方式,一种是以某通道周围几个通道的数据的平均值,来替代这个通道的数据,这种直接通过代码实现即可。另外一种是EEGLAB里内置的一种算法实现,具体换算是什么过程我也不太清楚,但是我问过贾会宾老师,他是推荐使用第二种方法。原因在于,我们记录的是头皮脑电,头是一个球体,因此直接用周围数据的均值来代替这种方法有点粗糙,而EEGLAB内置的方法则会考虑到容积传导效应,以及近的点和远的点贡献的权重不同来进行插值,因此会更加有效。

9. 独立主成分分析这是一个很有用但也很难的方法,我并不是十分清楚它的原理,只能大概理解,也只能大概描述一下。前面说过,我们记录到的是头皮脑电,脑电帽上划出了一个个的点来表示位置,但是我们在FPz点记录到的数据,就真的是FPz点这个位置头皮下方的区域所产生的电活动?不一定。做过实验的都知道,眨眼会产生影响,左右看会产生影响,帽子戴得太紧导致肌肉紧张也会产生影响,还有左右的FP1,FP2处产生的电活动也会影响到FPz,甚至在离它最远的Oz点下方产生的电活动,也有可能对前方FPz点产生微弱的影响。因为真正的电活动产生于头皮下方颅骨内部,它经过了这么一层又一层的传播之后,不同源的电活动肯定会相互影响,从而导致某个记录点记录到的数据,混合了很多不同成分的电活动。而独立主成分分析,就是要对记录点的数据做一个逆运算,把每个记录点的数据, 分解成一个又一个的成分组成。然后我们再从中剔除掉伪迹成分,比如眨眼的成分,肌肉紧张的成分等,从而得到一个相对干净的数据。

至于如何识别各种伪迹成分,可以看这篇文章《如何识别ICA成分》

10. 剔除坏段预处理到了这一步,已经接近于完成了。最后一个步骤就是要剔除掉波幅超过100微幅的trial(要求严格一点也可以定位80),因为波幅起伏这么大的活动,已经不是由认知活动引起的了,肯定是由于其他的动作引起的,所以可以直接剔除掉。

这一步操作一定要在插值坏导和ICA去除眼电成分之后再做,因为有可能被试眨眼比较频繁,那这么操作下来,有可能就需要删掉接近一半的trials数了,删掉的trials数太多,这个数据也就废了。所以要将它留到最后一步才做,同时,这个操作也能用来检查我们前两步操作是否足够有效。

arduino eeg脑电模块_手把手教你EEG脑电数据预处理-原理篇相关推荐

  1. 手把手教你EEG脑电数据预处理-原理篇

    目录 0. EEG data 1. 定位通道数据 2. 删除无用数据 3.滤波 4.分段 5.基线校正 6. 重参考 7. 降低采样率 8. 插值坏导 9. 独立主成分分析 10. 剔除坏段 本分享为 ...

  2. 数据卡片_手把手教你构建企业实时数据大屏

    大数据时代,企业的任何规划和决策都离不开数据分析的支撑.领导开会要看数据,项目拉投资要看数据,活动复盘要看数据-- 而传统的看数据方式要提前知晓领导需要哪些维度的数据,再由数据分析师基于历史数据做好报 ...

  3. bootstraptable 怎么在特定行添加数据_手把手教你做一个“渣”数据师,用Python代替老情人Excel...

    大数据文摘出品 来源:medium 编译:张大笔茹 十年前,你说你是做数据的,大家的反应就是 -- 用 Excel 做做表. 现在,要成为一个合格的数据分析师,你说你不会 Python,大概率会被江湖 ...

  4. oracle中通过distinct为什么过滤不了重复的数据_spark | 手把手教你用spark进行数据预处理...

    今天是spark专题的第七篇文章,我们一起看看spark的数据分析和处理. 过滤去重 在机器学习和数据分析当中,对于数据的了解和熟悉都是最基础的.所谓巧妇难为无米之炊,如果说把用数据构建一个模型或者是 ...

  5. 手把手教你EEG脑电数据预处理-操作篇

    目录 导入数据 对数据进行初步认识 电极定位 移除无用电极 重参考 重采样 滤波 分段和基线校正 插值坏导 ICA 剔除ICA成分 剔除坏段 目视检查法 保存数据 本分享为脑机学习者Rose整理发表于 ...

  6. 软件_手把手教vscode配置c++,python开发环境

    原创:软件_手把手教vscode配置c++,python开发环境 之前主用Python作为项目开发语言,将项目迁移到arm边缘盒子上后发现arm的cpu不给力,软件速度低于预期,所以计划将部分程序改为 ...

  7. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  8. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  9. ☀️手把手教你Python+matplotlib模拟锁相放大器的原理以及工作过程☀️《❤️记得收藏❤️》

    ☀️手把手教你Python+matplotlib模拟锁相放大器的原理以及工作过程☀️<❤️记得收藏❤️> 目录

  10. 手把手教你搭建实时大数据引擎FLINK

    手把手教你搭建实时大数据引擎FLINK 服务器规划 Standalone高可用HA模式 架构图 下载并上传tar包 具体安装步骤 yarm 集群环境搭建 服务器规划 服务器规划 服务名称 职能 zhe ...

最新文章

  1. 家校无忧接入云信,教师家长即时沟通
  2. 和某ZYC巨佬的随机挑战1总结
  3. 前端学习(1904)vue之电商管理系统电商系统之修改用户的操作
  4. 就业信息网进行服务器维护,服务器安全武汉大学黄石理工学院就业信息网.pptx...
  5. 怎样成为优秀的软件模型设计者
  6. ASIHTTPRequest详解
  7. android targetapi23,Android Studio 3.0+上的Kapt问题(TargetApi)
  8. c 语言 strcmpy的实现
  9. zb如何导出自己画的_如何用Rhino做出融球效果?
  10. mnist数据集_探索Tensorflow2中神经网络算法——基于Mnist数据集(一)
  11. 《统一沟通-微软-实战》-6-部署-5-边缘服务器-2012-07-12-5
  12. 电商销售数据分析(Python)
  13. Windows 7的中国DNA
  14. 等差、等比数列的求和公式
  15. Session ArrayList 实现购物车程序
  16. Diagnosing Intermittent Authentication Failures and User Lock-Outs in Oracle WebLogic
  17. 9个设计师都在用的图片素材网站,风格齐全,高清免费
  18. 红米手机4完整刷成开发版获得root权限的步骤
  19. 关于各种USB启动模式(MBR)的原理剖析
  20. 多线程并发数量设置设多少算合理

热门文章

  1. 新的IcedTea项目
  2. IcedTea:首个100%兼容、开源的Java
  3. 智能家居Series
  4. 测试打字有什么软件是什么,打字测试软件介绍
  5. 读取jpeg图像数据
  6. 个人ID的搜索引擎结果分析与联想
  7. K线技术指标实现详解—ENE
  8. win10触屏输入法_触摸屏笔记本Win10电脑的校准技巧
  9. ADS1115 STM32 HAL库驱动 CubeMX
  10. 在电信和联通的围攻下,大象中国移动显示出脚步蹒跚迹象