Te entiendo perfectamente. Voy a copiarlo acá y vamos a ver quien me echa la mano. De verdad muy agradecida por tu tiempo. Saludos
%1. INDICAR EL NÚMERO DE ESTADOS
VCN=1; % VARIABLE CONTROL QUE INDICA QUE N ES ENTERO Y MAYOR QUE CERO, DONDE N ES EL NÚMERO DE ESTADOS.
while VCN
N=input('INDIQUE EL NÚMERO DE ESTADOS DEL MOM:');
n=fix(N);
if N <=0|N~=n; % VERIFICA QUE N SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCN=0;
end
end
%2. INDICAR EL NÚMERO DE SIMBOLOS K
VCK=1; % VARIABLE CONTROL PARA K ENTERO Y MAYOR A CERO.
while VCK
K=input('INDIQUE EL NÚMERO DE SIMBOLOS DEL MOM m: ');
k=fix(K);
if K <=0|K~=k; % VERIFICA QUE K SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCK=0;
end
end
%3. INDICAR LA LONGITUD DE LAS OBSERVACIONES (T)
VCT=1; % VARIABLE CONTROL PARA T ENTERO Y MAYOR QUE CERO.
while VCT
T=input('INDIQUE EL NÚMERO DE OBSERVACIONES DEL MOM m: ');
t=fix(T);
if T <=0|T~=t; % VERIFIFICA QUE T SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCT=0;
end
end
% 4. CREAR EL VECTOR DE ESTADOS PARA LOS ESTADOS DEL MOM m
for i=1:N
E(i)=i;
end
%5. DEFINICIÓN DE LA MATRIZ DE PROBABILIDAD DE TRANSICIÓN DE ESTADOS
%(MPTE)QUE VAN DESDE i A j. DE FORMA ALEATORIA Y VERIFICACIÓN DE QUE MPTE
%SEA ESTOCÁSTICA
A=rand(N,N);
for i=1:N
MA=0;
for j=1:N
MA=MA+A(i,j);
end
VMA(i)=MA;
end
for i=1:N
for j=1:N
A(i,j)=A(i,j)/VMA(i);
end
end
% Matriz de Probabilidad t=1
PI0(1,1)=1;
for i=2:N
PI0(i,1)=0.000001;
end;
% 6. INTRODUCCIR LA MATRIZ DE PROBABILIDAD INICIAL (MPI) PARA LOS ESTADOS.
PI=rand(N,1);
MPI=0;
for i=1:N
MPI=MPI+PI(i,1);
end
for i=1:N
PI(i,1)=PI(i,1)/MPI;
end
% 7. CREAR EL VECTOR DE SIMBOLOS PARA LOS ESTADOS DEL MOM m
for i=1:K
V(i)=i;
end
% 8. INTRODUCIR LA MATRIZ DE PROBABILIDAD DE GENERACIÓN DE SIMBOLOS (MPGS)
% PARA CADA ESTADO
B=rand(N,K);
for i=1:N
MB=0;
for j=1:K
MB=MB+B(i,j);
end
VMB(i)=MB;
end
for i=1:N
for j=1:K
B(i,j)=B(i,j)/VMB(i);
end
end
% 9. INTRODUCIR EL NÚMERO DE SECUENCIAS DE OBSERVACIONES L (MÚLTIPLES SECUENCIAS)
VCSO=1; % VARIABLE CONTROL PARA QUE L SEA UN NÚMERO ENTERO Y MAYOR QUE CERO.
while VCSO
L=input('INTRODUZCA EL NÚMERO DE SECUENCIAS DE OBSERVACIONES DEL MOM m: ');
l=fix(L);
if L <=0|L~=l; % VERIFICA QUE L SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCSO=0;
end
end
O=randi([1,K],[L,T]);
%10. INTRODUCIR EL NÚMERO DE ITERACIONES I
VCI=1; %VARIABLE CONTROL PARA QUE I SEA ENTERO Y MAYOR QUE CERO
while VCI
I=input('INTRODUZCA EL NÚMERO DE ITERACIONES DEL MOM m: ');
i=fix(I);
if I <=0|I~=i%VERIFICA QUE L SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO');
else
VCI=0;
end
end
%11. INTRODUCCIÓN DEL EPSILÓN (e)
VCE=1; %VARIABLE CONTROL QUE VERIFICA QUE e SE ENCUENTRE ENTRE CERO Y UNO (0<PROB(e)<1)
while VCE
salida=sprintf('INGRESE EL VALOR CRÍTICO DE CONVERGENCIA: ');
disp(salida)
e=input('');
if e<0|e>1; % VERIFICA QUE LA PROBABILIDAD DE e SE POSITIVA
disp('ERROR: INGRESE UN NÚMERO ENTRE CERO Y UNO');
else
VCE=0;
end
end
% TOMA LA POSICIÓN DEL SIMBOLO (K)PARA CADA OBSERVACIÓN (O)
for i=1:T
for l=1:L
for j=1:K
if O(l,i)==V(j);
R(l,i)=j;
end
end
end
end
N
E
A
PI
K
L
V
B
O
I
e
%%%%%%%%%%%%%%%%%%%%
%%ALGORITMO VITERBI. PROBLEMA 2: DECODIFICACIÓN DEL MOM m (HALLAR LA MEJOR SECUENCIA DE ESTADOS DEL MOM m Y LA PROBABILIDAD)
%1. ESTADO PROBABLE PARA LA PRIMERA REALIZACIÓN T=1
% VECTOR DE PROBABILIDAD INICIAL Pi(1)=1; P(2)= 0; ..., Pi(N)=0
for i=1:N;
if i==1;
P(i,1)=1;
else;
P(i,1)=0;
end
end
P
SE=zeros(L,T,3);
for l=1:L
for i=1:N
D(l,i)=-log(P(i,1))-log(B(i,R(l,1))); %DISTANCIA QUE SE DEBE CALCULAR
end
Dmin=D(l,1); %DISTANCIA MÁS PEQUEÑA ENTRE TODAS
h=1;
for i=1:N-1
if Dmin>D(l,i+1)
Dmin=D(l,i+1);
h=(i+1);
end
end
SE(l,1,1)=1;
SE(l,1,2)=h;
SE(l,1,3)=D(l,h);
end
%2.ESTADO PROBABLE PARA LAS REALIZACIONES SIGUIENTES 2 A T
for l=1:L
for t=2:T
for j=1:N
D(l,j)=SE(l,t-1,3)-log(A((SE(l,t-1,2)),j))-log(B(j,R(l,t)));
end
Dmin=D(l,1);
h=1;
for i=1:N-1
if Dmin>D(l,i+1)
Dmin=D(l,i+1);
h=(i+1);
end
end
SE(l,t,1)=t;
SE(l,t,2)=h;
SE(l,t,3)=D(l,h);
end
Prob(l)=exp(-SE(l,T,3)); %PROBABILIDAD A ENCONTRAR
for i=1:T
LPS(l,i)=SE(l,i,2);
end
end
SEPRO=0;
for l=1:L
SEPRO=SEPRO+SE(l,T,3);
end
CTSE=SEPRO;
PROSEC=exp(-CTSE);
PROSEC0=PROSEC;
LMS=LPS;
salida=sprintf('COSTO TOTAL: %g',CTSE);
disp(salida)
salida1=sprintf('PROBABILIDAD CONJUNTA: %g',PROSEC0);
disp(salida1)
disp('SECUENCIA DE ESTADOS ÓPTIMA: ');
LMS
% 3. PROBLEMA 3: RE-ESTIMACIÓN DE LOS PARÁMETROS DEL MOM m
VC=1; % VARIABLE CONTROL QUE PERMITE DAR INICIO A EL CONTADOR DE INTERACIONES
CDIT=0; % CONTADOR PARA EL NÚMERO DE ITERACIONES
while VC
CDIT=CDIT+1;
MCDE=zeros(N,N); % MATRIZ PARA EL CONTEO DE CAMBIOS EN LOS ESTADOS
MCGSE=zeros(N,K); % MATRIZ PARA EL CONTEO DE GENERACIÓN DEL SIMBOLO K EN CADA ESTADO N
for l=1:L
for t=1:T
CONTAR=MCGSE(LPS(l,t),R(l,t))+1;
MCGSE(LPS(l,t),R(l,t))=CONTAR;
end
end
for l=1:L
for t=1:T-1
CCONTAR=MCDE(LPS(l,t),LPS(l,t+1))+1;
MCDE(LPS(l,t),LPS(l,t+1))=CCONTAR;
end
end
for i=1:N
NHj=0;
NDi=0;
for j=1:N
NDi=NDi+MCDE(i,j);
NHj=NHj+MCDE(j,i);
end
VNDi(i)=NDi;
VNHj(i)=NHj;
end
for i=1:N
for j=1:N
if VNDi(i)==0
A1(i,j)=0.0000001;
else
if MCDE(i,j)==0;
A1(i,j)=0.0000001;
else
A1(i,j)=MCDE(i,j)/VNDi(i);
end
end
end
end
end
E1=VNHj(1)
VNHj(1)=E1+L;
for i=1:N
for k=1:K
if VNHj(i)==0
B1(i,k)=0.0000001;
else
if MCGSE(i,k)==0;
B1(i,k)=0.0000001;
else
B1(i,k)=MCGSE(i,k)/VNHj(i);
end
end
end
end
% 4. SE APLICA EL ALGORITMO VITERBI A LOS PARÁMETROS RE-ESTIMADOS PARA
% VERIFICAR LA VALIDEZ
SE1=zeros(L,T,3);
% MATRIZ DE PROBABILIDAD INICIAL EN t=1
PI1(1,1)=1;
for i=2:N
PI1(i,1)=0.000001;% ACOTA EL NÚMERO HASTA DONDE PUEDE LLEGAR LA PROBABILIDAD PARA QUE NO SEA LEIDA COMO NULA
end;
for l=1:L
for i=1:N
D1(l,i)=-log(PI1(i,1))-log(B1(i,R(l,1)));
end
Dmin1=D1(l,1);
h1=1;
for i=1:N-1
if Dmin1>D1(l,i+1)
Dmin1=D1(l,i+1);
h1=(i+1);
end
end
SE1(l,1,1)=1;
SE1(l,1,2)=h1;
SE1(l,1,3)=D1(l,h1);
end
% ESTADO MAS PROBABLE PARA LAS REALIZACIONES SIGUIENTES 2 A T
for l=1:L
for t=2:T
for j=1:N
D1(l,j)=SE1(l,t-1,3)-log(A1(SE1(l,t-1,2),j))-log(B1(j,R(l,t)));
end
Dmin1=D1(l,1);
h1=1;
for i=1:N-1
if Dmin1>D1(l,i+1)
Dmin1=D1(l,i+1);
h1=(i+1);
end
end
SE1(l,t,1)=t;
SE1(l,t,2)=h1;
SE1(l,t,3)=D1(l,h1);
end
Prob1(l)=exp(-SE1(l,T,3));
end
SEPRO1=0;
for l=1:l
SEPRO1=SEPRO1+SE1(l,T,3);
end
for l=1:L
for t=1:T
LMST(l,t)=SE1(l,t,2);
end
end
PROSECONJ1=exp(-SEPRO1);
salida3=sprintf('ITERACIÓN NÚMERO: %g',CDIT);
disp(salida3)
salida4=sprintf('COSTO TOTAL (TODAS LAS SECUENCIAS): %g',SEPRO1);
disp(salida4)
salida5=sprintf('PROBABILDAD CONJUNTA (TODAS LAS SECUENCIAS): %g',PROSECONJ1);
disp(salida5)
disp('SECUENCIA DE ESTADOS ÓPTIMAS (TODAS LAS SECUENCIAS): ');
LMST
if PROSECONJ1>PROSEC
for l=1:L
for t=1:T
LPS(l,t)= LMST(l,t);
end
PROSEC =PROSECONJ1;
PROSECONJF=SEPRO1;
A=A1;
B=B1;
end
end
if CDIT==I %|epsilon>(Prob1-Prob)
VC=0;
end
salida4=sprintf('\nCosto Total (Todas las Secuencias) Final: %g',SEPRO1);
disp(salida4)
salida5=sprintf('\nProbabilidad Conjunta (Todas las Secuencias) Final: %g',PROSEC);
disp(salida5)
disp('Secuencias de Estados Óptimas (Todas las Secuencias) Final: ');
LOP
disp('Matriz de Probabilidad de Transición de Estados: ');
A
disp('Matriz de Probabilidad de Generación de Simbolos: ');
B