Ich habe ein Spektrum (Wellenlänge (x) gegen Absorption (y)), die eine Mischung aus zwei Signalen (xa, ya) und (xb, yb) ist. Ich versuche, PCA (Code fand ich online) zu verwenden, um die Signale in (x, y) entmischen:Matlab: Hauptkomponentenanalyse auf Signal (spektrale Entmischung)
%step 1, input data
numdata=length(data(:,1));
x=data(:,1);
y=data(:,1);
%step 2, finding a mean and subtracting
xmean=mean(x);
ymean=mean(y);
xnew=x-xmean*ones(numdata,1);
ynew=y-ymean*ones(numdata,1);
subplot(3,1,1);
plot(x,y, 'o');
title('Original Data');
%step 3, covariance matrix
covariancematrix=cov(xnew,ynew);
%step 4, Finding Eigenvectors
[V,D] = eig(covariancematrix);
D=diag(D);
maxeigval=V(:,find(D==max(D)));
%step 5, Deriving the new data set
%finding the projection onto the eigenvectors
finaldata=maxeigval'*[xnew,ynew]';
subplot(3,1,2);
stem(finaldata, 'DisplayName', 'finaldata', 'YDataSource', 'finaldata');
title('PCA 1D output ')
%we do a classification now
subplot(3,1,3);
title('Final Classification')
hold on
for i=1:size(finaldata,2)
if finaldata(i)>=0
plot(x(i),y(i),'o')
plot(x(i),y(i),'r*')
else
plot(x(i),y(i),'o')
plot(x(i),y(i),'g*')
end
end
Wie am besten, die PCA Ausgang anzuwenden, um entmischen (y) in Komponenten ya und yb? Ich habe keine Erfahrung mit PCA und kann keine guten Tutorials online für diese Anwendung finden. Ist es am besten, die Eigenvektoren für das Trainingsspektrum zu generieren und dann mit dem Testspektrum zu vergleichen? Dank
Für welche Art von Anwendung verwenden Sie es? – m7913d
Für jedes Element in Matrix (Posx, Posy, Spektrum), bestimmt die Beiträge von ya und yb Spektren oben und das wahrscheinlichste Spektrum (d. H. Entweder ya oder yb) – 2one