Newer
Older
masterarbeit / usedMcode / generateTrainingData.m
@Jan-Peter Hohloch Jan-Peter Hohloch on 3 Aug 2016 2 KB finish introducing lowFreq; testing TODO
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]);
    tempEEGlf=zeros([32,fix(floor(size(signal,1)/signalWindowEEG-1)*windowEEG/shift+1),noLFsamples]);
    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);
        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);
    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*shift+windowEEG*1000;
    kinPerSec=shiftingKin(kin,windowEEG,shift);
end