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.

desencapsula.m
function [datos, error] = desencapsula(paquete, syncro, tolerancia)
%------------------------------------------------------------------------
%|  function [datos, error] = desencapsula(paquete, syncro, tolerancia)
%------------------------------------------------------------------------
%|    Funcin que desencapsula un paquete de datos de 140 bits mximo.
%|  Trata cada paquete de forma aislada, as, solo tratar aquellas
%|  secuencias que estn entra bloques de sincronismo BOD y/o EOD.  
%|   Esl resto lo devolver al programa que lo llam. 
%|
%|    Entradas:
%|       1.- PAQUETE =  vector fila o columna.
%|                    Si hay ms de 140 bits en datos, se trunca a 140.
%|       2.- SYNCRO = indica si se requiere algn campo extra para sincrona:
%|                    0 : no hay que agregar ningn campo de sincronismo
%|                    1 : hay que agregar el campo SYNCRO al comiezo
%|                    2 : hay que agragar el campo EOD al final 
%|                    3 : hay que agregar tanto SYNCRO como EOD     
%|
%|       3.- TOLERANCIA = vector fila que indica los (%) de errores
%|                        admitidos en las cabeceras de sincronismo
%|                        para considerarlas como tal.
%|                        (1,1) = SYNCRO, (1,2) = BOD, (1,3) = EOD
%|                        Valores por defecto: [ 0 0 0 ]
%|                        (No se ha implementado)
%|     Salida
%|       1.- DATOS   = vector de ceros y unos con mensaje (mx. 140 bits
%|       2.- ERROR    = cdigo con los posibles errores. La aplicacin 
%|                      llamante deber saber cmo tratarlas.
%|                     -1 : ha habido algn fallo de uso de la funcin
%|                      0 : todo ha ido OK
%|                      N : porcentaje (%) de errores en cabecera
%|                           
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

% ------------------>DEFINICIN DE CONSTANTES<-----------------------
T_SYNCRO = 1;
T_BOD    = 2;
T_EOD    = 3;
L_INFO   = 140; 
L_SYNCRO = 100;
L_BOD    = 8;
L_EOD    = 8;
BOD      = [1 1 0 0 1 1 0 0];
EOD      = [1 1 1 0 0 1 1 1];
SYNCRO(1:2:L_SYNCRO)=1;
SYNCRO = [SYNCRO 0];
datos = [];
error = -1;

% 1.- Se comprueban los parmetros de entrada
%--------------------------------------------

if nargin < 2,
   disp ('ERROR: faltan parmetros en la funcin desencapsula().');
   return;
elseif isempty(paquete),   
   disp ('ERROR: no hay informacin que desencapsular().');   
   return;   
elseif length(paquete) < (L_BOD+L_EOD),
   disp('ERROR: imposible detectar cabeceras BOD/EOD en desencapsular()');
   disp('        L_PAQUETE < 2 * L_BOD');
   return;
elseif (syncro==3) & (length(paquete) < (L_SYNCRO+L_BOD+L_EOD)),
   disp('ERROR: imposible detectar cabeceras BOD/EOD en desencapsular(). ');
   disp('       Se espera cabecera de sincronismo de rfaga pero no hay ');
   disp('       suficientes bits en el paquete: L_PAQUETE < L_SYNCRO + 2*EOD');
   return;  
end;

%       1.2.- Valores por Defecto   
if nargin < 3,
      tolerancia = [0 0 0];
elseif isempty(tolerancia),
      tolerancia = [0 0 0];      
end;
if isempty(syncro), syncro=0; end;
   
% 2.- Desencapsulado 
%-------------------
tolerancia = tolerancia./100;

switch syncro,
    
%%%%%%%%%%%%%%%%%%%% CABECERA CONVENCIONAL: [BOD INFO] %%%%%%%%%%%%%%%%%%%
case 0,  
   %  1.- Coincidencias en la cabecera
   coincidencias = (paquete(1:L_BOD) == BOD); 
   coincidencias = find(coincidencias);
    nCoincidencias = length(coincidencias);    
   if nCoincidencias <= tolerancia(T_BOD)*L_BOD,
      error=0;
   else
      error=(1-(nCoincidencias/L_BOD))*100;
   end;     
   
   %  2.- Desencapsulamos
   datos = paquete(L_BOD+1:length(paquete));    
  % break;
   
%%%%%%%%%%%%%%%%%%% CABECERA SINCRONISMO: [SYNCRO BOD INFO] %%%%%%%%%%%%%%%%%%%
case 1,
   %  1.- Coincidencias en las cabeceras
   aux = paquete(1:L_SYNCRO+L_BOD);
   coincidencias = (aux == [SYNCRO BOD]); 
   coincidencias = find(coincidencias);
   nCoincidencias = length(coincidencias);   
   
   if nCoincidencias <= tolerancia(T_SYNCRO)*(L_SYNCRO+L_BOD),
      error=0;
   else
      error=(1-(nCoincidencias/(L_SYNCRO+L_BOD)))*100;
   end;     
   
   %  2.- Desencapsulamos
   datos = paquete(L_SYNCRO+L_BOD+1:length(paquete));
   
   %break;
   
%%%%%%%%%%%%%%%%%%% CABECERA FINAL: [BOD INFO EOD] %%%%%%%%%%%%%%%%%%%
case 2,
   %  1.- Coincidencias en las cabeceras
   aux = [paquete(1:L_BOD), ...
         paquete((length(paquete)-L_EOD+1):length(paquete))];     
   coincidencias = (aux==[BOD EOD]);
   coincidencias = find(coincidencias);   
   nCoincidencias = length(coincidencias);    
   if nCoincidencias <= tolerancia(T_EOD)*(L_EOD+L_BOD),
      error=0;
   else
      error=(1-(nCoincidencias/(L_EOD+L_BOD)))*100;
   end;     
   
   %  2.- Desencapsulamos
   datos = paquete(L_BOD+1:length(paquete)-L_EOD);
   
   %break;
   
%%%%%%%%%%%%%%%%%%% TODAS LAS CABECERAS: [SYNCRO BOD INFO EOD] %%%%%%%%%%%%%%%%%%%
case 3,
   
   %  1.- Coincidencias en las cabeceras
   aux = [paquete(1:L_SYNCRO+L_BOD), ... 
          paquete((length(paquete)-L_EOD+1):length(paquete))];
   coincidencias = (aux==[SYNCRO BOD EOD]);
   coincidencias = find(coincidencias);   
    nCoincidencias = length(coincidencias);    
   if nCoincidencias <= tolerancia(T_SYNCRO)*(L_SYNCRO+L_EOD+L_BOD),
      error=0;
   else
      error=(1-(nCoincidencias/(L_SYNCRO+L_EOD+L_BOD)))*100;
   end;     
   
   %  2.- Desencapsulamos
   datos = paquete((L_BOD+L_SYNCRO+1):(length(paquete)-L_EOD));
  % break;
end;

Contact us