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.

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