diff --git a/.gitignore b/.gitignore index 1a48405..e7fb459 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,13 @@ *~ +libsvm/ +plots/ +log/ data/ +messor/ +src/ +matlabData/ *mex* Block* BCI2000* *.mat +*.zip diff --git a/oldMcode/upsample_kin.m b/oldMcode/upsample_kin.m new file mode 100644 index 0000000..488de56 --- /dev/null +++ b/oldMcode/upsample_kin.m @@ -0,0 +1,59 @@ +function [kin_data, startingPoint]=upsample_kin(kin,bci_signal,bci_sf,bci_total_samples,channelNames) +% function for kin data upsampling to EMG data frequency (2500Hz) +% inputs: +% kin: kin data +% bci_signal: signal recorded in bci (emg+eeg+eog+synchro) +% bci_sf: sampling Frequency of bci signal +% bci_total_samples: length of emg signal (2500Hz) +% channelNames: names of channels recorded in bci (1:32 --> eeg, 33:42--> emg, 43: EOG, 44: synchro, 45: null) +% +% +% outputs: +% kin_data: kin data matrix (bci_total_samplesx13 kin variables) of same length as emg data, upsampled +% startingPoint: starting point is the position point in the EMG data (2500 Hz) where +% %kin data starts being recorded (synchronization step). the +% %staringPoint position in EMG data corresponds to the first data point +% %of kinematic data + + %upsampling --> get it equal to bci2000 data frequency + kin_total_samples=length(kin_filt); % kin number of data points + + %1. find the starting point in the bci2000 data within the first 4 seconds (step in synchronization trigger) + + %look for a step in the beginning of kinematic signal + [~,startingPoint]=max(abs(diff(bci_signal(1:4*bci_sf,(find(ismember(channelNames,'Synchro'))))))); + + %2. create a new vector for kinematic data as long as the vector for EMG + %data + + kin_data=NaN(bci_total_samples,13);%creates a new matrix of same lenght as EMG data + + + %for kin variables 2-13 (not time), from 1 to startingPoint, we asign a + %constant value, the same value that each variable has in the first + %data point + for j=2:13 + kin_data(1:startingPoint,j)=kin(1,j); % from 1 to startingPoint, the kinematic data + end + + %we take the time array + time=kin(:,1);%in ms + + for i=1:length(time) %length in kinematic data + + %assign the value of kin data in each time position in 17 Hz to the time + %position that would have in 2500Hz (the rest of the positions stay with a NaN value) + kin_data((startingPoint+floor(time(i)*bci_sf/1000)),2:13)=kin_filt(i,2:13); + + end + + %interpolate NaN values + + X=[1:bci_total_samples]'; + for i=2:13 + Y=(kin_data(1:bci_total_samples,i)); + ix=~isnan(Y); + kin_data(1:bci_total_samples,i)=interp1(X(ix),Y(ix),X,'CUBIC'); + end + +end