事件相关电位的呈现是在特定频带下的时域波形,从这个角度出发的话,其处理就涉及到滤波;此外由于脑电信号易受噪声干扰,所以单独测出的每两次的数据肯定是不同的,甚至会差别很大,即使是在同一条件下,这就需要去除噪声(这里不做详细介绍)、去除基线叠加平均
简单的处理流程:

  1. 滤波
  2. 分段&加标签
  3. 去基线
  4. 叠加平均

滤波(filt raw): 滤波的作用有两个,第一,取出我们关注的ERP特征最明显的频段的数据,比如8~13Hz;第二,滤除低频漂移(线性趋势),有的时候观察原始波形,发现会有一个线性上升或者下降,经过低频滤波便可去除,比如过滤掉3Hz以下的数据。
一个典型的MATLAB滤波函数如下:

% 滤波iir
function r=filtraw(raw,fs,lowcut,highcut,order)
sizeraw=size(raw);
udfilter=designfilt('bandpassiir','FilterOrder',order, ...'HalfPowerFrequency1',lowcut,'HalfPowerFrequency2',highcut, ...'SampleRate',fs);
for i=1:sizeraw(1)raw(i,:)=filter(udfilter,raw(i,:));
end
r=raw;
end

分段&加标签(epoch & label): 我们一般获取到的数据是连续多个任务的,还涉及到任务之间短暂休息时候的信号,这些信号是没用的,分段&加标签的作用就是把有用的时间段的数据取出来。由于一般我们采用多通道的电极采集信号,所以得到的原始数据一般是二维的,比如得到的数据是16x120000个,可以认为是16通道每个通道120000个数据点,如果采样率是1200,那就是100s的数据。假设任务周期是10s,关注的是每个10s中的第4~7s共3s的数据,那么是不是16x3600x10的数据结构比较好了,如果这10个任务中,有一半是任务1,另外一半是任务2,就需要一个标签文件标注第几个是任务几了(一般采集数据的时候就完成了);也可以将数据分为两个16x3600x5的,这样就不需要标签文件了,只需要备注好数据名就好。
(由于每个人打标签的方法可能都不同,这里就不放我的代码了,我的代码很乱)
去基线:(remove baseline) 去基线的原因是,我们获取到的脑电信号,有正有负,但是我们不能说这个就是脑电信号的绝对值,脑电信号获取到的都是相对的电压值(所以才会有重参考的概念);或者可以认为去基线就是为了在画图的时候,任务开始的0时刻之前的数据靠近或者为0,这样才会有任务期间时域波形的相对变化。我们一般取任务开始0时刻之前的100ms~200ms作为基线,每一次任务期间,基线的值可能都不同,所以不去除基线的话,下一步的叠加平均是无效的,因为没有基准,比如有的基线为负,有的基线为正,这样的情况下执行叠加平均,在基线抵消的时候,可能任务期间的波形也会抵消,也就获取不到ERP了。
去基线的具体方式就是,对于单次任务的脑电信号,对基线期间的脑电信号进行叠平均,然后用所有的脑电信号,减去这个平均值,得到去基线之后的信号,新的信号在基线期间是靠近0线的。

% 去除基线
function r=rbase(eeg,fs,tbase)sizeeeg=size(eeg);base=zeros(sizeeeg(1),1);nbase=fs*tbase;for i=1:sizeeeg(3)for j=1:nbasebase=base+eeg(:,j,i);endbase=base/nbase;eeg(:,:,i)=eeg(:,:,i)-base;endr=eeg;
end

叠加平均:(average) 这个就不解释了
代码:

% 叠加平均
function r=average(eeg)
sizeeeg=size(eeg);
sizetemp=size(sizeeeg);
if sizetemp(2)==3temp=zeros(sizeeeg(1),sizeeeg(2),1);for i=1:sizeeeg(3)temp=temp+eeg(:,:,i);endr=temp/sizeeeg(3);
elseif sizetemp(2)==2temp=zeros(sizeeeg(1),1);for i=1:sizeeeg(2)temp=temp+eeg(:,i);endr=temp/sizeeeg(2);
end
end

