www.pudn.com > demodula.rar > pll.m
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;