专栏首页脑机接口特征提取算法 | 共空间模式 Common Spatial Pattern(CSP)

特征提取算法 | 共空间模式 Common Spatial Pattern(CSP)


Matlab案例
clc;
clear;
EEGSignals = load('graz_data/CSP_train.mat');   % 加载带通滤波后的脑电数据
%check and initializations
EEG_Channels = size(EEGSignals.x_train,2);
EEG_Trials = size(EEGSignals.x_train,3);
classLabels = unique(EEGSignals.y_train);% Return non-repeating values
EEG_Classes = length(classLabels);
covMatrix = cell(EEG_Classes,1); % 协方差矩阵
% Computing the normalized covariance matrices for each trial
trialCov = zeros(EEG_Channels,EEG_Channels,EEG_Trials);
for i = 1:EEG_Trials
    E = EEGSignals.x_train(:,:,i)';
    EE = E*E';
    trialCov(:,:,i) = EE./trace(EE);  % 计算协方差矩阵
end
clear E;
clear EE;
% 计算每一类样本数据的空间协方差之和
for i = 1:EEG_Classes
    covMatrix{i} = mean(trialCov(:,:,EEGSignals.y_train == classLabels(i)),3);
end
% 计算两类数据的空间协方差之和
covTotal = covMatrix{1} + covMatrix{2};
% 计算特征向量和特征矩阵
[Uc,Dt] = eig(covTotal);
% 特征值要降序排列
eigenvalues = diag(Dt);
[eigenvalues,egIndex] = sort(eigenvalues, 'descend');% 降序
Ut = Uc(:,egIndex);
% 矩阵白化
P = diag(sqrt(1./eigenvalues))*Ut';
% 矩阵P作用求公共特征向量transformedCov1 
transformedCov1 = P*covMatrix{1}*P';
%计算公共特征向量transformedCov1的特征向量和特征矩阵
[U1,D1] = eig(transformedCov1);
eigenvalues = diag(D1);
[eigenvalues,egIndex] = sort(eigenvalues, 'descend');% 降序排列
U1 = U1(:, egIndex);
% 计算投影矩阵W
CSPMatrix = U1' * P;
% 计算特征矩阵
FilterPairs = 2;       % CSP特征选择参数m    CSP特征为2*m个
features_train = zeros(EEG_Trials, 2*FilterPairs+1);
features_test = zeros(EEG_Trials, 2*FilterPairs+1);
Filter = CSPMatrix([1:FilterPairs (end-FilterPairs+1):end],:);
%extracting the CSP features from each trial
for t=1:EEG_Trials    
    %projecting the data onto the CSP filters    
    projectedTrial_train = Filter * EEGSignals.x_train(:,:,t)';    
    projectedTrial_test = Filter * EEGSignals.x_test(:,:,t)';
    %generating the features as the log variance of the projected signals
    variances_train = var(projectedTrial_train,0,2);  
    variances_test = var(projectedTrial_test,0,2);
    for f=1:length(variances_train)
        features_train(t,f) = log(variances_train(f));
        % features_train(t,f) = log(variances_train(f)/sum(variances_train));   %修改后对应公式
    end
    for f=1:length(variances_test)
        features_test(t,f) = log(variances_test(f));
        %features_test(t,f) = log(variances_test(f)/sum(variances_test));  % 修改后对应公式
    end
end
CSP_Train_feature = features_train(:,1:4);
CSP_Test_feature = features_test(:,1:4);
save('CSP_feature.mat','CSP_Train_feature','CSP_Test_feature');
代码来源于网络

*凡来源非注明"原创"的所有作品,均为转载,其目的在于促进信息分享交流,不做商业用途。若有侵权,请及时通知后台,管理人员删侵。

本文分享自微信公众号 - 脑机接口社区(Brain_Computer),作者:Rose

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python-EEG工具库MNE中文教程(6)-读取.set文件和.locs文件

    .set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等。

    脑机接口社区
  • 论文周报 | 第9期

    Real-time Neuroimaging and Cognitive Monitoring

    脑机接口社区
  • EEG信号特征提取算法

    EEG信号特征提取就是以脑电信号作为源信号,确定各种参数并以此为向量组成表征信号特征的特征向量。

    脑机接口社区
  • Python判断一个变量是否存在

    但是也可以通过调用系统的内置函数来判断一个变量名是否已经被定义了。有3个内置函数都可以实现。

    py3study
  • 一个基于Node.js的本地快速测试服务器

    第一个参数为post地址,第二个参数为端口号,将会把读取的JSON数据输出在控制台,并写入文件中,文件路径为 ./log/data.json

    mySoul
  • Python-EEG工具库MNE中文教程(6)-读取.set文件和.locs文件

    .set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等。

    脑机接口社区
  • 经典综述|EEG源空间功能连接—致力于实现时-空间上高分辨率脑网络分析

    一、写在前面 这是2018年发布于信号处理领域权威顶级杂志《IEEE Signal Processing Magazine》上的一篇综述文章,该文章对于如何进行...

    悦影科技
  • EEG源连通性:旨在实现大脑网络在时间和空间上的高分辨率

    人脑是一个大规模的网络,其功能依赖于空间分布区域之间的动态相互作用。在快速发展的网络神经科学领域,有两个尚未解决但有望取得突破的挑战。首先,应该使用非侵入性和易...

    用户1279583
  • 波兰表达式

    mathor
  • BCI-EEG脑电数据处理

    EEG信号特征提取就是以脑电信号作为源信号,确定各种参数并以此为向量组成表征信号特征的特征向量。

    MiChong

扫码关注云+社区

领取腾讯云代金券