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.

crucesCero(I,Q, memoria)
function [memoria] = crucesCero(I,Q, memoria)
%------------------------------------------------------------------------
%|  function [memoria] = crucesCero(I,Q, memoria)
%------------------------------------------------------------------------
%|
%|    Funcion que implementa el estado inicial del automata 
%|  de sincronismo de baudio: fase de enganche.
%|
%|     Emplea dos mecanismos para detectar seal a la entrada:
%|       a) Deteccion de Umbral: espera que una muestra supere
%|                       un umbral de amplitud
%|       b) Cruces por cero    : espera detectar la secuencia
%|                        de sincronismo, es decir,
%|                        cruces por cero cuasi-equiespaciados.
%| 
%|    PARAMETROS DE ENTRADA:
%|       1/2.- I, Q    = dos muestras de la seal de entrada
%|       3  .- MEMORIA = vector fila con las condiciones iniciales
%|                      del automata
%|                 
%|     PARAMETROS DE SALIDA:
%|       1.- MEMORIA = vector  fila con las condiciones finales 
%|                     del automata
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

%%%% 0.- Definicion de Ctes.
contMUESTRA  = 1;   % Contador de Muestras
contCRUCES   = 2;   % Contador de Flancos
MUESTRAS_BIT = 3;   % N muestras/bit
muestraANT   = 4;   % Muestra Anterior
ESTADO       = 5;   % Estado del automata

% 1.- Deteccion de Cruces por Cero en seal I
%--------------------------------------------

%   1.1.- Muestra anterior de signo contrario a la actual
cruce = ((I>0) ~= memoria(muestraANT));

%   1.2.- Si hay cruce, se revisan posibles transiciones
if cruce,
    
    %  1.2.1.- Incremento contador de cruces por cero
    memoria(contCRUCES)= memoria(contCRUCES)+1;
    
    %  1.2.2 - No estamos en el primer cruce
    %                       Y
    %         Espaciamiento entre cruces 
    %         fuera del +/- 20% Muestras/Bit ===>
    % 
    % ==>  Pasamos al estado de deteccion de umbral              
    if memoria(contCRUCES) > 1 & ( ...
       (memoria(contMUESTRA) > 1.2*memoria(MUESTRAS_BIT)) | ...
       (memoria(contMUESTRA) < 0.8*memoria(MUESTRAS_BIT)) ),
            memoria(ESTADO) = 0;
            
    % 1.2.3.- Recibimos 15 cruces equiespaciados  ===>
    % =====> Pasamos a la recepccion del sincronismo
    %        de mensaje
    elseif  memoria(contCRUCES) > 5,
            memoria(ESTADO) = 3;            
    end;  
    cruce = 0;
    memoria(contMUESTRA) = 1;    
end;

% 2.-  Guardamos el signo de la muestra actual
%---------------------------------------------
memoria(muestraANT) = (I>0);

Contact us at files@mathworks.com