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.

cargar(ruta,file,posicion, ...
function [out,posicion] = cargar(ruta,file,posicion, ... 
                                 nMuestras, tipo, nTrama, retardo)
%------------------------------------------------------------------------
%|  [out,posicion] = cargar(ruta,file,posicion, nMuestras, tipo, nTrama)
%------------------------------------------------------------------------
%|    Funcin que lee un fichero y extrae, bien la seal correspondiente
%|  a un paquete, bien los bits de una trama.
%|
%|    Entradas:
%|       1.- RUTA      : dnde est fichero con los cdigos (Fila caracteres)
%|       2.- FILE      : nombre del fichero con los cdigos (Fila caracteres)
%|       3.- POSICION  : posicin desde la que se desea comenzar a leer
%|       4.- N_MUESTRAS: nmero de muestras a leer. 
%|                       Si vale "inf", desde posicion hasta el final
%|       5.- TIPO      : tipo de fichero a leer:
%|                0 = INFO: secuencia de "0" y "1" con la informacin a TX.
%|                1 = TRAMA:  fichero de tramas, organizado matricialmente.
%|                2 = SEAL:  fichero con la seal del algn punto de observ.
%|       6.- N_TRAMA   : n de trama que se quiere leer.
%|                       Si toma valor > 1 => se calcula la posicin (se ignora 
%|                                            el parmetro de entrada posicin)
%|                       Valor por defecto: a partir de posicin.
%|       7.- RETARDO    : indica n de muestras a prescindir en una trama.
%|                        til para ignorar retardos introducidos por procesado
%|                                          
%|    Salida:
%|       1.- OUT      = vector fila con la informacin deseada.
%|       2.- POSICION = posicin donde qued el puntero.
%|                    
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

% 1.- Validacin de Parmetros
%------------------------------
if nargin < 5,
   disp ('ERROR: faltan parmetros en Carga()');
else    
   
   % 2.- Apertura del fichero para lectura
   %---------------------------------------
   Fic=fopen([ruta file],'rb');
      
   % 3.- Extraccin de la informacin deseada
   %-----------------------------------------
   
   switch tipo,
      
      
  %%%%%%%%%%%%%%%%%%% : TRAMA: secuencia de "0" y "1" %%%%%%%%%
   case {0,1}, 
      if nargin < 6,       % Sacamos a partir de una posicin
         if (posicion > 1), fseek(Fic, posicion, -1); end;
      else (nTrama > 1), % Sacamos una determinada trama
          posicion = ((nTrama-1)*nMuestras);
          fseek(Fic, posicion, -1); 
      end;              
      out      = fread(Fic,nMuestras,'uint8')';
      posicion = ftell(Fic); 
      fseek(Fic, 1, 0);
      
      % Estamos al final del fichero:
      %    a) FEOF(Fic) es verdadero
      %              O
      %    b) Un desplazamiento unitario nos devuelve 
      %           al principio del fichero
      %----------------------------------------------
      %   Hay que implementar las dos alternativas porque
      % en ocasiones la poscion final es justo la anterior
      % a la ultima y no considera estar al final del fichero
      
      if feof(Fic) | fseek(Fic, 1, 0), posicion=-1; end;
      fclose(Fic);
      return;
      
   %%%%%%%%%%%%%%%%%%% : SEAL: muestras de cualquer seal %%%%%%%%%%%%%%%
   case 2, 
      if nargin < 6,        % Sacamos a partir de una posicin         
          if (posicion > 1), fseek(Fic, posicion, -1); end;          
       elseif (nTrama > 1), % Sacamos una determinada Trama   
          if nargin < 7, retardo = 0;
          elseif isempty(retardo), retardo = 0; end;
          posicion = 8*((nTrama-1)*(nMuestras)-1)+8*retardo;
          fseek(Fic, posicion, -1);
          fseek(Fic, posicion, -1);
      else,                 % Sacamos la primera trama con un retardo
          posicion = 8*retardo + (retardo==0);
          if (posicion > 1), fseek(Fic, posicion, -1); end;
      end;                   
      out      = fread(Fic,nMuestras,'float64')';
      posicion = ftell(Fic);
      % Estamos al final del fichero:
      %    a) FEOF(Fic) es verdadero
      %              O
      %    b) Un desplazamiento unitario nos devuelve 
      %           al principio del fichero
      %----------------------------------------------
      %   Hay que implementar las dos alternativas porque
      % en ocasiones la posicion final es justo la anterior
      % a la ultima y FEOF devuelve falso
      
      if feof(Fic) | fseek(Fic, 1, 0), posicion=-1; end;               
      fclose(Fic);
      return;
   end;                         
 end; 

Contact us at files@mathworks.com