diff --git a/usedMcode/callAll.m b/usedMcode/callAll.m index f8ba0a5..aa54e84 100644 --- a/usedMcode/callAll.m +++ b/usedMcode/callAll.m @@ -3,6 +3,7 @@ %pathToFile='/home/jph/Uni/masterarbeit/origData/'; maxFile=5; threshold=10000; %EMG is classified as movement +EMGChannels={'AbdPolLo','Biceps','Triceps','FrontDelt','MidDelt','BackDelt'}; allSubjects=true; %run all subjects and days or only one random day for one random subject @@ -72,7 +73,7 @@ number=numbersMat(j); subject=subjectsForNumbers{j}; - savePath=readEEG(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,noLFsamples); + savePath=readEEG(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,noLFsamples,EMGChannels); [meanAccurancysEMG,maxCEMG,cmScaledEMG(:,:)]=svmEciton(savePath,'EMG',k,maxExpC,maxPerClass); [meanAccurancysEEG,maxCEEG,cmScaledEEG(:,:)]=svmEciton(savePath,'EEG',k,maxExpC,maxPerClass); [meanAccurancysLF,maxCLF,cmScaledLF(:,:)]=svmEciton(savePath,'LF',k,maxExpC,maxPerClass); diff --git a/usedMcode/callAllPos.m b/usedMcode/callAllPos.m index 2573dea..7eb61a1 100644 --- a/usedMcode/callAllPos.m +++ b/usedMcode/callAllPos.m @@ -3,6 +3,7 @@ %pathToFile='/home/jph/Uni/masterarbeit/Block1_ReachingMovements/'; maxFile=5; threshold=10000; %EMG is classified as movement +EMGChannels={'AbdPolLo','Biceps','Triceps','FrontDelt','MidDelt','BackDelt'}; allSubjects=true; %run all subjects and days or only one random day for one random subject @@ -49,7 +50,7 @@ parfor j=1:size(numbersMat,2) number=numbersMat(j); subject=subjectsForNumbers{j}; - savePath=readAllPos(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause); + savePath=readAllPos(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,EMGChannels); % [meanAccurancysEMG(j),maxCEMG(j,:),cmScaledEMG(j,:,:)]=svmEciton(savePath,~EEG,k,maxExpC,maxPerClass); % [meanAccurancysEEG(j),maxCEEG(j,:),cmScaledEEG(j,:,:)]=svmEciton(savePath,EEG,k,maxExpC,maxPerClass); [correlationEMG(j,:),maxRidgeParamIndex(j,:,:)]=ridgeCV(savePath,false,k,ridgeParams); diff --git a/usedMcode/generateTrainingData.m b/usedMcode/generateTrainingData.m index 95c2807..0d5ca7a 100644 --- a/usedMcode/generateTrainingData.m +++ b/usedMcode/generateTrainingData.m @@ -1,4 +1,4 @@ -function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples) +function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples,EMGChannels) bci_sf=params.SamplingRate.NumericValue; signalWindowEMG=bci_sf*windowEMG; signalWindowEEG=bci_sf*windowEEG; @@ -22,13 +22,7 @@ trainingDataEEG=permute(tempEEG,[2 1 3]); trainingDataEEGlf=permute(tempEEGlf,[2 1 3]); - usedChannels={'AbdPolLo','Biceps','Triceps','FrontDelt','MidDelt','BackDelt'}; - emgchannels=find(ismember(params.ChannelNames.Value,usedChannels)); - - parfor i=1:6 - tempEMG(i,:)=waveformLengthAll(filtfilt(double(E),double(F),filtfilt(double(C),double(D),filtfilt(double(A),double(B),double(signal(:,emgchannels(i)))))),bci_sf,windowEMG,shift); - end - trainingDataEMG=permute(tempEMG,[2 1 3]); + trainingDataEMG=waveformLengthAll(signal(:,ismember(params.ChannelNames.Value,EMGChannels)),bci_sf,windowEMG,shift); %shift kin according to synch channel in first minute [~,startingPoint]=max(abs(diff(signal(1:60*bci_sf,size(signal,2)-1)))); diff --git a/usedMcode/generateTrainingDataPos.m b/usedMcode/generateTrainingDataPos.m index 1940e16..597ce31 100644 --- a/usedMcode/generateTrainingDataPos.m +++ b/usedMcode/generateTrainingDataPos.m @@ -1,4 +1,4 @@ -function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples) +function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingDataPos(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples,EMGChannels) bci_sf=params.SamplingRate.NumericValue; signalWindowEMG=bci_sf*windowEMG; signalWindowEEG=bci_sf*windowEEG; @@ -16,7 +16,7 @@ [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); + 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,EMGChannels); tempEEGlf(i,:,:)=shiftingDownsample(filtfilt(double(X),double(Y),filtfilt(double(V),double(W),double(signal(:,i)))),bci_sf,windowEEG,shift,noLFsamples); end trainingDataEEG=permute(tempEEG,[2 1 3]); diff --git a/usedMcode/readAll.m b/usedMcode/readAll.m index 6f8824b..c382509 100644 --- a/usedMcode/readAll.m +++ b/usedMcode/readAll.m @@ -1,4 +1,4 @@ -function [savePath]=readAll(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,noLFsamples) +function [savePath]=readAll(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,noLFsamples,EMGChannels) %fprintf('start read %s%i %s\n',subject,number,datestr(datetime('now'))); savePath=strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShiftFreq%ito%iPause%ipBurg%i.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause,pburgOrder)); @@ -15,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},trainingDataEEGlfCell{i},trainingDataEMGcell{i},kin{i}]=generateTrainingData(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples); + [trainingDataEEGcell{i},trainingDataEEGlfCell{i},trainingDataEMGcell{i},kin{i}]=generateTrainingData(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples,EMGChannels); classesCell{i}=stat.StimulusCode; %fprintf('%ith file processed\n',i) end diff --git a/usedMcode/readAllPos.m b/usedMcode/readAllPos.m index 6ecb160..461dd3e 100644 --- a/usedMcode/readAllPos.m +++ b/usedMcode/readAllPos.m @@ -1,12 +1,13 @@ -function [savePath]=readAllPos(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause) +function [savePath]=readAllPos(pathToFile, subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq,pause,noLFsamples,EMGChannels) %fprintf('start read %s%i %s\n',subject,number,datestr(datetime('now'))); - savePath=strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShiftFreq%ito%iPause%ipBurg%iPos.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause,pburgOrder)); + savePath=strcat(pathToFile,sprintf('../matlabData/%s%i%imsWindowEMG%isWindowEEG%imsShiftFreq%ito%iPause%ipBurg%i.mat',subject,number,windowEMG*1000,windowEEG,shift*1000,minEEGFreq,maxEEGFreq,pause,pburgOrder)); %only create file if it doesn't exist yet 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}]=generateTrainingDataPos(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq); + [trainingDataEEGcell{i},trainingDataEEGlfCell{i},trainingDataEMGcell{i},kin{i}]=generateTrainingDataPos(sig,tmpKin(:,1:4),windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples,EMGChannels); 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')));