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.

pruebaLab.m
clear all, clc
ruta = 'D:\Estudios\UPM Superior\4Teleco\2Cuatrimestre\Lab. Trat. Dig. Seal\BPSK\Cdigo\Ficheros\test\';

%%%%%%%%%%%% Definicin de Ctes.
pENTRE   = 1; pFILA   = 1; pCOL    = 2;
pCRC     = 2; pTRAMO  = 1; pCODE   = 2;
fINFO    = 0; fTRAMA  = 1; fSIGNAL = 2;
parametros = [14, 10; 7, 4]; 
metodo     = 'hamming';
fichero = {'test1.mat','test2.mat','test3.mat','test4.mat'};  
opcion = 1;


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];
contMUESTRA  = 1;   % Contador de Muestras
MUESTRAS_BIT = 3;   % N muestras/bit
muestraANT   = 4;   % Muestra Anterior
ESTADO       = 5;   % Indica el estado del automata
trama        = [];
BOD          = [1 1 0 0 1 1 0 0];
pFILTRO      = 1;
pVCO         = 2;
pBAUDIO      = 3;
valorUNO     = 6;

%zzzzzzzzz  zzzzzzzzzzzzzzzzzzzzz  zzzzzzzzzzzzzzzzzzz  zzzzzzzzzzzzzzzz
%x(1:2:250) = ones(1,125);
x = [0 1 0 0 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 1];
theta = pi/8;
phi   = [0 0.001 0];
SNR   = 25;
L= 10;
pulso = [1,1,0];
memoria = zeros(3,16);
memoria(pBAUDIO,ESTADO)= 4; %Estado de Rx Trama
memoria(pBAUDIO,valorUNO)=5;
%trama = ReceptorLab(ruta, 1);
%for k = 1:3
%  [I(k,:),Q(k,:)] = bpsk_mod(x,L,SNR, pulso(k), theta, phi(k));  

%   subplot(3,2,1); plot(I); title('Seal I'); grid on;
%   subplot(3,2,2); plot(Q); title('Seal Q'); grid on;
%   I2 = xcorr(I,I);
%   I2 = fftshift(fft(I2));
%   subplot(3,2,3); plot(10*log10(abs(I2)));   grid on;
%   Q2 = xcorr(Q,Q);
%   Q2 = fftshift(fft(Q2));  
%   subplot(3,2,4); plot(10*log10(abs(Q2))); grid on;
%   subplot(3,1,3); plot(I,Q,'.'); title('Constelacion');  grid on;
%   pause
%end;
load([ruta 'test2.mat']);
trama = [];
supertrama = [];
fase = 0;
fase_anterior = 0;
error_fase_bpsk = 0;
error_fase_bpsk_anterior = 0;
Yn_anterior = 0; q = []; i = []; evolucion_fase = [];
evolucion_error_fase_bpsk = [];
estimada = 0;

for g = 1:1,    
    for k=1:length(I)/2,
 %       [aux, memoria, IQc(g,k), decisor(g,k)] = ...
 %             sincroBaudio(I(g,k),Q(g,k), L, memoria);
   %      trama = [trama aux];         
        [decisor(g,k), IQc(g,k), memoria]= sincroFase(I(g,k),Q(g,k),memoria);    
     %%%%%%%%%% Constantes
     
%pVCO    = 2; pMEM = 1; 

% 1.- Bucle
%----------
%>>> 1.1.- Seal de Entrada
%IQ      = I+j.*Q;

%>>> 1.2.- Seal proyectada sobre el eje I
%y       = IQ.*exp(-j*memoria(pVCO,pMEM));

%>>> 1.3.- Ubicamos la constelacion sobre I
%Io       = real(y);
%Qo       = imag(y);
%IQo      = (Io+j.*Qo);
%IQc      = IQo .* exp(-j.*Qo/Io);

%>>> 1.4.- Fase estimada para la siguiente iteracion
%[memoria] = lazoSincroFase(Qo/Io,memoria);

%>>> 1.5.- Decisor: solo estima la seal I
%decisor = 5.*(real(IQc)>0);

  %  senial_compleja=I(k)+j*Q(k);
  %  senial_compleja_comp_frecuencia=senial_compleja*exp(-j*fase);
  %  Io=real(senial_compleja_comp_frecuencia);
  %  Qo=imag(senial_compleja_comp_frecuencia);
  %  [fase,error_fase_bpsk,Yn]=sinc_fase(Io,Qo,fase_anterior,error_fase_bpsk_anterior,Yn_anterior);
  %  senial_compensada=(Io+j*Qo)*exp(-j*error_fase_bpsk);
  %  i=[i real(senial_compensada)];
   % q=[q imag(senial_compensada)];
  %  evolucion_fase=[evolucion_fase fase];
  %  evolucion_error_fase_bpsk=[evolucion_error_fase_bpsk error_fase_bpsk];
   % faseEstimada(g,k) = memoria(2,1); 
     %   errorFase(g,k) = memoria(1,1); 
        
    end;  
    
    %if length(trama)< length(supertrama),
    %    trama = [zeros(1,length(supertrama)-length(trama)) trama]; 
    %end;    
   % trama = trama(1:20);
   % supertrama = [supertrama; trama;];
   % trama = [];

end;
    %IQc = i;
    %supertrama = supertrama;
    subplot(1,1,1); 
       plot(real(IQc)); 
       title('PLL');
       grid on; hold on;    
       plot(I(1,1:length(I)/2),'r');
       %bar(5:L:length(I),supertrama(1,:));
       hold off;
       zoom on
       drawnow
    %subplot(3,1,2);        
    %   plot(real(IQc(2,:)));        
    %   grid on; hold on;    
    %   plot(I(2,:),'r');
    %   bar(5:L:length(I),supertrama(2,:));
    %   hold off;
    %   drawnow
   %subplot(3,1,3);        
   %    plot(real(IQc(3,:)));        
   %    grid on; hold on;    
   %    plot(I(3,:),'r'); 
   %    bar(5:L:length(I),supertrama(3,:));
   %    hold off;
   %    drawnow
   
   
 

Contact us