diff --git a/classifyAccordingToEMG.m b/classifyAccordingToEMG.m index 79cdd2e..3acc515 100644 --- a/classifyAccordingToEMG.m +++ b/classifyAccordingToEMG.m @@ -1,15 +1,25 @@ function [classification]=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG, classes,shift,frequency,threshold) +% classifyAccordingToEMG data classified as -1 should be taken out classification=zeros([size(trainingDataEEG,1),1]); oldclass=0; for i=1:size(trainingDataEEG,1) if mean(trainingDataEMG(i,:)) > threshold % is movement class=mode(classes(max(round(shift*frequency*i-frequency),1):min(round(i*shift*frequency-1),end))); if class <= 5 % task is to move - classification(i)=class; - oldclass=class; + if oldclass==0 + for j=max(fix(i-1/shift),1):fix(i-0.5/shift) % Pause before beginning of movement + classification(j)=-1; %code for pause + end + for j=max(fix(i-0.5/shift),1):i % half a second before executed movement there should be activity (esp. EEG) + classification(j)=class; + end + oldclass=class; + end else % task is to rest but movement not finished classification(i)=oldclass; end + else + oldclass=0; end end end \ No newline at end of file diff --git a/kfoldCV.m b/kfoldCV.m index 8a4587a..2aebb22 100644 --- a/kfoldCV.m +++ b/kfoldCV.m @@ -1,4 +1,4 @@ -function [model] = kfoldCV(classification,trainingData,k,cExpMax) +function [model,maxC] = kfoldCV(classification,trainingData,k,cExpMax) noClasses=size(unique(classification),1); cvAccurancy=zeros(2*cExpMax+1,1); parfor cExp=1:2*cExpMax+1 diff --git a/read.m b/read.m index 4f291bc..0d915ec 100644 --- a/read.m +++ b/read.m @@ -1,9 +1,11 @@ %params +disp('start') +disp(datestr(datetime('now'))) NFFT=2048; window=0.2; shift=0.2; k=10; -maxExpC=7; +maxExpC=5; maxFile=5; threshold=7500; @@ -18,13 +20,30 @@ fprintf('%ith file processed\n',i) end +clear sig + trainingDataEEG=cell2mat(trainingDataEEGcell); trainingDataEMG=cell2mat(trainingDataEMGcell); -classes=cell2mat(classesCell); +classesMat=cell2mat(classesCell); +clear trainingDataEEGcell trainingDataEMGcell classesCell -classification=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classes,shift,params.SamplingRate.NumericValue,threshold); +classificationWithPause=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classesMat,shift,params.SamplingRate.NumericValue,threshold); +clear classesMat -smoothClassification=zeros(size(classification)); -for i=1:size(classification,1) - smoothClassification(i)=round(mean(classification(max(i-round(1/window),1):min(i+round(1/window),end)))); -end \ No newline at end of file +smoothClassification=zeros(size(classificationWithPause)); +for i=1:size(classificationWithPause,1) + smoothClassification(i)=round(mean(classificationWithPause(max(i-round(1/window),1):min(i+round(1/window),end)))); +end + +clear classificationWithPause + +trainingDataEEG=trainingDataEEG(smoothClassification~=-1,:,:); +trainingDataEMG=trainingDataEMG(smoothClassification~=-1,:); +classification=smoothClassification(smoothClassification~=-1); + +clear smoothClassification i +save /home/jph/Uni/masterarbeit/data/AO1200msWindow50msShift.mat + + +disp('end') +disp(datestr(datetime('now'))) \ No newline at end of file diff --git a/svm.m b/svm.m index f298ba0..27c3fe8 100644 --- a/svm.m +++ b/svm.m @@ -14,11 +14,12 @@ maxExpC=5; % c\in {2^i|i=-maxExpC:1:maxExpC} %choose to estimate based on EEG or EMG -trainingData=trainingDataEMG; +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)); @@ -30,12 +31,11 @@ remainingClasses=classification(mod(randMap,k)~=i-1); disp(datestr(datetime('now'))) fprintf('create %ith model\n',i) - model=kfoldCV(remainingClasses,remaining,k,maxExpC); - + [model,maxC(i)]=kfoldCV(remainingClasses,remaining,k,maxExpC); 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) - %fprintf('%ith step done\n',i) end meanAccurancy=mean(accurancy(:,1)) \ No newline at end of file diff --git a/text/collection.txt b/text/collection.txt index 7025eb6..91d18a7 100644 --- a/text/collection.txt +++ b/text/collection.txt @@ -10,5 +10,5 @@ new Classification ------------------ Move/Rest EMG : 99.9535% -Bewegungen EMG: 74.4832% *k=2, c=1* +Bewegungen EMG: 77.7352%