資源簡介
CSP 用于處理EEG信號數(shù)據(jù) 特征提取算法

代碼片段和文件信息
function?CSPMatrix?=?learnCSP(EEGSignals)
%
%?
%?????Copyright?(C)?2010??Fabien?LOTTE
%?
%?????This?program?is?free?software:?you?can?redistribute?it?and/or?modify
%?????it?under?the?terms?of?the?GNU?General?Public?License?as?published?by
%?????the?Free?Software?Foundation?either?version?3?of?the?License?or
%?????(at?your?option)?any?later?version.
%?
%?????This?program?is?distributed?in?the?hope?that?it?will?be?useful
%?????but?WITHOUT?ANY?WARRANTY;?without?even?the?implied?warranty?of
%?????MERCHANTABILITY?or?FITNESS?FOR?A?PARTICULAR?PURPOSE.??See?the
%?????GNU?General?Public?License?for?more?details.
%?
%?????You?should?have?received?a?copy?of?the?GNU?General?Public?License
%?????along?with?this?program.??If?not?see? .
%
%this?function?learns?the?CSP?(Common?Spatial?Patterns)?filters?to
%discriminate?two?mental?states?in?EEG?signals
%
%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)
%
%by?Fabien?LOTTE?(fprlotte@i2r.a-star.edu.sg)
%created:?02/03/2010
%last?revised:?02/03/2010
%
%See?also:?extractCSPFeatures
%check?and?initializations
nbChannels?=?size(EEGSignals.x2);
nbTrials?=?size(EEGSignals.x3);
classLabels?=?unique(EEGSignals.y);
nbClasses?=?length(classLabels);
if?nbClasses?~=?2
????disp(‘ERROR!?CSP?can?only?be?used?for?two?classes‘);
????return;
end
covMatrices?=?cell(nbClasses1);?%the?covariance?matrices?for?each?class
%computing?the?normalized?covariance?matrices?for?each?trial
trialCov?=?zeros(nbChannelsnbChannelsnbTrials);
for?t=1:nbTrials
????E?=?EEGSignals.x(::t)‘;
????EE?=?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);??
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(:?egIn
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3027??2010-10-28?17:26??CSP\learnCSP.m
?????文件???????2845??2010-10-28?17:26??CSP\learnCSPLagrangian.m
?????目錄??????????0??2011-07-08?17:22??CSP
-----------?---------??----------?-----??----
?????????????????5872????????????????????3
評論
共有 條評論