当前位置: 首页 > news >正文

信号处理--基于FBCSP滤波方法的运动想象分类

目录

理论

工具

方法

代码获取


理论

通用空间模式 (CSP) 算法可以用来有效构建最佳空间滤波器区分,然后实现运动想象的数据中的脑电信号的区分。然而,空间滤波器性能的好坏主要取决于其工作频带。如果脑电信号没有经过滤波或者滤波的频带范围不合适,都会导致经过CSP空间滤波器提取的特征,在后续分类任务中,有一个比较差的表现。因此,在使用CSP算法时候,我们常常需要选择一个比较大的信号频带或者是根据被试挑选一个比较好的频带的频带范围。这个导致了阻碍了CSP方法的广泛应用。为了解决这样的问题,滤波器组CSP分类算法被提出来。滤波器组 filter-bank CSP 分类算法 (FBCSP), 实现共分为4步:将脑电信号划分为若干个频带的子信号;
分别提取不同频带的信号的CSP特征;
使用特征筛选算法,得到相对优化的频带CSP特征组;
使用分类模型实现脑电信号的分类。

工具

python 3.8

BCI dataset IV-1 数据集

方法

定义滤波器组,实现信号的频带分解

#acquire and combine features of different fequency bands
features_train=[]
features_test=[]
freq=[8,12,16,20,24,28,32]
for freq_count in range(len(freq)):
#loop for freqencylower=freq[freq_count]if lower==freq[-1]:breakhigher=freq[freq_count+1]X_train_filt=butter_bandpass_filter(X_train,lowcut=lower,highcut=higher,fs=128,order=8)X_test_filt=butter_bandpass_filter(X_test,lowcut=lower,highcut=higher,fs=128,order=8)tmp_train=csp.fit_transform(X_train_filt,y_train)tmp_test=csp.transform(X_test_filt)if freq_count==0:features_train=tmp_trainfeatures_test=tmp_testelse:features_train=np.concatenate((features_train,tmp_train),axis=1)features_test=np.concatenate((features_test,tmp_test),axis=1)

 使用MIBIF算法实现提取的特征的选择

select_K=sklearn.feature_selection.SelectKBest(mutual_info_classif,k=10).fit(features_train,y_train)
New_train=select_K.transform(features_train)
#np.random.shuffle(New_train)
New_test=select_K.transform(features_test)
#np.random.shuffle(New_test)
print(New_train.shape)
print(New_test.shape)
ss = preprocessing.StandardScaler()
X_select_train = ss.fit_transform(New_train,y_train)
X_select_test = ss.fit_transform(New_test)

 使用支持向量机实现最后的分类和测试

#calssify
from sklearn.svm import SVC
clf=svm.SVC(C=0.8,kernel='rbf')
clf.fit(X_select_train,y_train)
y_pred=clf.predict(X_select_test)
print(y_test)
print(y_pred)
acc=accuracy_score(y_test,y_pred)
print(acc)

使用不同的特征提取算法和分类器在同一个数据集上面的性能比较结果:

在5个不同被试上面采用不同的CSP及变体方法的结果比较:

代码获取

后台私信,注明文章名称;

相关项目和代码开发,欢迎沟通交流。

相关文章:

  • 4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)
  • vue+Echarts实现多设备状态甘特图
  • canvas画带透明度的直线和涂鸦
  • MySQL学习笔记------DCL
  • C++实现FFmpeg音视频实时拉流并播放
  • 如何在服务器上传/下载文件
  • 【Postman如何进行接口测试简单详细操作实例】
  • Java:反射 reflection ( 概念+相关类+使用方法)
  • main.py(二)
  • [深度学习] 常见名称概念
  • 构建Pytorch虚拟环境教程
  • <chrono>, clock_gettime(), gettimeofday()对比
  • 8.1.3-1微课-网络安全渗透测试工具-操作演示
  • 第六届蓝桥杯大赛软件赛省赛Java 大学C组题解
  • 20240319-图论
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【笔记】你不知道的JS读书笔记——Promise
  • ES6系列(二)变量的解构赋值
  • happypack两次报错的问题
  • java8-模拟hadoop
  • Java多线程(4):使用线程池执行定时任务
  • Js基础知识(一) - 变量
  • js如何打印object对象
  • Solarized Scheme
  • yii2中session跨域名的问题
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 收藏好这篇,别再只说“数据劫持”了
  • 通信类
  • 追踪解析 FutureTask 源码
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ![CDATA[ ]] 是什么东东
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ZT)出版业改革:该死的死,该生的生
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (十)c52学习之旅-定时器实验
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)http-server应用
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • ******之网络***——物理***
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .bat批处理(一):@echo off
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core 版本不支持的问题
  • .net Signalr 使用笔记
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net 设置默认首页
  • .NET 使用配置文件
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • /etc/sudoers (root权限管理)