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.

nivFisicoTX.m
%------------------------------------------------------------------------
%|  	nivFisicoTX
%------------------------------------------------------------------------
%|      Script que contiene las funciones del nivel fsico del Transmisor:
%|         1.- Codificacin de Canal
%|         2.- Modulacin
%|      
%|      Memoria:
%|         Fila 1: [ Cond. Iniciales Coseno Alzado]
%|         Fila 2: [ Instante inicial de los generadores sinusoidales]
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %   SIMULACIN DE LA TRANSMISIN
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 fileIn = 'tramas.tx'; 
 if ~exist([ruta fileIn]);
    uiwait(errordlg('ERROR TX: no se han aplicado las funciones del nivel de enlace - NivFisicoTX()'));
 end; 
 
 % 1.- Declaracin de las variables del bucle
 %-------------------------------------------
  posicion  = 1;
  L         = parametros(pGENERAL, pFS)/parametros(pGENERAL, pRB);
  nBits     = round(2^12/L);% N bits a procesar / bloque  
  lonSignal = 0;
  primera   = 1;
  memoria   = zeros(2,6*L + 1);
  No        = Ptx-S_N;
  No        = (10.^(No/10))*1e-3;
  Ptx       = (10.^(Ptx/10))*1e-3;
  Ac        = sqrt(Ptx*100);    % Amplitud del tono sobre 50 Oh
                                % para dar la potencia deseada   
  An        = sqrt(No*100);     % Amplitud del Ruido
  avance = waitbar(0,'TRANSMISOR: emitiendo seal (nivel Fsico)');
    
  while posicion>0,           
       
     
      % 2. Sacamos la informacin de tramo en tramo
      %--------------------------------------------
      [info,posicion] = cargar(ruta,fileIn,posicion,nBits,fINFO);
      
      % 3. Codificacin de canal + Modulacin IQ
      %------------------------------------------
      [canalFI, retardo, Linea, Out, memoria] = moduladorIQ (info, ...
                                                parametros(pIQ, pFI), ...
                                                parametros(pGENERAL, pFS), ...
                                                parametros(pGENERAL, pRB), ...
                                                Roll_Off, 0, ...
                                                parametros(pIQ, pFASE), ...                                     
                                                delta, memoria, primera);
                                  
      % 4. Buscamos la amplitud del tono para dar la potencia deseada
      %--------------------------------------------------------------
      canalFI = canalFI./max(abs(canalFI)); % Amplitud Normalizada
      guardar(ruta,'cons.tx',canalFI,fSIGNAL,primera);
          
      % 5. Le agregamos ruido del nivel indicado
      %-----------------------------------------
      canalFI = Ac.*canalFI+An.*randn(1,length(canalFI));
          
      % 6.- Guardamos lo que llevamos: Trama + Salida + Ptos. Observacin
      %------------------------------------------------------------------                            
      guardar(ruta,'out.tx',canalFI,fSIGNAL,primera);      
      guardar(ruta,'LineaI.tx',Linea(I,:),fSIGNAL,primera);
      guardar(ruta,'LineaQ.tx',Linea(Q,:),fSIGNAL,primera);
      guardar(ruta,'OutI.tx',Out(I,:),fSIGNAL,primera);
      guardar(ruta,'OutQ.tx',Out(Q,:),fSIGNAL,primera);         
      
      % 7.- Reseteamos las variables del bucle
      %---------------------------------------
      primera   = 0;
      lonSignal = lonSignal+length(canalFI);
      info      = [];      
      canalFI   = [];         
          
      waitbar(posicion/lonInfo);
   end;   
   
   % 8.- Guardamos los parmetros del TX
   %-------------------------------------
   save([ruta 'paramTX'], 'parametros', 'lonSignal', ...
      'delta','ruta', 'Roll_Off', 'metodo');
   
   close(avance);

Contact us