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.

sincroMsj.m
function [memoria] = sincroMsj(linea, memoria)

%------------------------------------------------------------------------
%|   function [memoria] = sincroMsj(linea, memoria)
%------------------------------------------------------------------------
%|      Funcin que recupera el sincronismo del mensaje, fijndose en
%|  la primera cabecera BOD que aparece. Elimina la ambiguedad entre
%|  "0" y "1" que introduce toda modulacin PSK.
%|
%|       Mtodo de Recuperacin de Sincronismo del Mensaje: detecta
%|   la secuencia primera secuencia BOD. 
%|
%|  Parmetros de entrada:
%|      1.- LINEA     = muestra de una seal de lnea de niveles TTL
%|      2.- MEMORIA   = vector fila de longitud mnima 16 o nFlancos, 
%|                      si ste supera los 16 flancos                       
%|
%|   Parmetros de Salida:
%|     1.- MEMORIA     = vector fila con las condiciones finales del reloj 
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

%%%%%% Ctes.
contMUESTRA  = 1;   % Contador de Muestras
MUESTRAS_BIT = 3;   % N muestras/bit
muestraANT   = 4;   % Muestra Anterior
ESTADO       = 5;   % Banera: 0 = recuperacin sincronismo; 1 = recepcin trama
valorUNO     = 6;   % Voltaje que se le asigna al "1" lgico
valorMUESTRA = 7;   % Suma de los voltajes de las muestras en 1 smbolo
contCAB      = 8;   % N que especificael nmero de bits de la cabecera BOF rx.
posCAB       = 9;   % Donde comenzamos a guardar la 1 cabecera  BOF
BOD          = [1 1 0 0 1 1 0 0];


%  1.- Suma acumulada de la amplitud de todas muestras de 1 smbolo      
%------------------------------------------------------------------
 memoria(valorMUESTRA) = memoria(valorMUESTRA) + linea;
        
%  2.- Esperamos Recibir el Primer BOF
%-------------------------------------
% ---- 2.1.- N de coincidencias con la cabecera BOD que llevamos
contadorCAB = memoria(contCAB); 
   
% ---- 2.2.- Si he llegado a la ltima muestra de un bit
        %  Mecanismo de deteccin de fin de bit:
        %      a) Deteccin de flanco
        %      b) Contador de muestras
        %    
        %    Si (se detecta un flanco y estamos al final de 1 bit) 
        %      o (llegamos a cubrir el nmero de muestras que tiene un bit)
        %      reiniciamos cuenta de muestras. 
%condicion = ( ( (memoria(muestraANT)>linea) |  (memoria(muestraANT)>linea) ) & ...
%               ( memoria(contMUESTRA) > (memoria(MUESTRAS_BIT)*0.9) ) );

condicion =  (memoria(contMUESTRA) >= memoria(MUESTRAS_BIT));

if condicion,
   
      % 2.2.1.- Determino si es "0" o "1"
   memoria(posCAB + contadorCAB) = ...                
      (ceil(memoria(valorMUESTRA)/memoria(contMUESTRA))>2); 
   
      % 2.2.2.- Compruebo que el bit entrante y los anteriores coinciden
      %         con fragmento de la cabecera BOD
   comprueba = (memoria(posCAB:posCAB+contadorCAB) == BOD(1:contadorCAB+1));
  
     % 2.2.2.1.-   En caso de coincidencia, incremento el nmero de
     %              bits coincidente y guardo en memoria el bit actual
   if (comprueba==ones(1,length(comprueba))),
      memoria(valorUNO) = 5;       % Coincidencia  
      contadorCAB   = contadorCAB+1;
      memoria(contCAB)  =  contadorCAB;  
   elseif (comprueba==zeros(1,length(comprueba))),
      memoria(valorUNO) = 0;       % Coincidencia, pero con signo contrario
      contadorCAB   = contadorCAB+1;
      memoria(contCAB)  =  contadorCAB;
   else
         % 2.2.2.2.- Si no coincide con BOD, actualizo valores de  
         %            contadores y memoria
         
      % >>>>> Si los 2 ltimos elementos de la memoria son
      %        iguales (dos "0"  dos "1"), los mantenemos en memoria.
      if (contCAB>0) & ... 
            (memoria(posCAB+contadorCAB)==memoria(posCAB+contadorCAB-1)),
         memoria(posCAB:posCAB+1) = memoria(posCAB+contadorCAB-1:posCAB+contadorCAB);
         memoria(contCAB)=2;
         
      % >>>>> Caso Contrario el primer timo elemento pasa a ser el 1
      else
         memoria(posCAB)= memoria(posCAB+contadorCAB);
         memoria(contCAB)=1;      
      end;   
   end;   
   
   %------ 2.3.-Reinicio variables de manejo de cada bit
   memoria(contMUESTRA) = 0;
   memoria(valorMUESTRA)= 0;
end;
 
%  3.- Salgo del estado si he encontrado secuencia coincidente con BOD
%--------------------------------------------------------------------- 
if contadorCAB>7, % N flancos que tiene la cambecera SYNCRO entera.
   memoria(ESTADO) = 4; % Pasamos a la recepcin de mensaje.  
end;   

 memoria(muestraANT)   = linea;  

Contact us