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.

pruebaEnlace.m
clear all, close all, clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-
%%%%%- PROBANDO

pGENERAL = 1; pFS     = 1; pRB   = 2;
pENTRE   = 2; pFILA   = 1; pCOL  = 2;
pCRC     = 3; pTRAMO  = 1; pCODE = 2;
pIQ      = 4; pFASE   = 1; pFI = 2;   
fINFO    = 0; fTRAMA  = 1; fSIGNAL = 2;
I = 1;  Q = 2;
RELOJ        = 8;   % Fila a leer en la memoria
contMUESTRA  = 1;   % Contador de Muestras
contFLANCOS  = 2;   % Contador de Flancos
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
trama        = [];
CAB_SYNCRO   = 100; % Longitud de la cabecera de sincronismo
ruta = 'D:\Estudios\UPM Superior\4Teleco\2Cuatrimestre\Lab. Trat. Dig. Seal\BPSK\Cdigo\Ficheros\';
L = 32;

metodo     = 'hamming';
load([ruta 'paramTX']);


%textoTX = 'hola paquita, me llamo Csar';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----- TRANSMISOR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------------------
% Presentacin
%------------------------------------------------------------
textoTX = 'La leche que le han dado, joder, a ver si funciona ya. Es una lata. Estonces que pasa con todo esto que no funciona parece que se trata del reloj';
TXTtoBinary(textoTX, ruta, 8);

%------------------------------------------------------------
% Enlace
%------------------------------------------------------------

%  1.- Cargamos el fichero de informacin al completo
   %----------------------------------------------------
   info = cargar(ruta,'info.tx',1, inf, fTRAMA);
   lonInfo = length(info);
   load([ruta 'paramTX']);
   
   %  2.- Calculamos nBits de Informacin/ paquete (sin CRC)
   %--------------------------------------------------------
   lonCRC  = floor(140*parametros(pCRC,pCODE)/parametros(pCRC,pTRAMO));
   
   %  3.- Simulacin de procedimientos del nivel de aplicacin
   %----------------------------------------------------------   
   cabecera = 1; % Primera Cabecera: SYNCRO BOD INFO
   if length(info)<=lonCRC,
      cabecera=3;      % Solo hay un paquete: SYNCRO BOD INFO EOD
      lonCRC = length(info);
   end;  
   
   primera = 1;
 %  contador  = 0;   
 %  avance = waitbar(contador, 'TRANSMISOR: aplicando procedimientos de nivel de enlace');
   while ~isempty(info),
   %   contador  = contador +1;
            
      % >>> 2.1.- Extraemos informacin para rellenar 1 trama
      paquete = info(1:lonCRC);      
      info(1:lonCRC) = [];
      
      % >>> 2.2.- Aplicamos cdigos de redundancia cclica
      paquete = generaCRC (paquete, parametros(pCRC,pTRAMO), ...
                                    parametros(pCRC,pCODE), ...                                            
                                    metodo);
                                 
                                 
      % >>> 2.3.- Entrelazamos
      [paquete] = entrelaza(paquete, parametros(pENTRE,pFILA), ...
                                     parametros(pENTRE,pCOL));
      
      % >>> 2.4.- Encapsulamos    
      paquete = encapsula(paquete,cabecera);
      if length(info) <= lonCRC, % Informacin restante <= 1 paquete?

         cabecera = 2;  % Estamos en el ltimo paquete ===> BOD SYNCRO EOD
         lonCRC = length(info);
      else,
         cabecera = 0;  % Por defecto: BOD INFO   
      end;            
      
      % >>> 2.5.- Guardamos lo que llevamos hasta el momento
      guardar(ruta, 'tramas.tx', paquete, fTRAMA, primera);
      primera  = 0;      
      paquete = [];
%      waitbar(140*contador/lonInfo)
   end;  
%   close(avance); 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%% NIVEL FISICO TX + RX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
datos = cargar(ruta,'decisor.rx',1, inf, 1);
PAM1 = 5.*[ 0 0 0 1 1 1 1 1 0 0 0 generaPAM(datos, 32)];
M = zeros(8,34);

M(RELOJ,contMUESTRA)=0;
M(RELOJ,MUESTRAS_BIT)=32;
M(RELOJ,valorUNO)=5;
out = [];

