www.pudn.com > demodula.rar > recuperaReloj.m, change:2006-02-02,size:3275b


function  [trama, memoria] = recuperaReloj(linea, memoria, primera, N) 
%------------------------------------------------------------------------ 
%  [trama, memoria] = recuperaReloj(linea, memoria, primera, N) 
%------------------------------------------------------------------------ 
%|    Funci�n que implementa la recuperaci�n de reloj mediante  
%|  detecci�n de flancos de bajada. 
%|    Est� dise�ada para tratar una sola muestra, por lo que se deber� llamar 
%|  dentro de un bucle.  
%| 
%|    Entradas: 
%|       1.- LINEA   = muestra de la se�al de l�nea (tren de pulsos TTL) 
%|       2.- MEMORIA = vector fila con la memoria del reloj. 
%|       3.- PRIMERA = indica si esta es la primera iteraci�n, es decir, 
%|                     en memoria no hay ninguna muestra del pasado. 
%|       4.- N       = n� de flancos usados para detectar sincronismo 
%|                     Restricciones: N<=50, que es la long. de SYNCRO 
%| 
%|    Salida: 
%|       1.- TRAMA    = vector de "0" y "1" con la se�al detectada 
%------------------------------------------------------------------------- 
%   Autor: Cesar Delgado 
%   Fecha: 19-Abril-2.004 
%------------------------------------------------------------------------- 
 
%####################################################################################### 
% 0.- Definici�n de Ctes. 
%####################################################################################### 
contMUESTRA  = 1;   % Contador de Muestras 
muestraANT   = 4;   % Muestra Anterior 
ESTADO       = 5;   % Banera: 0 = recuperaci�n sincronismo; 1 = recepci�n trama 
trama        = []; 
BOD          = [1 1 0 0 1 1 0 0]; 
 
 
%######################################################################################## 
% 1.- Aut�mata 
%######################################################################################## 
memoria(contMUESTRA) = memoria(contMUESTRA) + 1; % Contador Muestras ++ 
 
if (~primera) & (~isempty(linea)), 
    
   switch memoria(ESTADO), 
       
  %%%%%%%%%%%%%%%%%%%%%%%%%%%% PERIODO RELOJ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
   case 0,        
      memoria = periodoReloj(linea, N, memoria);       
      %break; 
       
  %%%%%%%%%%%%%%%%%%%%%%%%% SINCRONISMO DE MENSAJE %%%%%%%%%%%%%%%%%%%%%%%%% 
  case 3,  
      memoria = sincroMsj(linea, memoria);      
      
     %   Si pasamo a la fase de RX, insertamos cabeceras SYNCRO y BOD.      
     if memoria(ESTADO)==4,          
        trama(1:2:100) = ones(1,50); 
        trama = [trama 0 BOD];     
     end;      
     %break; 
       
% %%%%%%%%%%%%%%%%%%%%%%%%%%%% RECEPCI�N DE TRAMA %%%%%%%%%%%%%%%%%%%%%%%%%%% 
   case 4,      
     [trama, memoria] = rxTrama(linea, memoria);   
     %break; 
  end; % End del Switch 
    
elseif primera,  
   memoria(muestraANT) = linea; 
end; 
 
%------------------------------------------------------------------------- 
%    Los motivos por los que se conservan las cabeceras SYNCRO + BOD son: 
%     a) Comprobaci�n entre las tramas del RX y TX, para verificar 
%        errores y la repercusi�n de errores en las cabeceras 
%     b) Desacoplar las funciones del nivel 2 de las del nivel 1 
%-------------------------------------------------------------------------