%------------------------------------------------------------------------------------
%DESCRIZIONE: esegue PCA o Karhunen-Loeve trasformata           
%------------------------------------------------------------------------------------
%I: T:=matrice contenente le temperature dei sensori interni 
%   percT:=percentuale del sistema che si vuole rappresentare tramite componenti principali
%   
%O: Ybas:=proiezione delle temperature lungo le componenti principali prescelte
%   n:=numero componenti principali selezionate
%   percR:=percentuale reale spiegata del sistema   
%
%------------------------------------------------------------------------------------
%------------------------------------------------------------------------------------


function [Ybas,n,percR,Base]=KLT(T,percT)

    [mT,T]=centra(T);%centra i dati

    Y=T*T'./size(T,2); %crea la matrice di covarianza

    [V,lambdaM]=eig(Y); %calcola autovettori e autovalori relativi di Y
    
    %ordina autovalori in maniera crescente e riarrangia gli autovettori di conseguenza
    lambdaM=fliplr(lambdaM);
    V=fliplr(V);
    %per definizione di autovalori inv(V)*Y*V=lambdaM
    %N.B.:per problemi numerici, non e' proprio cosi'

    %estrae gli autovalori dalla matrica lambdaM
    lambda=max(lambdaM);

    %calcola il numero di componenti principali necessarie a spiegare il "tot"% del sistema
    [percR,n]=PCApercent(lambda,percT);

    %trova deviazione standard empirica e scala i dati secondo la relativa dev std
%     for i=1:size(Y,1)        
%         Tsd(i,:)=(T(i,:)./(Y(i,i)^0.5));
%     end

    %riduce la rappresentazione di T in 'n' al posto di 53, proiettando sulle
    %direzioni degli autovettori relativi agli autovalori (PC) piu'significativi
    Ybas=V(:,1:n)'*T;%sd;  % size(Y)=n*1512
    Base=V(:,1:n);

end