No BSD License  

Highlights from
BPSK Simulator for Low Rate Transmisions

image thumbnail
from BPSK Simulator for Low Rate Transmisions by César Delgado González
BPSK Simulator for didactical purposes. Systemic coding style.

...
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 at files@mathworks.com