diff --git a/text/TODO.txt b/text/TODO.txt index 451e512..6160808 100644 --- a/text/TODO.txt +++ b/text/TODO.txt @@ -63,19 +63,20 @@ Unterschied pburg / pwelch - -Calculations todo: +Calculations done: - offset (0,1,2) - pause (0,1) -- Pos +- Pos (offset 0-2) + +Calculations todo: - c - ridge - maxFreq - maxPerclass? - noLFsample höher, Frequenzen testen? -Aus EEG EMG vorhersagen (WL) (regression, dann corr) -Aus Synergien kin -Aus EEG (über Synergien) kinematik +Aus EEG EMG vorhersagen (WL) (regression, dann corr) (running) +Aus Synergien kin (running) +Aus EEG (über Synergien) kinematik (testing) Intro nur Motivation, Rest in II diff --git a/usedMcode/callAll.m b/usedMcode/callAll.m index 366eb56..704cb24 100644 --- a/usedMcode/callAll.m +++ b/usedMcode/callAll.m @@ -6,7 +6,7 @@ EMGChannels={'AbdPolLo','Biceps','Triceps','FrontDelt','MidDelt','BackDelt'}; noSynergies=3; -allSubjects=true; %run all subjects and days or only one random day for one random subject +allSubjects=false; %run all subjects and days or only one random day for one random subject name='EEGtoEMG'; %suffix for the output, has to be valid name for file (no space, /, ...) windowEMG=0.2; windowEEG=1; @@ -22,7 +22,7 @@ k=10; maxExpC=0; maxPerClass=250; -poolObj=parpool(32); +poolObj=parpool(4); [subjects,numbers]=namesAndNumbers(pathToFile); numbersMat=cell2mat(numbers); @@ -75,8 +75,11 @@ % correlationLFnnmf=zeros([j,noSynergies]); maxRidgeParamIndexEEGemg=zeros([j,noSynergies,k]); correlationEMGemg=zeros([j,noSynergies]); - maxRidgeParamIndexAutoecKin=zeros([j,noSynergies,k]); - correlationAutoecKin=zeros([j,noSynergies]); + maxRidgeParamIndexAutoencKin=zeros([j,noSynergies,k]); + correlationAutoencKin=zeros([j,noSynergies]); + correlationViaAutoenc=zeros(j); + correlationViaPCA=zeros(j); + correlationViaNNMF=zeros(j); parfor j=1:size(numbersMat,2) number=numbersMat(j); @@ -99,6 +102,10 @@ % [correlationLFnnmf(j,:),maxRidgeParamIndexLFnnmf(j,:,:)]=ridgeCV(savePath,'LF','NNMF',k,ridgeParams,eegOffset); [correlationEEGemg(j,:),maxRidgeParamIndexEEGemg(j,:,:)]=ridgeCV(savePath,'EEG','EMG',k,ridgeParams,eegOffset); [correlationAutoencKin(j,:),maxRidgeParamIndexAutoencKin(j,:,:)]=ridgeCV(savePath,'Autoenc','kin',k,ridgeParams,eegOffset); + correlationViaAutoenc(j)=ridgeCVvia(savePath,'EEG','Autoenc','kin',k,ridgeParams,eegOffset); + correlationViaPCA(j)=ridgeCVvia(savePath,'EEG','PCA','kin',k,ridgeParams,eegOffset); + correlationViaNNMF(j)=ridgeCVvia(savePath,'EEG','NNMF','kin',k,ridgeParams,eegOffset); + fprintf('%s%i finished %s\n',subject,number,datestr(datetime('now'))) end @@ -124,8 +131,11 @@ % [correlationEMGnnmf,maxRidgeParamIndexEMGnnmf(:,:)]=ridgeCV(savePath,'EMG','NNMF',k,ridgeParams,eegOffset); % [correlationEEGnnmf,maxRidgeParamIndexEEGnnmf(:,:)]=ridgeCV(savePath,'EEG','NNMF',k,ridgeParams,eegOffset); % [correlationLFnnmf,maxRidgeParamIndexLFnnmf(:,:)]=ridgeCV(savePath,'LF','NNMF',k,ridgeParams,eegOffset); - [correlationEEGemg,maxRidgeParamIndexEEGemg(:,:)]=ridgeCV(savePath,'EEG','EMG',k,ridgeParams,eegOffset); - [correlationAutoencKin,maxRidgeParamIndexAutoencKin(:,:)]=ridgeCV(savePath,'Autoenc','kin',k,ridgeParams,eegOffset); +% [correlationEEGemg,maxRidgeParamIndexEEGemg(:,:)]=ridgeCV(savePath,'EEG','EMG',k,ridgeParams,eegOffset); +% [correlationAutoencKin,maxRidgeParamIndexAutoencKin(:,:)]=ridgeCV(savePath,'Autoenc','kin',k,ridgeParams,eegOffset); + correlationViaAutoenc=ridgeCVvia(savePath,'EEG','Autoenc','kin',k,[100],eegOffset); + correlationViaPCA=ridgeCVvia(savePath,'EEG','PCA','kin',k,[100],eegOffset); + correlationViaNNMF=ridgeCVvia(savePath,'EEG','NNMF','kin',k,[100],eegOffset); fprintf('%s%i finished %s\n',subject,number,datestr(datetime('now'))) save(strcat(pathToFile,sprintf('../matlabData/%s_call%s%i-%s.mat',datestr(datetime('now')),subject,number,name))); diff --git a/usedMcode/ridgeCVvia.m b/usedMcode/ridgeCVvia.m new file mode 100644 index 0000000..25e5d7d --- /dev/null +++ b/usedMcode/ridgeCVvia.m @@ -0,0 +1,70 @@ +function [correlation]=ridgeCVvia(savePath,data,via,goal,k,ridgeParams,eegOffset) + load(savePath); + clear classification; + eeg=false; + if strcmp(data,'EEG') + eeg=true; + trainingData=trainingDataEEG(eegOffset+1:end,:); + elseif strcmp(data,'EMG') + trainingData=trainingDataEMG; + elseif strcmp(data,'LF') + eeg=true; + trainingData=trainingDataEEGlf(eegOffset+1:end,:); + else + error('only EEG, EMG and LF are valid inputs for data'); + end + + factor=size(trainingDataEMG,1)/(size(trainingData,1)+eegOffset); + + + if strcmp(via,'Autoenc') + viaData=shiftingMean(synergiesAutoenc,factor); + elseif strcmp(via,'PCA') + viaData=shiftingMean(synergiesPCA,factor); + elseif strcmp(via,'NNMF') + viaData=shiftingMean(synergiesNNMF,factor); + else + error('only Autoenc, PCA nad NNMF are valid inputs for via'); + end + + + if strcmp(goal,'kin') + predicted=shiftingMean(kinematics,factor); + elseif strcmp(goal,'EMG') + predicted=trainingDataEMG; + else + error('only kin and EMG are valid inputs for goal'); + end + + clear trainingDataEEG; + clear trainingDataEEGlf; + clear trainingDataEMG; + clear kinematics; + clear synergies*; + + if eeg + viaData=viaData(1:end-eegOffset,:); + predicted=predicted(1:end-eegOffset,:); + end + + viaDataPredicted=zeros(size(viaData)); + correlation=zeros(size(predicted,2)); + + parfor j=1:size(viaData,2) + pred=viaData(:,j); + + coeffs=ridge(pred,trainingData,ridgeParams(1),0); + + viaDataPredicted(:,j)=coeffs(1)+trainingData*coeffs(2:end); + + end + + parfor j=1:size(predicted,2) + pred=predicted(:,j); + + coeffs=ridge(pred,viaDataPredicted,ridgeParams(1),0); + + correlation(j)=ridgeCorrelation(viaDataPredicted,pred,coeffs); + + end +end \ No newline at end of file