function [memoria] = lazoSincroFase(errorFase,memoria)
%------------------------------------------------------------------------
%| function [memoria] = lazoSincroFase(errorFase,memoria)
%------------------------------------------------------------------------
%|
%| Funcion que implementa el lazo del sincronismo de Fase de la
%| practica final:
%| a) Retardo de la Entrada
%| b) Filtro de Lazo: Integrador con ganancia alfa+beta
%| c) VCO :Integrador con ganancia unitaria
%|
%| Ideado para procesar una sola muestra, aplicando condiciones
%| iniciales y devolviendo las finales. Debe invocarse dentro de un
%| bucle.
%|
%| Entradas:
%| 1.- ERROR_FASE = error de fase en la seal BPSK.
%| 2.- MEMORIA = condiciones iniciales de los distintos
%| componentes.
%| Fila 1 : [ Cond. Ini. Filtro de Lazo ]
%| Fila 2 : [ Cond. Ini. VCO ]
%| Salidas:
%| 1.- MEMORIA = condiciones finales de los distintos
%| componentes
%-------------------------------------------------------------------------
%| Autor: Cesar Delgado
%| Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
%%%%%%%%%% Constantes
pFILTRO = 1; pMEM = 1; pIN = 2;
pVCO = 2; pMEM = 1; pOUT = 2;
alfa = 0.1;
beta = 0.001;
% 1.- Bucle
%----------
% 1.1- Filtro de Lazo:
% a) Integrador cuya cte. es alfa+beta
% b) Filtra el error estimado retardado 1 muestra
fil_out = (alfa+beta)*(memoria(pFILTRO,pIN) + memoria(pFILTRO,pMEM));
memoria(pFILTRO,pMEM) = fil_out;
% 1.2.- VCO:
% a) Integrador cuya cte. integracion es 1
% b) Filtra la salida del filtro de lazo
estimada = fil_out + memoria(pVCO,pMEM);
memoria(pVCO,pMEM) = estimada;
% 1.3.- Almacenamos la entrada para ser procesada en siguiente iteracion
% OJO: acoto el error para no provocar cambios bruscos de fase,
% lo que podria conllevar un salto de fase de 180.
memoria(pFILTRO,pIN) = errorFase*(abs(errorFase)<8) + ...
(abs(errorFase)>8)*5*(2*(errorFase>0)-1);