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.

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