脑机接口实例二:脑电信号CSP处理

文章目录

  • 前言
  • 一、实例说明
    • 1.1 期望目标
    • 1.2 数据解读
  • 二、实例代码及结果分析
    • 2.1 MATLAB代码
    • 2.2 运行结果及分析
  • 三、问题与反思
  • 四、下一阶段计划


前言

本文在实例一的基础之上,选用BCI大赛08年数据集,基于CSP的特征提取,运用AdaBoost算法进行集成分类,以期实现运动想象中左、右手动作脑电信号的分类。


一、实例说明

1.1 期望目标

  • 掌握数据集预处理的方法
  • 实际运用CSP算法进行特征提取
  • 对提取的特征进行boosting分类(AdaBoost是其中一种)

1.2 数据解读

  1. 实验范式

      数据集由9名受试者的脑电图数据组成。BCI范式由四个不同的运动想象任务组成,即左手(类别1)、右手(类别2)、双脚(类别3)和舌头(类别4)的运动想象。范式记录不同日期的两天数据。(每天6圈,每圈48trails)。(共计576个trails,每个任务144trails)
      正式范式之前,记录5分钟估计EOG值,分三块:看屏幕上的十字(2分钟)、闭眼(1分钟)、眼动(1分钟),注:由于技术问题被试A04T的眼动数据较短,仅包含眼动状态。如下图所示:
在这里插入图片描述
      被试者坐在电脑屏幕前面的舒适的扶手椅上,在试验开始时(t=0s),黑屏上出现了一个十字。此外,还提出了一种短声告警音。两秒后(t=2s),以箭头的形式指向左、右、下或上(对应于四个类中左手、右手、脚或舌头的一个)的提示,出现在屏幕上1.25秒。这促使受试者完成所需的运动想象任务。不提供任何反馈。被试在t=6s时被要求执行运动想象任务,直到屏幕上的十字消失为止。随后屏幕再次为黑色的短暂中断,流程如下图所示:(有效数据为2-6s,即运动想象任务记录区间,亦为需提取数据的区间)
在这里插入图片描述

  1. 数据记录

      250Hz采样,并在0.5Hz和100Hz之间进行带通滤波。除了22个脑电图通道,3个单极EOG通道,以250Hz的频率记录和采样(见下图)。它们在0.5Hz和100Hz之间进行带通滤波,放大器的灵敏度设置为1mV。EOG通道是为伪像处理方法的后续应用提供的,不得用于分类。
在这里插入图片描述

  1. 数据文件描述

      事件类型描述如下 (event type 769/770 对应左右手的动作,以此为基准进行数据提取)
在这里插入图片描述

二、实例代码及结果分析

2.1 MATLAB代码

