function [memoria] = crucesCero(I,Q, memoria)
%------------------------------------------------------------------------
%| function [memoria] = crucesCero(I,Q, memoria)
%------------------------------------------------------------------------
%|
%| Funcion que implementa el estado inicial del automata
%| de sincronismo de baudio: fase de enganche.
%|
%| Emplea dos mecanismos para detectar seal a la entrada:
%| a) Deteccion de Umbral: espera que una muestra supere
%| un umbral de amplitud
%| b) Cruces por cero : espera detectar la secuencia
%| de sincronismo, es decir,
%| cruces por cero cuasi-equiespaciados.
%|
%| PARAMETROS DE ENTRADA:
%| 1/2.- I, Q = dos muestras de la seal de entrada
%| 3 .- MEMORIA = vector fila con las condiciones iniciales
%| del automata
%|
%| PARAMETROS DE SALIDA:
%| 1.- MEMORIA = vector fila con las condiciones finales
%| del automata
%-------------------------------------------------------------------------
%| Autor: Cesar Delgado
%| Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
%%%% 0.- Definicion de Ctes.
contMUESTRA = 1; % Contador de Muestras
contCRUCES = 2; % Contador de Flancos
MUESTRAS_BIT = 3; % N muestras/bit
muestraANT = 4; % Muestra Anterior
ESTADO = 5; % Estado del automata
% 1.- Deteccion de Cruces por Cero en seal I
%--------------------------------------------
% 1.1.- Muestra anterior de signo contrario a la actual
cruce = ((I>0) ~= memoria(muestraANT));
% 1.2.- Si hay cruce, se revisan posibles transiciones
if cruce,
% 1.2.1.- Incremento contador de cruces por cero
memoria(contCRUCES)= memoria(contCRUCES)+1;
% 1.2.2 - No estamos en el primer cruce
% Y
% Espaciamiento entre cruces
% fuera del +/- 20% Muestras/Bit ===>
%
% ==> Pasamos al estado de deteccion de umbral
if memoria(contCRUCES) > 1 & ( ...
(memoria(contMUESTRA) > 1.2*memoria(MUESTRAS_BIT)) | ...
(memoria(contMUESTRA) < 0.8*memoria(MUESTRAS_BIT)) ),
memoria(ESTADO) = 0;
% 1.2.3.- Recibimos 15 cruces equiespaciados ===>
% =====> Pasamos a la recepccion del sincronismo
% de mensaje
elseif memoria(contCRUCES) > 5,
memoria(ESTADO) = 3;
end;
cruce = 0;
memoria(contMUESTRA) = 1;
end;
% 2.- Guardamos el signo de la muestra actual
%---------------------------------------------
memoria(muestraANT) = (I>0);