function alfaMat = VA_metric_reference(Xnext,Y,r,alfa_ini)
	% determina i parametri del codice
	[S,temp] = size(Y);
	N = temp/2;
	
	% trova il numero di simboli da decodificare
	M = numel(r)/N;
	
	% alloca la matrice delle metriche di stato
	alfaMat = zeros(S,M);
	
	% per ciascun istante di tempo, calcola nel vettore alfa
	% le metriche degli stati raggiunti, usando le metriche
	% di stato iniziali alfa_ini
	for m = 1:M
		% inizializza con valori che verranno certamente
		% migliorati
		alfa = inf*ones(S,1);

		% per ciascuno stato iniziale...
		for s_ini = 1:S
			% per ciascun valore dell'ingresso...
			for u = 0:1
				% trova lo stato finale e il vettore
				% delle uscite associato alla transizione
				s_fin = Xnext(s_ini,1+u);
				Y_edge = Y(s_ini,u*N+(1:N));
				
				% metrica associata a stato di partenza + transizione
				temp = alfa_ini(s_ini) + sum(abs(Y_edge-r((m-1)*N+(1:N))));
				
				% nell'algoritmo di Viterbi si mantiene
				% solo la metrica minima
				alfa(s_fin) = min(alfa(s_fin),temp);
			end
		end

		% salva nella matrice le metriche di stato appena calcolate
		alfaMat(:,m) = alfa;

		% prepara il loop successivo
		alfa_ini = alfa;
	end