主函数(main):clc;clear;%% 读取数据并对数据预处理Subjects = 9;      %被试数
Fs = 250;          %采样率
windowLength = 4;  %单次采样时间
chanSelect = [8,10,12]; %通道选择c3,c4,cz
totalFlt = [4 40]; %总的滤波频段选择load rawdata1.mat
[Data_train,label_train] = preProccess(Fs,windowLength,EEG,chanSelect,totalFlt); %preProccess执行数据提取、分段、滤波处理load rawdata2.mat
[Data_test,label_test] = preProccess(Fs,windowLength,EEG,chanSelect,totalFlt);%% CSP特征提取EEGSignals.x = Data_train;
EEGSignals.y = label_train;
Y = label_train;classLabels = unique(EEGSignals.y); 
CSPMatrix = learnCSP(EEGSignals,classLabels);
nbFilterPairs = 1;
X = extractCSP(EEGSignals, CSPMatrix, nbFilterPairs); EEGSignals_test.x=Data_test;
EEGSignals_test.y=label_test;
T = extractCSP(EEGSignals_test, CSPMatrix, nbFilterPairs); save dataCSP.mat X Y Tcolor_L = [0 102 255] ./ 255;
color_R = [255, 0, 102] ./ 255;pos = find(Y==1);
plot(X(pos,1),X(pos,2),'x','Color',color_L,'LineWidth',2);hold on
pos = find(Y==2);
plot(X(pos,1),X(pos,2),'o','Color',color_R,'LineWidth',2);legend('Left Hand','Right Hand')
xlabel('C3','fontweight','bold')
ylabel('C4','fontweight','bold')
CSP算法:function CSPMatrix = learnCSP(EEGSignals,classLabels)
%
%Input:
%EEGSignals: the training EEG signals, composed of 2 classes. These signals
%are a structure such that:
%   EEGSignals.x: the EEG signals as a [Ns * Nc * Nt] Matrix where
%       Ns: number of EEG samples per trial
%       Nc: number of channels (EEG electrodes)
%       nT: number of trials
%   EEGSignals.y: a [1 * Nt] vector containing the class labels for each trial
%   EEGSignals.s: the sampling frequency (in Hz)
%
%Output:
%CSPMatrix: the learnt CSP filters (a [Nc*Nc] matrix with the filters as rows)
%
%See also: extractCSPFeatures%check and initializations
nbChannels = size(EEGSignals.x,2);
nbTrials = size(EEGSignals.x,3);
nbClasses = length(classLabels);if nbClasses ~= 2disp('ERROR! CSP can only be used for two classes');return;
endcovMatrices = cell(nbClasses,1); %the covariance matrices for each class%% Computing the normalized covariance matrices for each trial
trialCov = zeros(nbChannels,nbChannels,nbTrials);
for t=1:nbTrialsE = EEGSignals.x(:,:,t)';                       %note the transposeEE = E * E';trialCov(:,:,t) = EE ./ trace(EE);
end
clear E;
clear EE;%computing the covariance matrix for each class
for c=1:nbClasses      covMatrices{c} = mean(trialCov(:,:,EEGSignals.y == classLabels(c)),3); %EEGSignals.y==classLabels(c) returns the indeces corresponding to the class labels  
end%the total covariance matrix
covTotal = covMatrices{1} + covMatrices{2};%whitening transform of total covariance matrix
[Ut Dt] = eig(covTotal); %caution: the eigenvalues are initially in increasing order
eigenvalues = diag(Dt);
[eigenvalues egIndex] = sort(eigenvalues, 'descend');
Ut = Ut(:,egIndex);
P = diag(sqrt(1./eigenvalues)) * Ut';%transforming covariance matrix of first class using P
transformedCov1 =  P * covMatrices{1} * P';%EVD of the transformed covariance matrix
[U1 D1] = eig(transformedCov1);
eigenvalues = diag(D1);
[eigenvalues egIndex] = sort(eigenvalues, 'descend');
U1 = U1(:, egIndex);
CSPMatrix = U1' * P;

2.2 运行结果及分析

  1. CSP特征提取
    在这里插入图片描述
    在这里插入图片描述

图一,由算法代码进行预处理数据后得到的CSP特征提取结果
图二,由导入eeglab进行预处理数据后得到的CSP特征提取结果

        分析: 由上图,我们可以看出,当前CSP算法对数据进行了一定程度的特征提取,但特征之间并没有达到理想的分离程度,部分数据集中纠缠在一起。产生此结果的可能原因:(1)数据提取、预处理阶段存在不足;(2)该CSP算法自身存在缺陷(如本实例将导联关系限制在C3、C4、CZ三个通道,与其他通道导联的相关性难以体现)。针对可能原因1,我将数据导入eeglab,用eeglab自身的预处理功能,对数据进行预处理操作,再应用CSP算法进行特征提取,但实验结果同样不理想,如图二所示。于是,猜想出现不理想结果可能更多的是原因2造成的,接下来,我将尝试应用不同的方法,对特征进行提取。

  1. AdaBoost集成分类
    在这里插入图片描述

        分析: 从CSP提取的特征中,选择144个数据点组成训练集,进行30次迭代集成分类,由图可以看出,随着迭代次数的增加,训练错误率在降低,即分类准确率在提高。尽管如此,分类的错误率仍超过30%,结果并不理想,也在侧面说明,CSP算法存在问题,有进一步改进的空间。

