diff --git a/readEciton.m b/readEciton.m new file mode 100644 index 0000000..205a4ca --- /dev/null +++ b/readEciton.m @@ -0,0 +1,55 @@ +close all +clear variables +%params +disp('start') +disp(datestr(datetime('now'))) +windowEMG=0.2; +windowEEG=1; +shift=0.2; +k=10; +maxExpC=5; +maxFile=5; +threshold=7500; +pburgOrder=32; +minEEGFreq=0; %Hz +maxEEGFreq=200; %Hz + + +trainingDataEEGcell=cell(maxFile,1); +trainingDataEMGcell=cell(maxFile,1); +classesCell=cell(maxFile,1); + +parfor i=1:maxFile + [sig, stat, params] = load_bcidat(sprintf('/nfs/wsi/ti/messor/hohlochj/Block1_ReachingMovements/AO/AO_B1001/AO_B1S001R0%i.dat',i)); + [trainingDataEEGcell{i},trainingDataEMGcell{i}]=generateTrainingData(sig,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq); + classesCell{i}=stat.StimulusCode; + fprintf('%ith file processed\n',i) +end + +clear sig + +trainingDataEEG=cell2mat(trainingDataEEGcell); +trainingDataEMG=cell2mat(trainingDataEMGcell); +classesMat=cell2mat(classesCell); +clear trainingDataEEGcell trainingDataEMGcell classesCell + +classificationWithPause=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classesMat,shift,params.SamplingRate.NumericValue,threshold); +clear classesMat + +smoothClassification=zeros(size(classificationWithPause)); +for i=1:size(classificationWithPause,1) + smoothClassification(i)=round(mode(classificationWithPause(max(i-2,1):min(i+2,end)))); +end + +clear classificationWithPause + +trainingDataEEG=trainingDataEEG(smoothClassification~=-1,:,:); +trainingDataEMG=trainingDataEMG(smoothClassification~=-1,:); +classification=smoothClassification(smoothClassification~=-1); + +clear smoothClassification i +save /nfs/wsi/ti/messor/hohlochj/matlabData/AO1200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat + + +disp('end') +disp(datestr(datetime('now'))) diff --git a/svmEciton.m b/svmEciton.m new file mode 100644 index 0000000..3dfd146 --- /dev/null +++ b/svmEciton.m @@ -0,0 +1,44 @@ +close all +clear variables +clc + +load('/nfs/wsi/ti/messor/hohlochj/matlabData/AO1200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat'); + +%k=2; +%maxExpC=0; % c\in {2^i|i=-maxExpC:1:maxExpC} + +%choose to estimate based on EEG or EMG +trainingData=trainingDataEEG; +clear trainingDataEEG; +clear trainingDataEMG; + +accurancy=zeros(k,3); +maxC=zeros(k,1); +noClasses=size(unique(classification),1); +cm=zeros(noClasses); +randMap=randperm(size(trainingData,1)); +disp('startCV') +parfor i=1:k + leaveOut=trainingData(mod(randMap,k)==i-1,:,:); + leaveClasses=classification(mod(randMap,k)==i-1); + remaining=trainingData(mod(randMap,k)~=i-1,:,:); + remainingClasses=classification(mod(randMap,k)~=i-1); + disp(datestr(datetime('now'))) + fprintf('create %ith model\n',i) + [model,maxC(i)]=kfoldCV(remainingClasses,remaining,k,maxExpC,1000); + disp(datestr(datetime('now'))) + + [predictions,accurancy(i,:),pvalues]=svmpredict(leaveClasses,leaveOut(:,:),model); + cm=cm+confusionmat(leaveClasses,predictions); %confusion matrix + %cf: for each cue what was the prediction (maybe colourCoded) +end +meanAccurancy=mean(accurancy(:,1)) + +fig=figure; +cmScaled=zeros(size(cm)); +for i=1:size(cm,1) + cmScaled(i,:)=cm(i,:)/sum(cm(i,:)); +end +imagesc(cmScaled) +colorbar(); +saveas(fig,'/nfs/wsi/ti/messor/hohlochj/plots/cmEMG200ms1sPause.fig','fig');