function [ val ] = ViterbiHMM(V, U, T, C, sigma)
%     Z=PCA(V, U);
    Z=V;
    [~, frame]=size(Z);
    [~, k]=size(T);
    T1=zeros(k, frame);
    T2=zeros(k, frame);
    %Initialisation
    T1(1,:)=1/k;
%     for i=1:frame
%         T1(reduc(1, i))=T1(reduc(1, i))+1;
%     end
%     T1(1,:)=T1(1,:)/sum(T1(1,:));
    
    for t=2:frame
        for i=1:k
            A=zeros(k,1);
            % Création de la matrice d'émission pour tous les clusters de
            % la frame
            % La matrice d'émission comporte toutes les probablités de la
            % distance entre le centre du cluster, et tous les autres
            % points de l'observation
            % Vu le nombre de combinaisons possible, le calcul se fait au
            % besoin, par rapport à l'observation
            E=Emission(V(:,t),C, sigma);
            for j=1:k
                A(j)=T1(j, t-1)*T(i,j)*E(j);
            end
            [a, b]=max(A); % On récupere le max de A et son adresse (argmax)
            T1(i,t)=a; % la valeur max
            T2(i,t)=b; % L'adresse de la valeur max (argmax)
        end
    end
    % On génére le descripteur qui part de bas en haut
    val=zeros(1,frame);
    [~,val(frame)]=max(T1(end,:));
    for t=frame:-1:2
        val(t-1)=T2(val(t),t);
    end
end

