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.

nivFisicoRX.m
%------------------------------------------------------------------------
%|  	nivFisicoRX
%------------------------------------------------------------------------
%|      Script que realiza las funciones del nivel fsico del Receptor:
%|          a) Demodulacin
%|          b) Recuperacin de Reloj
%|           
%|       Procesa bloque a bloque la informacin recibida. Los bloques
%|   sern de N_MUESTRAS, conteniendo estas N_MUESTRAS un nmero entero
%|   de bits. 
%|      L         = 32 muestras/bit      
%|      N_MUESTRAS= nBits*L, siendo nBits=1,2,3 ...
%|
%|       El fichero de entrada ser siempre 'out.tx', que debe existir.
%|        
%|
%|  Parametros Importantes:
%|         1.- MEMORIA: matriz de 9 filas x max(Orden) columnas con la 
%|                      donde se almacena la memoria de los distintos 
%|                      componentes
%|                  Fila 1: [ C.I. Comparador de Fases        ]
%|                  Fila 2: [ C.I. Filtro Lead Lag Activo     ]
%|                  Fila 3: [ C.I. VCO                        ]
%|                  Fila 4: [ Salida VCO Rectificada          ]
%|                  Fila 5: [ C.I. Divisor                    ]
%|                  Fila 6: [ C.I. Filtro DC                  ]
%|                  Fila 7: [ C.I. Filtro FI (rec. Portadora) ]
%|                  Fila 8: [ C.I. Filtro BB (rec. Seal)     ]
%|                  Fila 9: [ C.I. Reloj                      ]
%-------------------------------------------------------------------------
%|   Autor: Cesar Delgado
%|   Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------

fileIn = 'out.tx';
if ~exist([ruta fileIn]),
   uiwait(errordlg('ERROR EN TX: no se ha transmitido nada - NivFisicoRX()'));
end;


%########################################################################
%  SIMULACIN DE LA RECEPCIN
%########################################################################
% 0.- Constantes
%---------------
% >>>>> 0.1.- Parametros importantes dentro de la memoria
RELOJ        = 9;   % Fila a leer en la memoria
MUESTRAS_BIT = 3;   % N muestras/bit

% >>>>> 0.2.- Nombres de ficheros donde guardar 
%                los ptos. de observacion
outSonda = {'carrier.rx';  'Linea.rx'; 'decisor.rx'; ... 
            'outPLL.rx'; 'errorPLL.rx'; 'desfasePLL.rx'; ...
            'faseEstimada.rx'; 'refPLL.rx';  'inDivisor.rx';  ...
            'outDivisor.rx'}; 
             

% 1.- Situacin de reposo inicial
%--------------------------------
memoria = zeros(9,max(Orden) + 30*(max(Orden)<10)); 

% 2.- Inicializacin de variables de bucle
%-----------------------------------------
avance = waitbar(0,'RECEPTOR: Recibiendo seal (nivel Fsico)');
load([ruta 'paramTX.mat'],'lonSignal'); % Parametros del TX
posicion = 1; % Posicin dentro del fichero
primera  = 1; % Primera Iteracin? (renovamos seales almacenadas)
nMuestras = L*round((2^8)/L);% N de muestras a leer.

while posicion > 0, 
   
   %    3.-  Cargamos la trama 
   %--------------------------
   [bandaFI,posicion] = cargar(ruta,fileIn, posicion, nMuestras, fSIGNAL);   
   
   %    4.-  Demodulamos la trama     
   %-----------------------------
   [trama, memoria, sonda] = demoduladorBPSK (bandaFI, frec, Orden, ...                                 
                                               memoria, N, Bw,  primera, paramPLL);
                                                    
   %    5.- Guardamos las seales importantes del Rx
   %------------------------------------------------
   % >>> 5.1.-Guardamos Trama
    guardar(ruta , 'tramas.rx', trama , fTRAMA , primera);
    
    % >>> 5.2.-Guardamos Ptos. Observacion del RX
    for pos=1:length(outSonda)
        guardar(ruta , char(outSonda(pos)), sonda(pos,:), fSIGNAL, primera);
    end;
      
    %   6.- Reinicializamos variables del bucle
    %------------------------------------------
    %     6.1.- Compensamos el retardo de grupo introducido por el 
    %             filtro coseno alzado del TX.    
    lonFI = length(bandaFI);
    L     = memoria(RELOJ,MUESTRAS_BIT) + ... 
           (memoria(RELOJ,MUESTRAS_BIT)==0);
    nBits = lonFI/L; % N bits que contiene la bandaFI
    if (nBits)~=(round(nBits)), 
        nBits = ceil(nBits);
        bandaFI(lonFI+1:nBits*L) = bandaFI(lonFI)*ones(1,nBits*L-lonFI);
    end;
    
    %     6.2.- Inicializamos variables del bucle 
    primera=0; bandaFI = []; sonda = [];  
    waitbar(posicion/(lonSignal*8));
 end;
  
 %   7.- Limpiamos entorno
 %------------------------
 close(avance);
 clear  trama   sonda    nMuestras pos
 clear  bandaFI posicion primera outSonda

Contact us