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.

diagramaOjos.m
function diagramaOjos(ruta, TX, fase, nTrama, bitsTrama, frec)
%------------------------------------------------------------------------
%|  function diagramaOjos(ruta, TX, fase, nTrama, bitsTrama, frec)
%------------------------------------------------------------------------
%|    Funcin que representa un diagrama de ojos. Extrae la informacion
%|  de linea de os ficheros generados tanto por el transmisor como el 
%|  receptor BPSK
%|
%|       NO REALIZA VALIDACIN DE PARMETROS DE ENTRADA
%|
%|    Entradas:
%|       1.- RUTA= ruta donde se encuentran los ficheros.
%|
%|       2.- TX: entero que indica el tipo de representacion a realizar
%|                   0 = diagrama de ojos del RX a pantalla completa
%|                   1 = diagrama de ojos del TX a pantalla completa
%|                   2 = diagrama de ojos del TX en pantalla superior
%|                                          y RX en la pantalla inferior
%|                   3 = diagramas de ojos del TX y RX superpuestos en la
%|                       misma pantalla.
%|       3.- FASE        = origen de fases
%|       4.- N_TRAMA     = entero con el nmero de trama a representar
%|       5.- BITS_TRAMA  = n de bits/trama
%|       6.- FREC        = vector fila [Rb fi fs].

%-------------------------------------------------------------------------
%   Autor: Cesar Delgado
%   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

if exist([ruta 'LineaI.tx']),
    
% 1.- Calculos previos
%---------------------
%>>>>>> 1.1.- Forma de Representacion
Tbit = frec(3)/(frec(1)); % N muestras / bit.
N = 3;                    % N Periodos / ventana => Ojos
fase = fase*pi/180;

%>>>>> 1.2.- Visualizamos tramas de 50 bits
lTrama  = round((2^13)/Tbit);  % N de bits a visualizar en el diagrama de ojos
nTrama = bitsTrama*nTrama;     % Bit de comienzo de la trama 
nTrama = floor(nTrama/lTrama); % N de Trama a visualizar 
nTrama = nTrama + (nTrama==0); % Nunca puede ser 0 el numero de trama

% 2.- Creamos y ubicamos la ventana 
%----------------------------------
fig = eyediagram ([1 1], 2);
set(fig,'Visible','Off');
set(fig,'Units','Normalized','Position',[0.07,0.1,0.7,0.7]);


switch TX,
    %%%%%%%%%  DIAGRAMA DE OJOS DEL RECEPTOR 
    case 0,         
        % 1.- Extraemos Seal del Receptor        
        [binario, signal] = extraeSignal(ruta, 7, nTrama, lTrama, frec, 20);        
        I = signal.*cos(fase+pi/4);
        Q = signal.*sin(fase+pi/4);
        
        % 2.- Representamos seal a pantalla completa        
        eyediagram (I+j.*Q, N*Tbit, Tbit, 0, 'r', fig);       
        set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos: Banda Base del Receptor');        
        grid on;
        
    %%%%%%%%%  DIAGRAMA DE OJOS DEL TRANSMISOR
    case 1,         
        % 1.- Extraemos Seal de Transmisor
        ptoObsv = 7 - 5*(exist([ruta 'LineaI.tx'])>0);  
        [binario, I] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);        

        ptoObsv = 8 - 5*(exist([ruta 'LineaQ.tx'])>0); 
        [binario, Q] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);
        
        % 2.- Representamos seal a pantalla completa        
        I = I.*cos(fase+pi/4); % Si la fase es 0 ==> constalacion a 45
        Q = Q.*sin(fase+pi/4); % ya que componente seno = componente coseno
        eyediagram (I+j.*Q, N*Tbit, Tbit, 0, 'b', fig);        
        set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos: PAM I del Transmisor ');        
        grid on;
        
    %%%%%%%%%  DIAGRAMA DE OJOS RECEPTOR ARRIBA / TRANSMISOR ABAJO
    case 2, 
        
        % 1.- Extraccion y normalizacion de ambas seales
       ptoObsv = 7 - 5*(exist([ruta 'LineaI.tx'])>0);
       [binario, signal] = extraeSignal(ruta, ptoObsv, nTrama, lTrama, frec, 0);
       signal = signal/max(signal);
       if ptoObsv < 7,
           [binario, signal2] = extraeSignal(ruta, 7, nTrama, lTrama, frec, 0);
           signal2 = signal2/max(signal2);
       else
           signal2 = signal;
       end;                  
        
       % 2.- Representacion del deagrama de ojos
       eyediagram (signal+j.*signal2, N*Tbit, Tbit, 0, 'r', fig);        
       set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos Normalizado: PAM I del TX y Linea del RX.');        
       grid on;
   
   %%%%%%%%%  DIAGRAMA DE OJOS RECEPTOR + TRANSMISOR
   case 3,
       % 1.- Extraccion y normalizacion de ambas seales
       [binario, signal] = extraeSignal(ruta, 2, nTrama, lTrama, frec, 0);
       signal = signal/max(signal);        
       [binario, signal2] = extraeSignal(ruta, 7, nTrama, lTrama, frec, 0);
       signal2 = signal2/max(signal2);        
        
       % 2.- Representacion del diagrama de ojos
       eyediagram ([signal,signal2], N*Tbit, Tbit, 0, 'b', fig);        
       set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos Normalizado: PAM I del TX y Linea del RX.');        
       grid on;
    
   %%%%%%%%%%% DIAGRAMA DE OJOS DE IQ COMPENSADAS (SEALES DEL LABORATORIO)
   case 4, 
       
        % 1.- Extraemos Seales IQ compensadas
        ptoObsv = 7 - 3*(exist([ruta 'OutI.tx'])>0);  
        [binario, I] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);        

        ptoObsv = 8 - 3*(exist([ruta 'OutQ.tx'])>0); 
        [binario, Q] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);
        
        % 2.- Representamos seal a pantalla completa       
        eyediagram (I+j.*Q, N*Tbit, Tbit, 0, 'b', fig);        
        set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos: IQ Compensadas ');        
        grid on;
       
      %%%%%%%%%%% DIAGRAMA DE OJOS DE IQ COMPENSADAS (SEALES DEL LABORATORIO)
    case 5,
        
        % 1.- Extraemos Seales IQ sin compensar
        ptoObsv = 7 - 5*(exist([ruta 'LineaI.tx'])>0);  
        [binario, I] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);        

        ptoObsv = 8 - 5*(exist([ruta 'LineaQ.tx'])>0); 
        [binario, Q] = extraeSignal(ruta, ptoObsv,  nTrama, lTrama, frec, 20);
        
        % 2.- Representamos seal a pantalla completa       
        eyediagram (I+j.*Q, N*Tbit, Tbit, 0, 'b', fig);        
        set(fig,'Visible','On','Number','off','Name','Diagrama de Ojos: IQ sin Compensar ');        
        grid on;
      
    otherwise, %%%%%%%%%  DIAGRAMA DE OJOS DEL RECEPTOR A PANTALLA COMPLETA     

        % 1.- Extraemos Seal del Receptor      
        [binario, signal] = extraeSignal(ruta, 7, nTrama, lTrama, frec, 0);
        signal = signal/max(signal);
        
        % 2.- Representamos seal a pantalla completas
        eyediagram (signal, N*Tbit, Tbit, 0, 'r', fig);
        set(fig,'Visible','On');
end;
            
else,
    uiwait(errordlg('ERROR: no se ha transmitido nada - diagramaOjos'));
end;

Contact us