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.

sincroMsj2(linea, memoria)
function [memoria] = sincroMsj2(linea, memoria)

%------------------------------------------------------------------------
%|   function [memoria] = sincroMsj2(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 at files@mathworks.com