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.

moduladorIQ.m
function [canalFI, retardo, Linea, Out,memoria] = moduladorIQ (trama, fi, fs, ...
                                                       Rb, RollOff, QPSK, ...
                                                       fase, delta, memoria, primera)

%------------------------------------------------------------------------
%|  [canalFI, retardo, Linea, Out, memoria] = moduladorIQ (trama, fi, fs, ...
%|                                                     Rb, RollOff, QPSK, ...
%|                                                fase, delta, memoria, primera)
%------------------------------------------------------------------------
%|    Funcin que implmenta un modulador IQ a frecuencia intermedia.
%|     
%|     NO REALIZA VALIDACIN DE PARMETROS
%|   
%|    Entradas:
%|       1.- TRAMA    = Vector de ceros y unos.
%|                      Caso de ser matriz, se toma la primera columna.
%|       2.- FI       = frecuencia intermedia
%|                      Restricciones: fi = k*Rb, siendo k = 10,11...
%|       3.- FS       = frecuencia de muestreo.
%|                      Restricciones: fs = k*fs, siendo k= 2,3,...   
%|       4.- ROLL_OFF = Factor de RollOff del filtro coseno alzado.
%|                      Valor por Defecto: 0.5 
%|       5.- RB       = Rgimen binario de salida 
%|                      Valor por Defecto: 2400 bps 
%|       6.- QPSK    = bandera: 0 = BPSK, 1 = QPSK
%|                      Valor por Defecto: BPSK
%|       7.- FASE    = origen de fases del I-Q en grados
%|       8.- DELTA   = desviacin % de frecuencia respecto la portadora
%|                      Restricciones: -100% a 100%
%|       9.- MEMORIA = vector fila con las condiciones iniciales a aplicar 
%|                     en el coseno alzado
%|
%|    Salidas:
%|       1.- CANAL_FI =  vector fila con la seal BPSK
%|       2.- RETARDO  =  retardo de grupo mximo introducido por modulador
%|       3.- LINEA    =  seal de lnea: PAM + coseno alzado.
%|                       Sirve, tanto para la representacin de las seales
%|                       como de la constelacin.
%|      4.- OUT       = Seales I-Q
%|      5.- MEMORIA = vector fila con las condiciones finales del coseno 
%|                     alzado
%-------------------------------------------------------------------------
%|  Autor: Cesar Delgado
%|  Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------


% Constantes
FS_RB = 1;
I = 1; 
Q = 2;
delta = delta/100;
fase = (fase*pi)/180;

% Las relaciones entre frecuencias debern
% ser nmeros enteros
retardo = 0;
relacion(FS_RB) = fix(fs/Rb);    

% 2.- Bits de entrada a cada rama
%--------------------------------
   % 2.1.- Se reparten los bits por cada rama 
   if QPSK,      
      % Si la trama es de longitud impar se agrega un cero       
      if (length(trama)/2) ~= floor(length(trama)/2)
         trama(length(trama)+1)=0;
      end;      
      in(I,:) = trama(1:2:length(trama));
      in(Q,:) = trama(2:2:length(trama));
      
   else    % Modulacion BPSK  
      in(I,:) = trama;
      in(Q,:) = trama;      
   end;
   
   % 2.2.- Se convierten los "0" a "-1"
   in(Q,:) = 2*in(Q,:) - ones(1,length(in(Q,:)));
   in(I,:) = 2*in(I,:) - ones(1,length(in(I,:)));
      
   % 3.- Generacion de la PAM de cada rama
   %--------------------------------------     
   PAM(I,:) = generaPAM(in(I,:),relacion(FS_RB));
   PAM(Q,:) = generaPAM(in(Q,:),relacion(FS_RB));
   
   % 4.- Filtrado Coseno Alzado de cada rama
   %----------------------------------------
   if RollOff > 0,
      [Linea(I,:), memoria, retardo1] = cosenoAlzado(PAM(I,:), fs, Rb, memoria, RollOff, primera);
      Linea(I,:) = Linea(I,:)./max(abs(Linea(I,:)));
      [Linea(Q,:), memoria, retardo2] = cosenoAlzado(PAM(Q,:), fs, Rb, memoria, RollOff, primera);
      Linea(Q,:) = Linea(Q,:)./max(abs(Linea(Q,:)));
      if primera, retardo  = max([retardo1 retardo2]); end;
   else
      Linea(I,:) = PAM(I,:);
      Linea(Q,:) = PAM(Q,:);
      retardo    = 0;      
   end;
   
   % 5.- Modulacion de cada rama
   %-----------------------------
   %>>>>> 5.1.- Generacion del eje temporal 
   %             OJO: es muy importante comenzar en el instante
   %                  final del tramo anterior para no tener efecto
   %                  ventana (cortes entre cada trama)
   t_ini = memoria(2,1);
   t = t_ini:1/fs:t_ini+((size(Linea,2)-1)*(1/fs));
   memoria(2,1) = t_ini+(size(Linea,2)*(1/fs));
   
   %>>>>> 5.2.- Modulacion en las ramas I y Q.
   angulo = 2*pi*fi*(1+delta)*t + fase*ones(1,length(t));
   Out(I,:) = Linea(I,:).*cos(angulo);   
   Out(Q,:) = Linea(Q,:).*sin(angulo);   
        
   % 6.- Seal de salida del modulador
   %----------------------------------
   canalFI = Out(I,:)+Out(Q,:);


 
   

Contact us