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.

recuperaPortadora(bandaFI, memoria, ...
function [sonda, memoria, parametros] = recuperaPortadora(bandaFI, memoria, ...                            
                                          fs, primera, H, H_dc, parametros)
                                             
%------------------------------------------------------------------------
%|  [sonda, memoria, parametros,] = recuperaPortadora(bandaFI, memoria, ...                         
%|                                   fs, primera, H_fi, H_dc, parametros)
%------------------------------------------------------------------------
%|   Funcin que extrae una muestra de la portadora de la bandaFI.
%|
%|     Est diseada para operar sobre una muestra y devolver
%|  las condiciones finales. Se debe llamar dentro de un bucle.
%|    
%|  
%|    NO REALIZA VALIDACIN DE LOS PARMETROS DE ENTRADA
%|
%|    Entradas:
%|       1.- BANDA_FI = vector fila con la seal a la frecuencia intermedia.
%|       2.- MEMORIA = matriz 8x max(Orden) con las condiciones iniciales de
%|                     todos los dispositivos empleados en la 
%|                     recuperacin de portadora: 
%|                  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          ]
%|                  Fila 5: [ C.I. Divisor                    ]
%|                  Fila 6: [ C.I. Filtro DC                  ]
%|                  Fila 7: [ C.I. Filtro FI (rec. Portadora) ]
%|
%|       3.- FS      = frecuencia de muestreo
%|       4.- PRIMERA = indica si es la primera iteracin del bucle.
%|       5.- H       = vector fila con todos los coeficientes del filtro
%|                     a la salida del divisor de frecuencia.
%|       6.- H_DC     = vector fila con los coeficientes del filtro DC
%|                      Se emplea para eliminar el valor medio de la seal
%|                       de entrada.
%|       7.- PARAMETROS = matriz que contiene todos lo parmetros
%|                        del receptor:
%|                 PLL                      : [ Kv  ,  Wn , Psi, 0    ]
%|                 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.- CARRIER    = muestra de salida de la portadora.
%|       2.- MEMORIA    = matriz 8x34 con las cond. finales.
%|       3.- PARAMETROS = parmetros del demodulador BPSK
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

 
%  1.- Parmetros del lazo e inicializaciones
%--------------------------------------------
% >>>> 1.1.- Ubicaciones en memoria
cDIV       = 5; % Cond. iniciales del divisor
cFILTRO_DC = 6; % Cond. iniciales del filtro DC
cFILTRO_FI = 7; % Cond. iniciales del filtro FI

% >>>> 1.2.- Ptos. de Observacion en sonda
pCARRIER       = 1; pLINEA     = 2; pDECISOR     = 3;
pOUT_PLL       = 4; pERROR_PLL = 5; pDESFASE_PLL = 6;
pFASE_ESTIMADA = 7; pREF_PLL  = 8; pIN_DIVISOR  = 9;
pOUT_DIVISOR   = 10;

if (primera), 
   sonda(pCARRIER)=5;   
end;

%  2.- Iteracin de recuperacin de portadora
%--------------------------------------------
%%%%%%%% 2.1.- Elevamos al cuadrado la entrada
sigCuad = (bandaFI^2);  

%%%%%%%% 2.2.- Filtramos la componente continua
[sonda(pREF_PLL), aux] = filter(H_dc,1,sigCuad,memoria(cFILTRO_DC,1:length(H_dc)-1));  
memoria(cFILTRO_DC,1:length(aux)) = aux';

%%%%%%%% 2.3.- Nos enganchamos a seal 2*fi
[sonda(pOUT_PLL:pFASE_ESTIMADA), memoria(1:cDIV-1,1:3), parametros] = ...
             pll (sonda(pREF_PLL), memoria(1:cDIV-1,1:3), fs, primera, parametros);

%%%%%%%%% 2.4.- Rectificamos Salida del PLL a niveles TTL
sonda(pIN_DIVISOR)   = (sonda(pOUT_PLL)>0)*5;

%%%%%%%%% 2.5.- Dividimos por 2 la salida, para recuperar portadora
[sonda(pOUT_DIVISOR), memoria(cDIV,1:2)] = divisor(sonda(pIN_DIVISOR), memoria(cDIV,1:2), primera);

%%%%%%%%%% 2.6.- Filtramos 1 armnico de la seal cuadrada
[sonda(pCARRIER), aux] = filter (H,1, sonda(pOUT_DIVISOR), memoria(cFILTRO_FI,1:length(H)-1));
memoria(cFILTRO_FI,1:length(aux)) = aux';



Contact us at files@mathworks.com