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


function memoria = periodoReloj(linea, nFlancos, memoria) 
 
%------------------------------------------------------------------------ 
%|   function memoria = periodoReloj(linea, nFlancos, memoria) 
%------------------------------------------------------------------------ 
%|      Función que recupera el periodo de Reloj del sistema. Está  
%|   ideada para procesar una muestra en cada llamada. 
%| 
%|       Método de Recuperación de Reloj: detecta 10 flancos consecutivos 
%| (prescindiendo del primero de todos) y  promedia el número de muestras 
%|  que hay en esos 10 flancos.     
%| 
%|  Parámetros de entrada: 
%|      1.- LINEA     = muestra de una señal de línea de niveles TTL 
%|      2.- N_FLANCOS = nº de flancos empleados para detectar el reloj 
%|      2.- MEMORIA   = vector fila de longitud mínima 16 o nFlancos,  
%|                      si éste supera los 16 flancos                        
%| 
%|   Parámetros de Salida: 
%|     1.- MUESTRAS_BIT= número de muestars que tiene un bit 
%|     2.- MEMORIA     = vector fila con las condiciones finales del reloj  
%------------------------------------------------------------------------- 
%|   Autor: Cesar Delgado 
%|   Fecha: 19-Abril-2.004 
%------------------------------------------------------------------------- 
 
%%%%% Ctes. 
contMUESTRA  = 1;   % Contador de Muestras 
contFLANCOS  = 2;   % Contador de Flancos 
MUESTRAS_BIT = 3;   % Nº muestras/bit 
muestraANT   = 4;   % Muestra Anterior 
ESTADO       = 5;   % Banera: 0 = recuperación sincronismo; 1 = recepción trama 
valorMUESTRA = 7;   % Suma de los voltajes de las muestras en 1 símbolo 
nRetardos    = 25; 
 
%  1.- Detectamos Flanco de Bajada 
%---------------------------------- 
flanco = (memoria(muestraANT) > linea);       
       
%  2.- Aumentamos contador de flancos 
%------------------------------------ 
if flanco, 
   memoria(contFLANCOS) = memoria(contFLANCOS) + 1; 
   if (memoria(contFLANCOS)<nRetardos+1), memoria(contMUESTRA)=1; end;    
end; 
 
 
%  3.- Si han llegado N alternancias "0"-"1" => Recuperamos sincronismo  
%----------------------------------------------------------------------------- 
if (memoria(contFLANCOS) > (nFlancos+nRetardos+1)) 
    
    %%%% 3.1.- Promedio de Muestras / Símbolo 
    muestrasBit  =  memoria(contMUESTRA); 
    nBits        =  2*(memoria(contFLANCOS)-nRetardos); 
    memoria(MUESTRAS_BIT) =  round(muestrasBit/nBits);         
      
    %%%% 3.2.- Inicializamos variables de estado          
    memoria(ESTADO)       = 3; % Pasamos a recibir la cabecera de sincronismo  
    memoria(contFLANCOS)  = 0; 
    memoria(valorMUESTRA) = 0; 
    memoria(contMUESTRA)  = 0; 
end; 
       
 %  4.- Guardamos muestra actual en memoria 
 %-----------------------------------------             
 memoria(valorMUESTRA) = memoria(valorMUESTRA) + linea; 
 memoria(muestraANT)   = linea;             
 %memoria(MUESTRAS_BIT) = 32;