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.

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