diff --git a/text/collection.txt b/text/collection.txt index be08370..7c1a10e 100644 --- a/text/collection.txt +++ b/text/collection.txt @@ -16,5 +16,5 @@ default: pburgOrder 50, EMGwindow 0.2, 1s Pause, c=1 fest, minFreq=0, maxFreq=200 EMG: 56.11%, EEG: 42.2% (default) EMG: 55.71%, EEG: 33.32% (default, minFrequ=8, maxFreq=30) -EMG: ??%, EEG: 42.2?% (default, windowEMG=1s) +EMG: 28.25%, EEG: 44.62% (default, windowEMG=1s) diff --git a/usedMcode/callAll.m b/usedMcode/callAll.m index 424a4f7..efca4c9 100644 --- a/usedMcode/callAll.m +++ b/usedMcode/callAll.m @@ -11,6 +11,7 @@ pburgOrder=50; minEEGFreq=0; %try 8-30 maxEEGFreq=200; +pause=false; k=10; maxExpC=0; maxPerClass=250; @@ -37,10 +38,9 @@ for i=1:size(subjects,2) subject=subjects{i}; for number=numbers{i} -% fprintf('%s%i\n',subject,number); - readEEG(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq); - [meanAccurancysEMG(j),maxCEMG(j,:),cmScaledEMG(j,:,:)]=svmEciton(pathToFile,subject,number,false,k,maxExpC,maxPerClass); - [meanAccurancysEEG(j),maxCEEG(j,:),cmScaledEEG(j,:,:)]=svmEciton(pathToFile,subject,number,EEG,k,maxExpC,maxPerClass); + readEEG(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause); + [meanAccurancysEMG(j),maxCEMG(j,:),cmScaledEMG(j,:,:)]=svmEciton(pathToFile,subject,number,~EEG,k,maxExpC,maxPerClass,windowEMG,windowEEG,shift,minEEGFreq,maxEEGFreq,pause); + [meanAccurancysEEG(j),maxCEEG(j,:),cmScaledEEG(j,:,:)]=svmEciton(pathToFile,subject,number,EEG,k,maxExpC,maxPerClass,windowEMG,windowEEG,shift,minEEGFreq,maxEEGFreq,pause); [correlationEMG(j)]=ridgeCV(pathToFile,subject,number,false,k); [correlationEEG(j)]=ridgeCV(pathToFile,subject,number,EEG,k); j=j+1; diff --git a/usedMcode/classifyAccordingToEMG.m b/usedMcode/classifyAccordingToEMG.m index 5482ab0..a3e3d67 100644 --- a/usedMcode/classifyAccordingToEMG.m +++ b/usedMcode/classifyAccordingToEMG.m @@ -1,4 +1,4 @@ -function [classification]=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG, classes,shift,frequency,threshold) +function [classification]=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG, classes,shift,frequency,threshold,pause) % classifyAccordingToEMG data classified as -1 should be taken out classification=zeros([size(trainingDataEEG,1),1]); oldclass=0; @@ -11,7 +11,11 @@ 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; %if -1 there is a pause of 1s befor movement onset + if pause + classification(j)=-1; + else + classification(j)=class; + end end oldclass=class; end diff --git a/usedMcode/readEEG.m b/usedMcode/readEEG.m index 4657700..5ea4a4f 100644 --- a/usedMcode/readEEG.m +++ b/usedMcode/readEEG.m @@ -1,47 +1,51 @@ -function readEEG(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq) +function readEEG(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause) %fprintf('start read %s%i %s\n',subject,number,datestr(datetime('now'))); - - trainingDataEEGcell=cell(maxFile,1); - trainingDataEMGcell=cell(maxFile,1); - classesCell=cell(maxFile,1); - kin=cell([maxFile,1]); - - for i=1:maxFile - [sig, stat, params] = load_bcidat(strcat(pathToFile,sprintf('%s/%s_B100%i/%s_B1S00%iR0%i.dat',subject,subject,number,subject,number,i))); - tmpKin=csvread(strcat(pathToFile,sprintf('kin/%s_B1S00%iR0%i.txt',subject,number,i)),1,0); - [trainingDataEEGcell{i},trainingDataEMGcell{i},kin{i}]=generateTrainingData(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq); - classesCell{i}=stat.StimulusCode; - %fprintf('%ith file processed\n',i) - end - bci_sf=params.SamplingRate.NumericValue; - - clear sig - - trainingDataEEG=cell2mat(trainingDataEEGcell); - trainingDataEMG=cell2mat(trainingDataEMGcell); - classesMat=cell2mat(classesCell); - kinMat=cell2mat(kin); - clear trainingDataEEGcell trainingDataEMGcell classesCell kin - - classificationWithPause=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classesMat,shift,bci_sf,threshold); - clear classesMat - - smoothClassification=zeros(size(classificationWithPause)); - for i=1:size(classificationWithPause,1) - smoothClassification(i)=round(mode(classificationWithPause(max(i-fix(bci_sf/1000),1):min(i+fix(bci_sf/1000),end)))); - end - - clear classificationWithPause - - trainingDataEEG=trainingDataEEG(smoothClassification~=-1,:,:); - trainingDataEMG=trainingDataEMG(smoothClassification~=-1,:); - classification=smoothClassification(smoothClassification~=-1); - kinematics=kinMat(smoothClassification~=-1,:); - - clear smoothClassification i - save(strcat(pathToFile,sprintf('../matlabData/%s%i200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat',subject,number)),'trainingDataEEG','trainingDataEMG','classification','kinematics','-v7.3'); + %only create file if it doesn't exist yet + if exist(strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShift1sPauseFreq%ito%iPause%i.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause)), 'file') ~= 2 - %fprintf('finished reading %s%i %s\n',subject,number,datestr(datetime('now'))); + trainingDataEEGcell=cell(maxFile,1); + trainingDataEMGcell=cell(maxFile,1); + classesCell=cell(maxFile,1); + kin=cell([maxFile,1]); + + for i=1:maxFile + [sig, stat, params] = load_bcidat(strcat(pathToFile,sprintf('%s/%s_B100%i/%s_B1S00%iR0%i.dat',subject,subject,number,subject,number,i))); + tmpKin=csvread(strcat(pathToFile,sprintf('kin/%s_B1S00%iR0%i.txt',subject,number,i)),1,0); + [trainingDataEEGcell{i},trainingDataEMGcell{i},kin{i}]=generateTrainingData(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq); + classesCell{i}=stat.StimulusCode; + %fprintf('%ith file processed\n',i) + end + bci_sf=params.SamplingRate.NumericValue; + + clear sig + + trainingDataEEG=cell2mat(trainingDataEEGcell); + trainingDataEMG=cell2mat(trainingDataEMGcell); + classesMat=cell2mat(classesCell); + kinMat=cell2mat(kin); + clear trainingDataEEGcell trainingDataEMGcell classesCell kin + + classificationWithPause=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classesMat,shift,bci_sf,threshold,pause); + clear classesMat + + smoothClassification=zeros(size(classificationWithPause)); + for i=1:size(classificationWithPause,1) + smoothClassification(i)=round(mode(classificationWithPause(max(i-fix(bci_sf/1000),1):min(i+fix(bci_sf/1000),end)))); + end + + clear classificationWithPause + + trainingDataEEG=trainingDataEEG(smoothClassification~=-1,:,:); + trainingDataEMG=trainingDataEMG(smoothClassification~=-1,:); + classification=smoothClassification(smoothClassification~=-1); + kinematics=kinMat(smoothClassification~=-1,:); + + clear smoothClassification i + save(strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShift1sPauseFreq%ito%iPause%i.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause)),'trainingDataEEG','trainingDataEMG','classification','kinematics','-v7.3'); + + + %fprintf('finished reading %s%i %s\n',subject,number,datestr(datetime('now'))); + end end diff --git a/usedMcode/svmEciton.m b/usedMcode/svmEciton.m index 86c0611..6b1ac24 100644 --- a/usedMcode/svmEciton.m +++ b/usedMcode/svmEciton.m @@ -1,5 +1,5 @@ -function [meanAccurancy,maxC, cmScaled]= svmEciton(pathToFile,subject,number,EEG,k,maxExpC,maxPerClass) - load(strcat(pathToFile,sprintf('../matlabData/%s%i200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat',subject,number))); +function [meanAccurancy,maxC, cmScaled]= svmEciton(pathToFile,subject,number,EEG,k,maxExpC,maxPerClass,windowEMG,windowEEG,shift,minEEGFreq,maxEEGFreq) + load(strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShift1sPauseFreq%ito%iPause%i.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause))); % fprintf('%i,%i,%i',size(trainingDataEMG,1),size(trainingDataEEG,1),size(classification,1)) addpath('/nfs/wsi/ti/messor/hohlochj/libsvm/matlab'); @@ -34,14 +34,14 @@ 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,strcat(pathToFile,sprintf('../plots/%s%i%icm200ms1sPause.fig',subject,number,EEG)),'fig'); - save(strcat(pathToFile,sprintf('../matlabData/%s%i%i200ms1sPause.mat',subject,number,EEG)),'meanAccurancy','maxC','cmScaled','-v7.3'); +% fig=figure; +% imagesc(cmScaled) +% colorbar(); + %saveas(fig,strcat(pathToFile,sprintf('../plots/%s%i%icm200ms1sPause.fig',subject,number,EEG)),'fig'); + %save(strcat(pathToFile,sprintf('../matlabData/%s%i%i200ms1sPause.mat',subject,number,EEG)),'meanAccurancy','maxC','cmScaled','-v7.3'); fprintf('%s%i%i finished %s\n',subject,number,EEG,datestr(datetime('now'))) end