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.

nivFisicoLab.m
%------------------------------------------------------------------------
%|  	nivFisicoLab
%------------------------------------------------------------------------
%|      Script que realiza las funciones del nivel fsico del Receptor:
%|
%|
%|  Parametros Importantes:
%|       1.- MEMORIA = condiciones iniciales/finales de los distintos
%|                     sistemas involucrados
%|                   Fila 1 : [ Cond. Ini. Filtro de Lazo ]
%|                   Fila 2 : [ Cond. Ini. VCO            ]
%|                   Fila 3 : [ Cond. del Automata        ]
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

fichero = {'test1.mat','test2.mat','test3.mat','test4.mat'};  
fileIn  = char(fichero(opcion));

if ~exist([ruta fileIn]),
   uiwait(errordlg('ERROR: no se encuentra el fichero de Test - NivFisicoLab()'));
end;

%########################################################################
%  SIMULACIN DE LA RECEPCIN
%########################################################################

%%%%%%% Carga de Fichero
load([ruta fileIn]);
lonSignal = length(I);
save([ruta 'paramTX.mat'],'lonSignal');
guardar(ruta,'InI.tx',I,2,1);
guardar(ruta,'InQ.tx',Q,2,1);
I = []; Q = [];

%%%%%%% Constantes
L       = 10;
pFILTRO = 1; pIN   = 2;
pVCO    = 2; pOUT  = 1;
pBAUDIO = 3; 
ESTADO  = 5;


% 1.- Situacin de reposo inicial
%--------------------------------
memoria = zeros(3,20); 
trama   = [];
IQc     = [];
decisor = [];
primera = 1;
faseEstimada = [];
errorFase    = [];

% 2.- Inicializacin de variables de bucle
%-----------------------------------------
primera  = 1; % Comienza la trama?
load([ruta 'paramTX.mat'],'lonSignal');
avance = waitbar(0,'RECEPTOR: Recibiendo seal del Laboratorio(nivel Fsico)');
nMuestras = L*round((2^9)/L);% N de muestras a leer.
posicion  = 1;

% 3.- Recuperamos los Bits
%-------------------------
while posicion>0,    
    
   % 3.1.- Cargamos informacion de los ficheros
    I           = cargar(ruta,'InI.tx',posicion, nMuestras, 2);
   [Q,posicion] = cargar(ruta,'InQ.tx',posicion, nMuestras, 2);
    
   
   % 3.2.- Recuperamos trama  
   for k= 1:length(I),
       
       % 3.2.1.- Extraemos 1 bit de la trama
        [aux, memoria, QIc, dec] = ...
                              sincroBaudio(I(1),Q(1), L, memoria);
        trama = [trama aux];           
    
        % 3.2.2.- Guardamos seales utiles 
        %           a partir del momento en que hay seal
        if memoria(pBAUDIO, ESTADO)>0, 
              IQc          = [IQc QIc]; 
              decisor      = [decisor dec];
              faseEstimada = [faseEstimada,memoria(pVCO,pOUT)]; 
              errorFase    = [errorFase,memoria(pFILTRO,pIN)];
              inPh = [inPh I(1)];
              quad = [quad Q(1)];
       else,
              IQc          = [];               
              decisor      = [];
              faseEstimada = [];
              errorFase    = [];
              inPh         = [];
              quad         = [];
        end;
        
        %  3.2.4.- Limpiamos entorno
        QIc = []; aux = []; dec = []; I(1) = []; Q(1) = [];
    end; 
   
   
   % 3.3.- Guardamos lo que llevamos   
   guardar(ruta , 'tramas.rx'      , trama       , fTRAMA , primera);
   guardar(ruta , 'tramas.tx'      , trama       , fTRAMA , primera);  
   guardar(ruta , 'LineaI.tx'      , inPh        , fSIGNAL, primera);
   guardar(ruta , 'LineaQ.tx'      , quad        , fSIGNAL, primera);
   guardar(ruta , 'OutI.tx'        , real(IQc)   , fSIGNAL, primera);
   guardar(ruta , 'OutQ.tx'        , imag(IQc)   , fSIGNAL, primera);
   guardar(ruta , 'decisor.rx'     , decisor     , fSIGNAL, primera);
   guardar(ruta , 'errorPLL.rx'    , errorFase   , fSIGNAL, primera);
   guardar(ruta , 'faseEstimada.rx', faseEstimada, fSIGNAL, primera);
   
   % 3.4- Inicializamos variables de bucle
   primera = 0;
   IQc = []; faseEstimada = []; errorFase = []; decisor=[]; trama = [];
   inPh = []; quad = [];           
   waitbar(posicion/(8*lonSignal));
 end;
                
 %   4.- Limpiamos entorno
 %------------------------
 close(avance);
 clear  trama I Q IQc  decisor errorFase k
 clear  faseEstimada avance primera memoria

Contact us