如果你的信号比较好,经过简单的四步,就能得到自己想要的ERP了,如果不行,就需要添加一些去除噪声的步骤了,所以最好的办法就是一开始就获取到好的信号。
题图来源:维基百科
https://en.wikipedia.org/wiki/Event-related_potential

事件相关电位(ERP)的简单处理流程(含MATLAB代码)相关推荐

  1. 脑电分析系列[MNE-Python-20]| 脑电图处理和事件相关电位(ERP)

    今天主要介绍一下MNE-Python中进行脑电图处理和事件相关电位(ERP). 有后台留言问,代码是在哪里运行的.这里说明一下,案例介绍的代码均在jupyter notebook中运行的,当然这些代码 ...

  2. HAPPE+ER:一款让脑电研究人员“更快乐”的软件,可用于事件相关电位(ERP)分析的标准化预处理管道

    导读 事件相关电位(ERP)设计是用脑电图(EEG)检测神经认知功能的常用方法.然而,传统的ERP数据预处理方法是手动编辑,这是一个主观且耗时的过程.最近创建了许多自动化通道,以满足EEG数据预处理的 ...

  3. 浣熊优化算法(COA)(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  4. 灰狼优化(GWO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 文献[1]中的灰狼优化(Grey Wolf Optimizer, ...

  5. COI实验室技能:常见的图像增强算法(含MATLAB代码)

    COI实验室技能:常见的图像增强算法(含MATLAB代码)   成像系统采集到的图片有时不一定具有很好的图像质量,往往需要进行一些图像增强的操作.本文主要整理了几种常见的图像增强算法,包括:同态滤波. ...

  6. 回声消除AEC算法(含Matlab代码)

    基于自适应滤波器的回声消除AEC算法(含Matlab代码) 摘要 自适应滤波器 声学回波抵消 AEC算法解析 LMS算法 NLMS算法 VSNLMS算法 APLMS算法 LMS-Newton算法 PF ...

  7. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)

    四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...

  8. matlab去除大跳变,一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码)...

    一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 文章目录 前言 一.MATLAB代码 二.结果示例 总结 前言 方法 ...

  9. 二、生理信号处理 ——1.心电信号(含Matlab代码及数据)

    本文适合快速了解心电信号,并能够进行数据的滤波处理. 一. 心电数据预处理(消除工频干扰.基线漂移) * 心电数据及rdmat函数见文章底部 1. 导入心电数据 ## 心电图导入及读取 clc; [T ...

  10. 灰狼优化(GWO)算法的8种中文变体(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

最新文章

  1. Windows 日志高级筛选实践
  2. 获取选中的radio
  3. Kubernetes1.5新特性(一):Kubelet API增加认证和授权能力
  4. bzoj1190 [HNOI2007]梦幻岛宝珠 动态规划
  5. python 类 对象 魔法方法概念+习题
  6. python3中urlopen_解决python3 urllib中urlopen报错的问题
  7. 工业以太网交换机的冗余功能及发展历程介绍
  8. 捡起JavaScript(1)
  9. Dreamweaver中如何格式化代码
  10. pgAdmin4的应用(一)
  11. 基于二阶锥规划的主动配电网动态最优潮流求解
  12. 简约学术毕业论文答辩PPT模板
  13. SeaweedFS安装部署
  14. 【电大题酷】【5】2269个人与团队管理
  15. this的五种绑定方式
  16. A股:我要加区块链,监管:你可消停会
  17. 业绩差距拉大 11家消费金融公司座次洗牌
  18. 51编写你值得注意的那些事
  19. 【论文笔记】DR-TANet: Dynamic Receptive Temporal Attention Network for Street Scene Change Detection
  20. FastCGI原理与应用[转]

热门文章

  1. Kendall's tau相似程度指标
  2. 《龙仇》V1.0安卓版
  3. Python之plot()与Tk窗体的绑定
  4. 教你用SQL生成一张带「农历」的日期维度表
  5. 巫妖王51单片机开发板配套视频课程-朱有鹏-专题视频课程
  6. 千锋扣丁学堂 如何学习android高级编程
  7. 《华为机试》刷题之HJ88 扑克牌大小
  8. SCL语言适用于哪些场景?
  9. Mina中的Pickles SNARK
  10. [Docker + Github + Jenkins] PR触发Jenkins自动建置(1)