www.pudn.com > demodula.rar > rxTrama.m, change:2006-02-02,size:2256b


function [trama, memoria] = rxTrama(linea, memoria) 
%------------------------------------------------------------------------ 
%|   function [trama, memoria] = rxTrama(linea, memoria) 
%------------------------------------------------------------------------ 
%|      Función que recibe promedia un conjunto de muestras 
%|  asignándoles el valor "0" o "1". 
%| 
%|  Parámetros de entrada: 
%|      1.- LINEA     = muestra de una señal de línea de niveles TTL 
%|      2.- MEMORIA   = vector fila de longitud mínima 16 o nFlancos,  
%|                      si éste supera los 16 flancos                        
%| 
%|   Parámetros de Salida: 
%|     1.- TRAMA       = bit resultante de la traducción. 
%|     2.- MEMORIA     = vector fila con las condiciones finales del reloj  
%------------------------------------------------------------------------- 
 
%%%%%% Ctes. 
contMUESTRA  = 1;   % Contador de Muestras 
MUESTRAS_BIT = 3; 
muestraANT   = 4; 
valorUNO     = 6; 
valorMUESTRA = 7;   % Suma de los voltajes de las muestras en 1 símbolo 
trama        = []; 
 
%  1.- Suma acumulada de la amplitud de todas muestras de 1 símbolo 
%------------------------------------------------------------------ 
memoria(valorMUESTRA) = memoria(valorMUESTRA) + linea; 
    
%  2.- Al final del símbolo estimamos si era un "0" o un "1" 
%----------------------------------------------------------- 
  % Detectamos flanco tras haber contado un número de muestras  
  % superior al 60% de las muestras que tiene 1 bit 
flanco = ( (memoria(muestraANT)~=linea)    & ... 
              ( memoria(contMUESTRA) > (memoria(MUESTRAS_BIT)*0.8) ) ); 
 
condicion = flanco | (memoria(contMUESTRA) >= memoria(MUESTRAS_BIT)); 
 
if condicion,   
   valorMedio = ceil(memoria(valorMUESTRA)/memoria(contMUESTRA));     
  % if (memoria(contMUESTRA) >= 0.8*memoria(MUESTRAS_BIT)), 
      trama  = (valorMedio > 2);     
      if ~(memoria(valorUNO) > 0), % 0V ==> "1" 
         trama = ~trama; 
      end;                 
      memoria(contMUESTRA) = 0; 
      memoria(valorMUESTRA)= 0;       
      % else,       
   %   memoria(valorUNO) = ~memoria(valorUNO); 
 %     memoria(valorMUESTRA)= linea*memoria(contMUESTRA); 
 % end;    
end;       
 
 memoria(muestraANT)   = linea;