matlab csp共空间代码,运动想象中共空间模式算法(CSP)的实现

最近在研究运动想象算法,其中CSP来提取特征用的比较多,尤为是在二分类的问题中,以前写过一篇如何在MNE库中实现CSP算法的博客,用的是MNE库中已经写好的算法,如今想本身实现该算法,研究了几天发现坑仍是比较多的。。。先列出一些参考的博客文章,里面有对应的算法在matlab中的实现,后面主要是解释算法中的一些细节以及本身对该算法的理解。强烈建议下载本博客的资源包对照着看,里面是整理好的博客中用到的资料。html

CSP原理:算法

CSP在Python MNE库中的实现编程

matlab代码实现:函数

上面既然都有实现好的版本了,本着拿来主义的思想原本不打算本身开发的,可是考虑到后面须要支持多种编程语言的实现,以及验证算法的准确性,我在python中也实现了一遍,并尝试理解每一条语句的意义,及其对应的原理。不弄不知道啊,一弄发现了不少有趣的细节。3d

一句话总结CSP算法:共空间模式算法的基本原理是利用矩阵的对角化。找到一组最优空间滤波器进行投影,使两类信号的方差差别化最大,从而获得具备较高区分度的特征向量。

上面所说的特征向量也就至关于滤波器,输入数据通过和特征向量的运算就会获得最大差别化方差的信号,这个信号我理解为是“原始波形”,测量结果=原始波形 * 电极位置,这一点在后面会详细解释。

算法的实现原理在前面的博客中都有所介绍,但愿你们能对照着看,公式的推导这里就再也不赘述,下面主要说一下对应的代码实现中遇到的问题。

问题1 求协方差矩阵

全部的资料第一步都是求对应数据的协方差矩阵,其对应的计算公式为

d69fb14c2c761d014afaeafe6b50f3ca.png

不知道你们有没有注意到这根本不是协方差矩阵的标准形式,协方差矩阵的计算方法见:https://blog.csdn.net/Mr_HHH/article/details/78490576。协方差的计算应该是去均值后的数据,而且是对列的运算,矩阵X的协方差计算公式为:

355b9a038bf31c138568b1d3e1329325.png

那为何在这里会这么计算呢?对行计算这个问题好解释,由于脑波数据通常都是按行存储的,这就是转置的问题。但是为何它不用减去均值,而且也没有求平均。这个问题困扰了我很久,最后在一篇文献中找到了想要的答案。

《Designing optimal spatial filters for single-trial EEG classification in a movement task》文章的796页有以下两段话。

第一段话主要的意思是说,EEG数据是滤波后的,均值为零,看到这恍然大悟,滤波后的数据没有直频份量,均值那可不就是零么,那也就不用减均值了。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值