pIN = 1; % Posicin en memoria de la entrada anterior
pOUT = 2; % Posicin en memoria de la salida anterior
pMUESTRAS = 3; % Contador de muestras entre flancos
pFLANCOS = 4; % Contador de flancos transcurridos
pMEDIO = 5; % Nmero medio de muestras por flanco.
% Sirve para evitar errores de fase en portadora
%nFlancos = 150;
% 1.- Divisin por 2
%-------------------
%>>>>>>>>>>>> 1.1.- Deteccin de flanco de subida
flanco = 0;
if (~primera) & (~isempty(memoria)),
flanco = (memoria(pIN) < doble); % Entrada Anterior < Entrada Actual
else % ==> Flanco de subida
memoria(pFLANCOS) = 0;
end;
%mitad = memoria(pOUT);
%>>>>>>>>>>> 1.2.- Si se detect flanco ==> Se conmuta salida
% de "0" a "1" o viceversa
if flanco,
memoria(pFLANCOS) = memoria(pFLANCOS)+1;
%%%% Fase de captura de nmero muestras medio por flanco
%%%%%%%% Conmutamos salida cada flanco detectado
if (memoria(pFLANCOS)<nFlancos),
% Conmutamos salida
if memoria(pOUT) == 0,
mitad = 5;
else
mitad = 0;
end;
memoria(pOUT) = mitad; % Salida actual
%%%% Clculo del nmero medio de muestras / flanco
elseif (memoria(pMEDIO) ==0),
memoria(pMEDIO) = round(memoria(pMUESTRAS) / (2*nFlancos))-1;
if memoria(pOUT) == 0,
mitad = 5;
else
mitad = 0;
end;
memoria(pOUT) = mitad; % Salida actual
memoria(pMUESTRAS) = 0;
%%%% Conmutamos salida cada pMEDIO muestras, siendo pMEDIO
%%%% el valor medio de muestras por flanco.
elseif (memoria(pMUESTRAS) >= memoria(pMEDIO)),
if memoria(pOUT) == 0,
mitad = 5;
else
mitad = 0;
end;
memoria(pMUESTRAS) = 0;
memoria(pOUT) = mitad; % Salida actual
end;
flanco = 0;
%>>>>>>>> 1.3.- Si no se detect flanco, se conserva el valor anterior
else
if primera | isempty(memoria),
mitad = doble;
else
mitad = memoria(pOUT);
end;
end;
% 1.4.- Actualizacin de la memoria
memoria(pIN) = doble; % Entrada actual
memoria(pOUT) = mitad; % Salida Actual
memoria(pMUESTRAS) = memoria(pMUESTRAS)+1;