信号处理--基于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 freqency
    lower=freq[freq_count]
    if lower==freq[-1]:
        break
    higher=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_train
        features_test=tmp_test
    else:
        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及变体方法的结果比较:

代码获取

信号处理-基于FBCSP滤波方法的运动想象分类 python代码icon-default.png?t=N7T8https://download.csdn.net/download/YINTENAXIONGNAIER/89021756

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理 微程序控制器组成实验

一、实验目的 1.掌握时序产生器的组成原理。 2.掌握微程序控制器的组成原理。 3.掌握微指令格式的化简和归并。 二、实验任务 1、按实验要求连接实验台的数码开关K0-K5、按钮开关、时钟信号源和微程序控制器。注意:本次试验只做微程序控制器本身的实验&#xf…

安科瑞ANET智能物联网网关 通信管理机-安科瑞 蒋静

概述 本系列智能通信管理机是一款采用嵌入式硬件计算机平台,具有多个下行通信接口及一个或者多个上行网络接口,用于将一个目标区域内所有的智能监控/ 保护装置的通信数据整理汇总后,实时上传主站系统,完成遥信、遥测等能源数据采集…

基于Java+Spring Boot+MySQL的二手手机管理系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

【项目自我反思之vue的组件通信】

为什么子组件不能通过props实时接收父组件修改后动态变化的值 一、现象二、可能的原因1.响应式系统的限制2.异步更新队列3.父组件和子组件的生命周期4.子组件内部对 props 的处理 三、组件通信的几种场景(解决方案)1.子组件想修改父组件的数据2.子组件传…

Rust GUI学习 小部件系列(一):如何在iced窗口中使用颜色选择器colorpicker

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 前言: 本系列是iced的小部件应用介绍系列,主要介绍iced、iced_aw两个库中涉及的各种小部件的使用及实例演示。 本文所介绍的是co…

Redis入门到入坑(一)

Redis入门到入坑(一) Redis缓存入门简介Redis初始操作Redis数据存储操作 Redis常用数据类型简介String类型操作实践Hash类型应用实践List类型应用实践Set类型应用实践 Java中操作redis准备工作Jedis的应用快速入门实现RedisTemplate应用项目工程实践 Red…

嵌入式安全性基础知识-计算机系统安全知识+信息安全基础+网络安全协议-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记,未经本人许可,请勿转载,如发现本笔记内容的错误还望各位不吝赐教(笔记内容可能有误怕产生错误引导)。 本章的主要内容见下图: 1、计算机系统系统…

设计模式——2_6 观察者(Observer)

这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音 ——马良《坦白书》 文章目录 定义图纸一个例子:在RPG游戏里应对善变的天气定义元素Area & Weather 给 Area 和…

Linux--Ubuntu安装【保姆级教程】

Linux操作系统时程序员必须要学的操作系统。接下来我们就来看一下Linux操作系统是如何安装的 我们在 Vmware 虚拟机中安装 linux 系统,所以需要先安装 vmware 软件,然后再 安装 Linux 系统。 一.所需安装文件: Vmware 下载地址(现在最新版的…

蓝桥刷题--N皇后和最近公共祖先

1.N皇后 #include<iostream> using namespace std;const int N 12; int vis[N][N], n, ans;void dfs(int dep) {// 在这个搜索中dep表示行&#xff0c;i表示列// 1 搜索出口if(dep n 1){ans;return;}// 2 继续搜索for(int i 1; i < n; i){// 2.1 排除非法情况if(v…

SQL-Labs靶场“34-35”关通关教程

君衍. 一、34关 POST单引号宽字节注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 二、35关 GET数字型报错注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入第一课 SQL注入思路基础 SQL无列…

TWT:一个让WiFi6更省电的特性

更多精彩内容在公众号。 再wifi6前&#xff0c;已经有了不少节能特性&#xff1a;PSM,PSMP,APSD。在一个 Beacon 周期内&#xff0c;终端 会观察 AP 是否会向其发送数据&#xff0c;如果是&#xff0c;那么终端就保持等待&#xff0c;直到接收完成后&#xff0c; 才会进入休眠模…

【C语言】动态内存分配

1、为什么要有动态内存分配 不管是C还是C中都会大量的使用&#xff0c;使用C/C实现数据结构的时候&#xff0c;也会使用动态内存管理。 我们已经掌握的内存开辟方式有&#xff1a; int val 20; //在栈空间上开辟四个字节 char arr[10] { 0 }; //在栈空间…

Yocto学习笔记1-下载与首次编译

Yocto学习笔记1-下载与首次编译 1、基础环境介绍2、注意点3、安装依赖3.1 yocto常规系统构建所需依赖库&#xff08;较全&#xff09;3.2 龙芯适配时的最小依赖库&#xff08;最小&#xff09; 4、下载4.1 通过git克隆4.2 查看所有远程分支4.3 签出一个长期支持的稳定版本4.4 查…

leetcode 15.三数之和 JAVA 双指针法

题目 思路 双指针法 去重 为啥要去重呢&#xff1f;因为题目中说了要返回不重复的三元组。拿示例1来看&#xff0c;&#xff08;-1&#xff0c;0&#xff0c;1&#xff09;和&#xff08;0&#xff0c;1&#xff0c;-1&#xff09;虽然都等于0&#xff0c;但其实它们里面的数…

【python_往企业微信群中发送文件】

python_往企业微信群中发送文件 这个是用企业微信群机器人的功能&#xff0c;没有用到后台应用。群机器人 #-*- coding:utf-8-* import requests#类型&#xff1a;voice,file file_type"file" file_path"D:\desktop\不过.jpg" webhookkey"xxxx"#…

ShuffleNet模型详解

ShuffleNet论文地址&#xff1a;1707.01083.pdf (arxiv.org) ShuffleNetv2论文地址&#xff1a;1807.11164.pdf (arxiv.org) ShuffleNetv1 简介 ShuffleNet 是专门为计算能力非常有限的移动设备设计的。架构采用了逐点分组卷积和通道shuffle两种新的运算&#xff0c;在保持…

【异或】Leetcode 136. 只出现一次的数字

【异或】Leetcode 136. 只出现一次的数字 解法1 只需要全部异或一下&#xff0c;剩下的就是剩下的元素 ---------------&#x1f388;&#x1f388;题目链接 136. 只出现一次的数字&#x1f388;&#x1f388;------------------- 解法1 只需要全部异或一下&#xff0c;剩下的…

Fast-R-CNN论文笔记

目标检测之Fast R-CNN论文精讲&#xff0c;Fast RCNN_哔哩哔哩_bilibili 一 引言 1.1 R-CNN和SPPNet缺点 &#x1f600;R-CNN Training is a multi-stage pipeline 多阶段检测器&#xff08;两阶段和一阶段检测器&#xff09; 1️⃣首先训练了一个cnn用来提取候选区域的特征…

深入浅出Reactor和Proactor模式

Reactor模式和Proactor模式是两种常见的设计模式&#xff0c;用于处理事件驱动的并发编程。它们在处理IO操作时有着不同的工作方式和特点。 对于到来的IO事件&#xff08;或是其他的信号/定时事件&#xff09;&#xff0c;又有两种事件处理模式&#xff1a; Reactor模式&…
最新文章