diff --git a/usedMcode/classifyAccordingToEMG.m b/usedMcode/classifyAccordingToEMG.m index a3e3d67..048f540 100644 --- a/usedMcode/classifyAccordingToEMG.m +++ b/usedMcode/classifyAccordingToEMG.m @@ -1,8 +1,8 @@ -function [classification]=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG, classes,shift,frequency,threshold,pause) +function [classification]=classifyAccordingToEMG(sizeTrainingData, trainingDataEMG, classes,shift,frequency,threshold,pause) % classifyAccordingToEMG data classified as -1 should be taken out - classification=zeros([size(trainingDataEEG,1),1]); + classification=zeros([sizeTrainingData,1]); oldclass=0; - for i=1:size(trainingDataEEG,1) + for i=1:sizeTrainingData 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 diff --git a/usedMcode/generateTrainingData.m b/usedMcode/generateTrainingData.m index 5d94a48..3f9fda5 100644 --- a/usedMcode/generateTrainingData.m +++ b/usedMcode/generateTrainingData.m @@ -1,20 +1,26 @@ -function [trainingDataEEG,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq) +function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq) bci_sf=params.SamplingRate.NumericValue; signalWindowEMG=bci_sf*windowEMG; signalWindowEEG=bci_sf*windowEEG; tempEEG=zeros([32,fix(floor(size(signal,1)/signalWindowEEG-1)*windowEEG/shift+1),maxEEGFreq-minEEGFreq+1]); + tempEEGlf=zeros([32,fix(floor(size(signal,1)/signalWindowEEG-1)*windowEEG/shift+1),maxEEGFreq-minEEGFreq+1]); tempEMG=zeros(fix([size(signal,2)-3-32,fix(size(signal,1)/signalWindowEMG-1)*windowEMG/shift+1])); %Filter around 50Hz and below 2 Hz [A,B]= butter(2,[48 52]/(bci_sf/2),'stop'); [C,D]= butter(2,1/(bci_sf/2),'high'); [E,F]= butter(2,[148 152]/(bci_sf/2),'stop'); + + % filter for low Frequencies + [V,W]= butter(2,0.01/(bci_sf/2),'high'); + [X,Y]= butter(2,1/(bci_sf/2),'low'); parfor i=1:32 %filter single channel, w/o EMG, HEOG, Synchro and 0s tempEEG(i,:,:)=shiftingPburg(filtfilt(double(E),double(F),filtfilt(double(C),double(D),filtfilt(double(A),double(B),double(signal(:,i))))),bci_sf,windowEEG,shift,pburgOrder,minEEGFreq,maxEEGFreq); - %filtfilt stat filter - end % TODO: 8-30Hz, pburg bei kurzen Fenstern (Ordnung: Je nach SamplingRate, bei 2500: 32-50, Alpha, Beta peaks sollten sichtbar sein) + tempEEGlf(i,:,:)=filtfilt(double(X),double(Y),filtfilt(double(V),double(W),double(signal(:,i)))) + end trainingDataEEG=permute(tempEEG,[2 1 3]); + trainingDataEEGlf=permute(tempEEGlf,[2 1 3]); parfor i=33:size(signal,2)-3 tempEMG(i-32,:,:)=waveformLength(filtfilt(double(E),double(F),filtfilt(double(C),double(D),filtfilt(double(A),double(B),double(signal(:,i))))),bci_sf,windowEMG,shift); diff --git a/usedMcode/readEEG.m b/usedMcode/readEEG.m index ca13e5a..d29f41e 100644 --- a/usedMcode/readEEG.m +++ b/usedMcode/readEEG.m @@ -7,6 +7,7 @@ if exist(savePath, 'file') ~= 2 fprintf(strcat(savePath,' not existing; creating\n')); trainingDataEEGcell=cell(maxFile,1); + trainingDataEEGlfCell=cell(maxFile,1); trainingDataEMGcell=cell(maxFile,1); classesCell=cell(maxFile,1); kin=cell([maxFile,1]); @@ -14,7 +15,7 @@ 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); + [trainingDataEEGcell{i},trainingDataEEGlfCell{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 @@ -23,12 +24,13 @@ clear sig trainingDataEEG=cell2mat(trainingDataEEGcell); + trainingDataEEGlf=cell2mat(trainingDataEEGlfCell); trainingDataEMG=cell2mat(trainingDataEMGcell); classesMat=cell2mat(classesCell); kinMat=cell2mat(kin); clear trainingDataEEGcell trainingDataEMGcell classesCell kin - classificationWithPause=classifyAccordingToEMG(trainingDataEEG, trainingDataEMG,classesMat,shift,bci_sf,threshold,pause); + classificationWithPause=classifyAccordingToEMG(size(trainingDataEEG,1), trainingDataEMG,classesMat,shift,bci_sf,threshold,pause); clear classesMat smoothClassification=zeros(size(classificationWithPause)); @@ -39,12 +41,13 @@ clear classificationWithPause trainingDataEEG=trainingDataEEG(smoothClassification~=-1,:,:); + trainingDataEEGlf=trainingDataEEGlf(smoothClassification~=-1,:,:); trainingDataEMG=trainingDataEMG(smoothClassification~=-1,:); classification=smoothClassification(smoothClassification~=-1); kinematics=kinMat(smoothClassification~=-1,:); clear smoothClassification i - save(savePath,'trainingDataEEG','trainingDataEMG','classification','kinematics','-v7.3'); + save(savePath,'trainingDataEEG','trainingDataEEGlf','trainingDataEMG','classification','kinematics','-v7.3'); %fprintf('finished reading %s%i %s\n',subject,number,datestr(datetime('now')));