diff --git a/usedMcode/generateTrainingDataPos.m b/usedMcode/generateTrainingDataPos.m index 0ac0041..1940e16 100644 --- a/usedMcode/generateTrainingDataPos.m +++ b/usedMcode/generateTrainingDataPos.m @@ -1,23 +1,32 @@ -function [trainingDataEEG,trainingDataEMG,kinPerSec] = generateTrainingDataPos(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq) +function [trainingDataEEG,trainingDataEEGlf,trainingDataEMG,kinPerSec] = generateTrainingData(signal,kin,windowEMG,windowEEG,shift,params,pburgOrder,minEEGFreq,maxEEGFreq,noLFsamples) 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])); + tempEEGlf=zeros([32,fix(floor(size(signal,1)/signalWindowEEG-1)*windowEEG/shift+1),noLFsamples]); + tempEMG=zeros(fix([6,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,:,:)=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]); + 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); + usedChannels={'AbdPolLo','Biceps','Triceps','FrontDelt','MidDelt','BackDelt'}; + emgchannels=find(ismember(params.ChannelNames.Value,usedChannels)); + + parfor i=1:6; + tempEMG(i,:)=waveformLength(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]);