nBits = 0;

for k = 1:length(PAM1)   
 
%   [out(k), M, P] = recuperaPortadora(in(k), M, ...
%      fs, k==1, media, H_fi, P);
%    bandaBase(k) = out(k)*in(k);
%    [Linea(k), aux] = filter(H_bb, 1, bandaBase(k),...
%                              M(cBB,(1:length(H_bb)-1)));
%    M(cBB,1:length(aux)) = aux';
%    Linea(k) = ((Linea(k)>0)| (k < retardo))*5;
%[out] = demoduladorBPSK (in, fs);

 [aux, M] = recuperaReloj(PAM1(k), M, k==1, 10);
 % M(RELOJ, contMUESTRA) = M(RELOJ, contMUESTRA) + 1; % Contador Muestras ++
 %[trama, M(RELOJ,:)] = rxTrama(PAM1(k), M(RELOJ,:));
 %M(RELOJ,:) = sincroMsj(PAM1(k), M(RELOJ,:));
 %M(RELOJ,:) = periodoReloj(PAM1(k), 10, M(RELOJ,:));
% if M(RELOJ,contMUESTRA)==0,
%    M(RELOJ,MUESTRAS_BIT)
 %   cont = round(k/32)
 %   if cont > 108, break; end;
 %end; 
 out = [out aux];
  
end; 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----- RECEPTOR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%------------------------------------------------------------
% Enlace
%------------------------------------------------------------


 %  1.- Cargamos el fichero de informacin al completo
   %----------------------------------------------------
   tramas = out;
   lonInfo  = length(tramas);
   
   %  2.- Calculamos nBits de Informacin/ paquete (sin CRC)
   %--------------------------------------------------------
   lonTrama  = 248; % 1 Trama: SYNCRO BOD INFO = 100 + 8 + 140
   
   %  3.- Simulacin de procedimientos del nivel de aplicacin
   %----------------------------------------------------------   
   cabecera = 1; % Primera Cabecera: SYNCRO BOD INFO
   if length(tramas)<=256,
      cabecera=3;      % Solo hay un paquete: SYNCRO BOD INFO EOD
      lonTrama = length(tramas);
   end; 
   
   primera = 1;
 %  contador = 1;
 %  avance = waitbar(0,'RECEPTOR: aplicando procedimientos de nivel de enlace');
   
   while ~isempty(tramas),
      
      % >>> 2.1.- Extraemos informacin para rellenar 1 trama
      paquete = tramas(1:lonTrama);    
      tramas(1:lonTrama) = [];      

      % >>> 2.2.- Encapsulamos    
      [paquete, errorCab]= desencapsula(paquete,cabecera);
      
      if length(tramas) <= 156, % Informacin restante <= 1 paquete?
         cabecera = 2;  % Estamos en el ltimo paquete ===> BOD SYNCRO EOD
         lonTrama = length(tramas);
      else,
         cabecera = 0;  % Por defecto: BOD INFO
         lonTrama = 148; 
      end;            

      
      % >>> 2.3.- Desentrelazamos
      [paquete] = desentrelaza(paquete, ...
                               parametros(pENTRE,pFILA),...
                               parametros(pENTRE,pCOL));
      
      % >>> 2.4.- Calculamos cdigos de redundancia cclica
      [paquete, errorCRC] = recuperaCRC (paquete, parametros(pCRC,pTRAMO), ...
                                                  parametros(pCRC,pCODE), ...
                                                  metodo);                                        
     
      
      % >>> 2.5.- Guardamos lo que llevamos hasta el momento
      guardar(ruta, 'info.rx', paquete, fTRAMA, primera);
      primera  = 0;            paquete  = [];      
      
  %    waitbar(contador/lonInfo);
  %    contador = contador +1;
   end;   
%   close(avance)

%------------------------------------------------------------
% Presentacin
%------------------------------------------------------------
bin = cargar(ruta,'info.rx',1,inf,fTRAMA);
textoRX = char(binaryToTXT(bin, ruta, 8));



%tramas = cargar(ruta,'tramas.tx',1, inf, fTRAMA);
 
%paquete = tramas(1:248);
%[paquete, errores(1)]= desencapsula(paquete,3);




Contact us