diff --git a/text/TODO.txt b/text/TODO.txt index 5ce9ceb..0fce01c 100644 --- a/text/TODO.txt +++ b/text/TODO.txt @@ -4,10 +4,14 @@ pBurgOrder bestimmen +filter -> filtfilt EMG + Matching Bewegung EEG - Passt nicht zusammen - insgesamt ~40s zu wenig kin - - durch ridge-Regression (EEG als feature) - + + synchro Trigger (ch40) + + upsample_kin (in code) + - durch ridge-Regression (EMG dann EEG als feature) + - als Maß correlation ohne gridsearch vergleichen mit gridsearch diff --git a/usedMcode/callAll.m b/usedMcode/callAll.m index 912372d..d0d6af9 100644 --- a/usedMcode/callAll.m +++ b/usedMcode/callAll.m @@ -2,11 +2,11 @@ pathToFile='/nfs/wsi/ti/messor/hohlochj/origData/'; % pathToFile='/home/jph/Uni/masterarbeit/Block1_ReachingMovements/'; -windowEMG=0.2; +windowEMG=0.2; %try 1s windowEEG=1; shift=0.2; pburgOrder=50; -minEEGFreq=0; +minEEGFreq=0; %try 8-30 maxEEGFreq=200; k=10; maxExpC=0; @@ -37,5 +37,10 @@ j=j+1; end end -%save(sprintf('/nfs/wsi/ti/messor/hohlochj/matlabData/%s_callAll.mat',datestr(datetime('now')))); + +[ accEEG, accEMG, cmEEG, cmEMG ] = collectAccurancys( pathToFile, subjects, numbers ); + +save(sprintf('/nfs/wsi/ti/messor/hohlochj/matlabData/%s_callAll.mat',datestr(datetime('now')))); delete(poolObj) + + diff --git a/usedMcode/generateTrainingData.m b/usedMcode/generateTrainingData.m index d188438..8462ce9 100644 --- a/usedMcode/generateTrainingData.m +++ b/usedMcode/generateTrainingData.m @@ -1,25 +1,34 @@ function [trainingDataEEG,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq) - frequency=params.SamplingRate.NumericValue; - signalWindowEMG=frequency*windowEMG; - signalWindowEEG=frequency*windowEEG; + 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]); 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]/(frequency/2),'stop'); - [C,D]= butter(2,1/(frequency/2),'high'); - [E,F]= butter(2,[148 152]/(frequency/2),'stop'); + [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'); - parfor i=1:32 %filter single channel, w/o 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))))),frequency,windowEEG,shift,pburgOrder,minEEGFreq,maxEEGFreq); + 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) trainingDataEEG=permute(tempEEG,[2 1 3]); parfor i=33:size(signal,2)-3 - tempEMG(i-32,:,:)=waveformLength(filter(C,D,filter(A,B,signal(:,i))),frequency,windowEMG,shift); + 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); end trainingDataEMG=permute(tempEMG,[2 1 3]); + %shift kin according to synch channel in first minute + [~,startingPoint]=max(abs(diff(signal(1:60*bci_sf,size(signal,2)-1)))); + % add time offset in ms to kin-time + offset=startingPoint/bci_sf*1000; + kin(:,1)=kin(:,1)+offset; +% disp(offset) + %add dummy timestamp at the end to fill kinematics + kin=[kin;kin(end,:)]; + kin(end,1)=size(trainingDataEEG,1)*1000*windowEEG; kinPerSec=shiftingKin(kin,windowEEG,shift); end diff --git a/usedMcode/readEEG.m b/usedMcode/readEEG.m index 1dab896..2c4b875 100644 --- a/usedMcode/readEEG.m +++ b/usedMcode/readEEG.m @@ -10,7 +10,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,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq); + [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 diff --git a/usedMcode/shiftingKin.m b/usedMcode/shiftingKin.m index 2a62296..a7a7cd4 100644 --- a/usedMcode/shiftingKin.m +++ b/usedMcode/shiftingKin.m @@ -1,6 +1,6 @@ function [kinPerSec]=shiftingKin(kin, window, shift) - kinPerSec=zeros(fix((max(kin(:,1))-window*1000)/(shift*1000)),3); + kinPerSec=zeros(fix((max(kin(:,1))-window*1000)/(shift*1000)),4); for j=1:fix((max(kin(:,1))-window*1000)/(shift*1000)) - kinPerSec(j,:)=sum(diff(kin(kin(:,1)>(j-1)*shift*1000 & kin(:,1)<=(j-1)*shift*1000+window*1000,2:4))); + kinPerSec(j,:)=sum(diff(kin(kin(:,1)>(j-1)*shift*1000 & kin(:,1)<=(j-1)*shift*1000+window*1000,:))); end end \ No newline at end of file