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.

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 at files@mathworks.com