三、问题与反思

  • 数据预处理的实际应用能力较弱。例如,在对数据进行分段提取,标签定义,以及应用IIR 滤波,ICA眼电信号去除进行数据预处理的过程中,由于对数组的理解不够准确,时常报错;
  • CSP特征提取算法掌握不足,实际应用中,对代码的理解尚浅薄,不能灵活应用和变通;
  • 反思:理论知识结合到实际应用中的能力有待加强,接下来,会尝试采用不同的算法实现脑电信号的分类任务,进一步在实践中,加深对算法的理解、掌握。

四、下一阶段计划

  • 实例结果的分析表明,当前CSP算法进行特征提取的效果不够理想,有进一步改进的空间,下一阶段计划将围绕这个主题展开。
  • 任务一:尝试采用不同的算法,对特征进行提取,以期得到更好的实验结果。
  • 任务二:脑机接口理论知识储备不足,尝试系统性学习相关知识。
  • 任务三:加强相关算法的学习与应用(分类算法掌握尚浅)。

本文源码:
链接:https://pan.baidu.com/s/1TzEskR1vP4TMx64aTOHRBg (百度网盘)
提取码:muda

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36820.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能在生物信号领域的应用——脑机接口

4月1日愚人节,雾帜智能发了一篇文章,内容是关于“雾帜智能成功完成基于脑机接口技术的梦境捕捉与还原技术的概念验证,并发布了一款新的人工智能产品:智能睡枕HoneyPillow‍。该产品将一举解决你我所有关于做梦的系列问题。”但是呢…

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五)

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五) 概述通道选择模型通道选择LightGBM模块代码LightGBM模型训练 概述 由于癫痫发作时不是整个大脑区域都有相关的反映,因此 EEG 信号在不同的 EEG 通道上有着不同的表现形式。癫痫发作时…

《脑机接口导论》学习笔记 3.记录大脑的信号和刺激大脑

本章,我们将对大脑中神经元电信号的记录与对神经元进行刺激的技术手段进行了解,并分析各项技术的优劣性与适用性,从而探究这些技术用于BCI输入信号的获取以及通过此类技术使BCI达成交互的可行性。 目录 3.记录大脑的信号和刺激大脑 3.1 记…

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(二)

主要内容 1、数据提取2、制作数据样本-数据分快3、过程展示 1、数据提取 本次教程以chb01患者的数据为例: 首先提取该患者的eeg数据: 在数据提取中就完成滤波:(0~50Hz) from mne import Epochs, pick_types, events_…

脑机接口信号基本操作回顾

2023/1/2 -1/3脑机接口学习内容一览: 这一篇博客主要是对自己这几个星期学习脑机接口基本操作情况的总结,对刚进入这个领域、感觉有些迷茫的同学来说可能会有一定的参考价值。 这项工作主要考验自己对脑电信号基本处理流程的熟悉程度,在写代码…

《考试脑科学》

给大家推荐《考试脑科学》这本书。 作者介绍:池谷裕二,日本东京大学药学系研究科教授,脑科学研究者。1970年生于日本静冈县,1998年取得日本东京大学药学博士学位,2002年起担任美国哥伦比亚大学客座研究员。专业为神经…

正经聊一聊脑机接口的发展现状|脑科学开放日

杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 众所周知,睡眠是维持生命的必需品。 先前的研究已经表明,睡眠不足会导致许多严重的疾病,比如…… 好,不要说了。 srds(虽然但是),说了那么多次&a…

017利用颅内和头皮脑电图进行癫痫预测的卷积神经网络2018

Convolutional neural networks for seizure prediction using intracranial and scalp electroencephalogram ABSTRACT 癫痫发作预测作为改善耐药癫痫和强直性癫痫患者生活的最具挑战性的预测数据分析工作之一,越来越受到关注。许多杰出的研究报告了在提供合理的间…

003基于神经网络的癫痫脑电信号检测与分类

Neural Network Based Epileptic EEG Detection and Classification ABSTRACT 及时诊断对挽救癫痫患者的生命至关重要。在过去的几年里,有很多治疗癫痫的方法。这些治疗需要使用抗癫痫药物,但对控制癫痫发作频率无效。需要通过手术切除受影响的区域。 …

脑机接口科普0010——研究脑机接口的大学和机构

