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


function [sonda, memoria, parametros] = ... 
                                 pll(ref, memoria, fs, primera, parametros) 
%------------------------------------------------------------------------ 
%|  [sonda, memoria, parametros] = ... 
%|                             pll(ref, memoria, fs, primera, parametros) 
%------------------------------------------------------------------------ 
%|   Función que simula la acción de un lazo enganchado en fase, con  
%| los siguientes componentes: 
%|     a) Comparador de Fases: tipo UP-DOWN, niveles TTL, activo por 
%|                             flancos de bajada 
%|     b) Filtro del Lazo: Lead Lag activo. 
%|     c) VCO: se construye calculando el ángulo que ha de aplicarse 
%|             a un tono para que emita una señal en fase con la  
%|             referencia. Esto se realiza integrando el error de fases. 
%|                (ph_o / ph_in) = Kv/s => Integrador de fase 
%|               
%|     Está diseñada para operar sobre una muestra y devolver 
%|  las condiciones finales. Se debe llamar dentro de un bucle. 
%| 
%|      La rectificacion inicial a niveles TTL de la señal de entrada 
%|  se realiza detectando cruces por 0, por eso es importante que no 
%|  exista componente continua en la señal de entrada. 
%|   
%|    NO REALIZA VALIDACIÓN DE LOS PARÁMETROS DE ENTRADA 
%| 
%|    Entradas: 
%|       1.- REF     = muestra de la señal de referencia a tratar. 
%|       2.- MEMORIA = matriz 4x 3 con las condiciones iniciales  
%|                     de dispositivos del pll(DF + FILTRO + VCO). 
%|                  Fila 1: [ C.I. Comparador de Fases        ] 
%|                  Fila 2: [ C.I. Filtro Lead Lag Activo     ] 
%|                  Fila 3: [ C.I. VCO                        ] 
%|                  Fila 4: [ Salida VCO Rectificada          ] 
%| 
%|       3.- FS      = frecuencia de muestreo 
%|       4.- PRIMERA = indica si es la primera iteración del bucle. 
%|       5.- PARAMETROS = matriz que contiene todos lo parámetros 
%|                        del receptor: 
%|                 PLL                      : [ Kv  ,  Wn , Psi, resp ] 
%|                 FILTRO-LAZO              : [ TAU1, TAU2,  0 , 0    ] 
%|                 CTES. FILTRO-LAZO DIGITAL: [ b0  ,  b1 ,  1 , b1   ]; 
%| 
%|     La matriz de parámetros está ideada para que el PLL conforme un bloque, 
%|   del que el usuario solo debe conocer los parámetros típicos del lazo del 
%|   PLL (1º fila) 
%|     El resto de parámetros los calcularán funciones particulares, de  
%|   esta forma es muy simple reemplazar el Lead-Lag empleado por otro 
%|  filtro del lazo cualquiera o usar una transformación Invariante al Impulso 
%|  en lugar de una Bilineal. 
%| 
%|     Salidas: 
%|       1.- SONDA      = vector con 4 muestras de los ptos.  
%|                        de obsv. del PLL:  
%|                  1.1.- Salida PLL 
%|                  1.2.- Error PLL: salida del filtro de lazo 
%|                  1.3.- Desfase PLL: salida del comp. fases 
%|                  1.4.- Fase Estimada: salida del integrador de fases 
%|   
%|       2.- MEMORIA    = vector con las cond. finales 
%|       3.- PARAMETROS = matriz de parámetros del demodulador BPSK 
%------------------------------------------------------------------------- 
%|   Autor: Cesar Delgado 
%|   Fecha: 19-Abril-2.004 
%------------------------------------------------------------------------- 
 
 
% 1.- Parámetros del PLL 
%####################### 
 
% >>>>> 1.1.- Parametros del PLL 
%------------------- 
pPLL    = 1; 
pKv     = 1; 
 
% >>>> 1.2- Ubicaciones en memoria de CI 
%--------------------------------------- 
cDF     = 1; % Condiciones Iniciales del Comp. Fases 
cFILTRO = 2; % Condiciones Iniciales del Lead Lag Activo 
cVCO    = 3; % Condiciones Iniciales del VCO 
cTTL    = 4; % Salida VCO rectificada para comparar fases 
 
% >>>> 1.3.- Posicion de la muestras anterior MEMORIA(cTTL, pOUT)  
%--------------------------------------- 
pOUT    = 1;               
 
% >>>> 1.4.- Ubicacion de los parametros 
%--------------------------------------- 
if primera, 
   pLEAD   = 2; 
   TAU1    = 1; 
   TAU2    = 2;    
   pWn     = 2; 
   pPsi    = 3; 
   Kd      = 5/(2*pi); 
   K       = 2*pi*parametros(pPLL,pKv)*Kd; % Ganancia del lazo (Hz)    
   parametros(pLEAD, TAU1) = K/parametros(pPLL,pWn)^2; % Ctes. de tiempo del filtro 
   parametros(pLEAD, TAU2) = 2*parametros(pPLL,pPsi)/parametros(pPLL,pWn);         
end; 
 
% >>>>> 1.5.- Ptos. de observacion dentro de matriz sonda  
%--------------------------------------- 
pOUT_PLL       = 1; pERROR_PLL     = 2;  
pFASE_ESTIMADA = 4; pDESFASE_PLL = 3; 
 
 
% 2.- Iteración del PLL 
%###################### 
 
% 2.1.- Rectificamos entrada 
%---------------------------- 
TTL  = (ref > 0)*5;   
 
% 2.2.- Generamos salida + realimentación 
%---------------------------------------- 
%  ---- 2.2.1.- DF: Comparador de fase UP-DOWN por flancos bajada 
[sonda(pDESFASE_PLL), memoria(cDF,1:3)]  = detectorFase(TTL, ... 
                                          memoria(cTTL,pOUT), ... 
                                          memoria(cDF,1:3), primera); 
%  ---- 2.2.2.- F(S): Filtro Lead-Lag Activo                                                                            
[sonda(pERROR_PLL), memoria(cFILTRO,1), parametros] = leadLag(sonda(pDESFASE_PLL), ...  
                                             memoria(cFILTRO,1), fs, ... 
                                             primera, parametros);  
%  ---- 2.2.3.- VCO:  
%              Integrador para conseguir ángulo a aplicar sobre un Tono 
%              Referencia: -sen, al usar DF por flancos de bajada.                                     
[sonda(pFASE_ESTIMADA), memoria(cVCO,1)] = miVCO(sonda(pERROR_PLL), memoria(cVCO,1), fs, ... 
                                                 parametros(pPLL,pKv)); 
sonda(pOUT_PLL) = -sin(sonda(pFASE_ESTIMADA));  
 
% 2.3.- Rectificación + Copia en memoria de la realimentación 
%------------------------------------------------------------ 
memoria(cTTL,pOUT) = (sonda(pOUT_PLL) > 0)*5;