No BSD License  

Highlights from
BPSK Simulator for Low Rate Transmisions

image thumbnail

BPSK Simulator for Low Rate Transmisions

by

 

01 Jun 2004 (Updated )

BPSK Simulator for didactical purposes. Systemic coding style.

pll.m
function [sonda, memoria, parametros] = ...
                                 pll(ref, memoria, fs, primera, parametros)
%------------------------------------------------------------------------
%|  [sonda, memoria, parametros] = ...
%|                             pll(ref, memoria, fs, primera, parametros)
%------------------------------------------------------------------------
%|   Funcin que simula la accin 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 seal en fase con la 
%|             referencia. Esto se realiza integrando el error de fases.
%|                (ph_o / ph_in) = Kv/s => Integrador de fase
%|              
%|     Est diseada 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 seal de entrada
%|  se realiza detectando cruces por 0, por eso es importante que no
%|  exista componente continua en la seal de entrada.
%|  
%|    NO REALIZA VALIDACIN DE LOS PARMETROS DE ENTRADA
%|
%|    Entradas:
%|       1.- REF     = muestra de la seal 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 iteracin del bucle.
%|       5.- PARAMETROS = matriz que contiene todos lo parmetros
%|                        del receptor:
%|                 PLL                      : [ Kv  ,  Wn , Psi, resp ]
%|                 FILTRO-LAZO              : [ TAU1, TAU2,  0 , 0    ]
%|                 CTES. FILTRO-LAZO DIGITAL: [ b0  ,  b1 ,  1 , b1   ];
%|
%|     La matriz de parmetros est ideada para que el PLL conforme un bloque,
%|   del que el usuario solo debe conocer los parmetros tpicos del lazo del
%|   PLL (1 fila)
%|     El resto de parmetros los calcularn funciones particulares, de 
%|   esta forma es muy simple reemplazar el Lead-Lag empleado por otro
%|  filtro del lazo cualquiera o usar una transformacin 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 parmetros del demodulador BPSK
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------


% 1.- Parmetros 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.- Iteracin del PLL
%######################

% 2.1.- Rectificamos entrada
%----------------------------
TTL  = (ref > 0)*5;  

% 2.2.- Generamos salida + realimentacin
%----------------------------------------
%  ---- 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.- Rectificacin + Copia en memoria de la realimentacin
%------------------------------------------------------------
memoria(cTTL,pOUT) = (sonda(pOUT_PLL) > 0)*5;

Contact us