function [trama, memoria, IQc, decisor] = sincroBaudio(I,Q, L, memoria)
%------------------------------------------------------------------------
%| function [trama, memoria, IQc, decisor] = ...
%| sincroBaudio(I,Q, L, memoria)
%------------------------------------------------------------------------
%|
%| Funcion que implementa el sincronismo de baudio de la
%| practica final.
%| 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.- I, Q = dos muestras de la seal de entrada
%| 2.- L = factor de sobremuestreo
%| 3.- MEMORIA = condiciones iniciales/finales de los distintos
%| sistemas involucrados
%| Fila 1 : [ Cond. Ini. Filtro de Lazo ]
%| Fila 2 : [ Cond. Ini. VCO ]
%| Fila 3 : [ Cond. del Automata ]
%|
%| PARAMETROS DE SALIDA:
%| 1.- TRAMA = secuencia de bits
%| 2.- MEMORIA = condiciones finales del sistema
%| 3.- IQc = seal IQ compensada
%| 4.- DECISOR = salida del decisor
%-------------------------------------------------------------------------
%| Autor: Cesar Delgado
%| Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
%#######################################################################################
% 0.- Definicin de Ctes.
%#######################################################################################
contMUESTRA = 1; % Contador de Muestras
MUESTRAS_BIT = 3; % N muestras/bit
muestraANT = 4; % Muestra Anterior
ESTADO = 5; % Indica el estado del automata
BOD = [1 1 0 0 1 1 0 0];
pFILTRO = 1;
pVCO = 2;
pBAUDIO = 3;
%########################################################################################
% 1.- Autmata
%########################################################################################
trama = [];
IQc = [];
decisor = [];
memoria(pBAUDIO, contMUESTRA) = memoria(pBAUDIO, contMUESTRA) + 1;
memoria(pBAUDIO, MUESTRAS_BIT) = L;
switch memoria(pBAUDIO,ESTADO),
%%%%%%%%%%%%%%%%%%%%%% DETECCION UMBRAL %%%%%%%%%%%%%%%%%%%%%%%
case 0,
[memoria(pBAUDIO,:)] = detectaUmbral(I,Q, memoria(pBAUDIO,:));
%%%%%%%%%%%%%%%%%%%%%% CRUCES POR CERO %%%%%%%%%%%%%%%%%%%%%%%
case 1,
[decisor, IQc, memoria(pFILTRO:pVCO,:)] = ...
sincroFase(I,Q,memoria(pFILTRO:pVCO,:));
[memoria(pBAUDIO,:)] = crucesCero(I,Q, memoria(pBAUDIO,:));
%%%%%%%%%%%%%% FASE DE SINCRONISMO DE MENSAJE %%%%%%%%%%%%%%%%
case 3,
% 1.- Proyectamos seal sobre una portadora unica
% y Rectificamos
%-------------------------------------------------------
[decisor, IQc, memoria(pFILTRO:pVCO,:)] = ...
sincroFase(I,Q,memoria(pFILTRO:pVCO,:));
% 2.- Esperamos primer BOD
%---------------------------
[memoria(pBAUDIO,:)] = sincroMsj2(decisor, memoria(pBAUDIO,:));
% 3.- Si pasamo a la fase de RX,
% insertamos cabeceras SYNCRO y BOD.
%--------------------------------------------
if memoria(pBAUDIO, ESTADO)==4,
trama(1:2:100) = ones(1,50);
trama = [trama 0 BOD];
end;
%%%%%%%%%%%%%%%% FASE DE RECEPCION DE TRAMA %%%%%%%%%%%%%%%%%%
case 4,
% 1.- Proyectamos seal sobre una portadora unica
% y Rectificamos
%-------------------------------------------------------
[decisor, IQc, memoria(pFILTRO:pVCO,:)] = ...
sincroFase(I,Q,memoria(pFILTRO:pVCO,:));
% 2.- Recibimos trama
%--------------------
[trama, memoria(pBAUDIO,:)] = rxTrama2(decisor, memoria(pBAUDIO,:));
end;