www.pudn.com > demodula.rar > detectorFase.m
function [DF, memoria] = detectorFase(PAM1, PAM2, memoria, primera)
%------------------------------------------------------------------------
%| function [DF, memoria] = detectorFase(PAM1, PAM2, memoria, primera)
%------------------------------------------------------------------------
%| Función simula la acción de un comparador de fase-fercuencia up-down
%| digital activado por flancos de bajada. Su margen dinámico es 2*pi
%| y espera señales TTL.
%|
%| Está diseñada para filtrar una sola muestra y devolver
%| las condiciones finales. Se debe llamar dentro de un bucle.
%|
%| NO REALIZA VALIDACIÓN DE LOS PARÁMETROS DE ENTRADA
%|
%| Entradas:
%| 1.- PAM1 = muestra de una señal PAM.
%| 2.- PAM2 = muestra de la otra señal PAM.
%| 3.- MEMORIA = vector de 3 muestras con el valor
%| de las muestras actuales [PAM1 PAM3 OUT].
%| Sirve para la detección de flancos de bajada.
%| 4.- PRIMERA: bandera: indica si se está en la 1º iteración
%|
%| Salidas:
%| 1.- DF = muestra de salida tras la comparación
%| 2.- MEMORIA = vector de 3 muestras con las cond. finales
%-------------------------------------------------------------------------
%| Autor: Cesar Delgado
%| Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
flanco = zeros(1,2);
% 1.- Detección de Flanco
%------------------------
if ~isempty(memoria) & ~primera
flanco(1) = (memoria(1) > PAM1); % Se ha detectado flanco de PAM1
flanco(2) = (memoria(2) > PAM2); % Se ha detectado flanco de PAM2
end;
% 2.- Cálculo de muestra de salida
%---------------------------------
% 2.1.- Se ha detectado algún flanco
if (flanco(1) | flanco(2))
if flanco(1), % Flanco de bajada UP
DF = 5;
flanco(1)=0;
end;
if flanco(2), % Flanco de bajada DOWN
DF=0;
flanco(2)=0;
end;
% 2.2.- No hay ningún flanco => Salida = Salida anterior
else
if isempty(memoria) | primera
DF = 0;
else
DF = memoria(3);
end;
end;
% 3.- Actualización Memoria
%--------------------------
memoria(1) = PAM1;
memoria(2) = PAM2;
memoria(3) = DF;