本文禁止转载!!!! 之前脑机接口科普0003——Hans Berger_sgmcy的博客-CSDN博客介绍了,德国的精神病学教授,Hans Berger ,在耶拿大学工作研究记录了EEG脑电图。 本文就介绍一下,目前…

chatgpt赋能python:Python如何屏蔽鼠标输入

Python如何屏蔽鼠标输入 介绍 在进行Python编程时,我们经常需要在程序中进行键盘输入操作,但是有些情况下需要屏蔽鼠标输入,以避免产生干扰。本文将介绍Python如何屏蔽鼠标输入的方法。 屏蔽鼠标输入的方法 Python提供了多种方法屏蔽鼠标…

某211本科程序员:我才不想去大厂!我当外包18k,大厂才22k,面试难,绩效费心血,外包混混不爽吗?

现在的年轻人都摆烂到什么程度了呢? 一位211本科毕业的前端程序员发帖称“自己对大厂毫无感觉”“不想去大厂”,因为找工作时外包18k,大厂才22k,面试难太多,还有绩效费心血,在外包混混不爽吗? …

如何使用multipart/form-data格式上传文件

------------------------------------------------------------------大家好,我是许飞,微软拼音的开发实习生。在网络编程中,经常用到从服务器上“下载”一些数据,有时却要向服务器“上传”数据。曾在一个原型中使用了“multipart/form-data”格式向Web服务器上传文件,这…

http post 使用multipart/form-data 格式数据 上传文件(图片)

由于工作上的需求,这两天对接了个php的接口,上传文件必须使用固定格式,下面看下需要上传的格式,从图片中可以看出,多个图片数据是使用boundary分割的,并且在每个数据体内(即从分割符到下一个分割…

一文搞懂如何利用multipart/form-data实现文件的上传与下载

1. Form简介 **Form**(中文译为表单)[1],是HTML标记语言中的重要语法元素。一个Form不仅包含正常的文本内容、标记等,还包含被称为控件的特殊元素。用户通常通过修改控件(比如:输入文本、选择菜单项等)来“完成”表单&…

多文件上传、单文件上传、图片上传(支持word、pdf、excel、.jpg、txt等文件上传)

1. 图片上传 >>>>>>>>>>>>>>>>>>>> 效果图 >>>>>>>>>>>>>>>>>>>> js 实现 <!doctype html> <html lang"en"><head>…

我为什么放弃了 LangChain?

如果你关注了过去几个月中人工智能的爆炸式发展&#xff0c;那你大概率听说过 LangChain。 简单来说&#xff0c;LangChain 是一个 Python 和 JavaScript 库&#xff0c;由 Harrison Chase 开发&#xff0c;用于连接 OpenAI 的 GPT API&#xff08;后续已扩展到更多模型&#x…

chatgpt赋能python:Python小动画代码——给你的网站增加生动趣味!

Python小动画代码 —— 给你的网站增加生动趣味&#xff01; Python作为一种高级编程语言&#xff0c;在数据分析、机器学习、Web开发等领域应用广泛。不过&#xff0c;你可能不知道Python还可以用来编写小动画。今天&#xff0c;我们将通过一些示例介绍Python小动画代码&…

Forefront GPT-4免费版:开启无限畅聊时代,乐享人工智能快感,无限制“白嫖”,还能和N多角色一起聊天?赶紧注册,再过些时间估计就要收费了

目录 前言注册登录方式应用体验聊天体验绘图体验 “是打算先免费后收费吗&#xff1f;”建议其它资料下载 前言 近期&#xff0c;人工智能技术迎来重大飞跃&#xff0c;OpenAI的ChatGPT等工具成为全球数亿人探索提高生产力和增强创造力的新方法。人们现在可以使用人工智能驱动…

英语c开头语言,61句C开头的英语谚语带翻译

1、Call a spade a spade. 据实而言。 2、Call me not olive till thou see me gathered. 盖棺论定。 3、Call no man happy until he dies. 盖棺才能定论。 4、Can the leopard change his spots? 江山易改,本性难移。 5、Care and diligence bring luck. 谨慎和勤奋,带来好…