diff --git a/oldMcode/correlation2.m b/oldMcode/correlation2.m new file mode 100644 index 0000000..ce92014 --- /dev/null +++ b/oldMcode/correlation2.m @@ -0,0 +1,9 @@ +function [R2]=correlation2(A,B) + if size(A)~=size(B) + error('dimension missmatch') + end + R2=zeros(size(A,2),1); + for i=1:size(A,2) + R2(i)=corr(A(:,i),B(:,i))^2; + end +end \ No newline at end of file diff --git a/oldMcode/noOfSynergies.m b/oldMcode/noOfSynergies.m index 6dea77d..e62db76 100644 --- a/oldMcode/noOfSynergies.m +++ b/oldMcode/noOfSynergies.m @@ -1,42 +1,42 @@ -maxSize=6; +maxSize=min(10,size(trainingData,2)); -mseAutoenc=zeros([maxSize,1]); +r2Autoenc=zeros([maxSize,size(trainingData,2)]); for i=1:maxSize ae=trainAutoencoder(trainingData,i,'ShowProgressWindow',false); predicted=predict(ae,trainingData); - mseAutoenc(i)=mse(trainingData-predicted); + r2Autoenc(i,:)=correlation2(trainingData,predicted); end fig=figure(); subplot(1,3,1); -plot(mseAutoenc) +plot(r2Autoenc) title('Autoencoder') xlabel('number of syergies') -ylabel('mse') +ylabel('R^2') %PCA [COEFF,SCORE,latent] = pca(trainingData,'Centered',false); -msePCA=zeros([maxSize,1]); +r2PCA=zeros([maxSize,size(trainingData,2)]); for i=1:maxSize predicted=SCORE(:,1:i)*COEFF(:,1:i)'; - msePCA(i)=mse(trainingData-predicted); + r2PCA(i,:)=correlation2(trainingData,predicted); end subplot(1,3,2); -plot(msePCA) +plot(r2PCA) title('PCA') xlabel('number of syergies') -ylabel('mse') +ylabel('R^2') %NNMF -mseNNMF=zeros([maxSize,1]); +r2NNMF=zeros([maxSize,size(trainingData,2)]); for i=1:maxSize [W,H]=nnmf(trainingData,i); predicted=W*H; - mseNNMF(i)=mse(trainingData-predicted); + r2NNMF(i,:)=correlation2(trainingData,predicted); end subplot(1,3,3); -plot(mseNNMF) +plot(r2NNMF) title('NNMF') xlabel('number of syergies') -ylabel('mse') \ No newline at end of file +ylabel('R^2') \ No newline at end of file diff --git a/usedMcode/generateTrainingData.m b/usedMcode/generateTrainingData.m index 35533f0..e675727 100644 --- a/usedMcode/generateTrainingData.m +++ b/usedMcode/generateTrainingData.m @@ -4,7 +4,7 @@ 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])); + 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'); @@ -22,8 +22,11 @@ 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]);