Tercer Capitulo


8.    CAPITULO -III: DISEÑO Y RESULTADOS DEL EXPERIMENTO COMPARATIVO ENTRE LAS TECNICAS DE MODULACION DIGITAL


8.1  FASE DE DISEÑO

En esta parte del diseño, tomaremos la primera parte de los simuladores, la herramienta Matlab, donde realizaremos la simulación de las modulaciones primarias, es decir, ASK, FSK y PSK. Para esto haremos referencia a lo que se mencionó anteriormente del estudio implícito de los comandos de programación de Matlab y los aplicaremos haciendo una referencia en cada línea de programación que se haya usado.

8.1.1     PROCEDIMIENTO

Primero que todo se genera un archivo .m, donde se escriben todas las líneas de código involucradas en la simulación. Este procedimiento es repetitivo para las tres simulaciones; a continuación veremos el procedimiento hecho para generar la modulación ASK.

8.2  SIMULACION MODULACION ASK

Como se dijo anteriormente, las líneas de código las iremos mencionando para dejar clara la operación de cada una en el programa.

1.2.1     PROGRAMA MODULACION ASK EN MATLAB

function ASK(g,f)%funcion ASK([secuencia de entrada],frecuencia)
% MODULACION
%EJEMPLO PARA INGRESAR DATOS
%PSK([110000111],2);
if nargin > 2
    error('muy extenso');
elseif nargin==1
    f=1;
end
if f<1
    error('frecuencia tiene que ser mayor que 1');
end

t=0:2*pi/99:2*pi;%tiempo
cp=[]; sp=[];
mod=[]; mod1=[]; bit=[];

for n=1:length(g)%recorrer la secuencia de entrada para generar modulacion
    if g(n)==0
        die=ones(1,100);
        se=zeros(1,100);
    else g(n)==1
        die=2*ones(1,100);%amplitud 1 para un uno de la secuencia de entrada
        se=ones(1,100);%amplitud 2 para un cero de la secuencia de entrada
    end
    c=sin(f*t);% generar señal modulada en ASK
    cp=[cp die];
    mod=[mod c];
    bit=[bit se];
end

ask=cp.*mod;%producto punto de vectores en cp donde esta los ceros y unos y la modulacion
subplot(2,1,1);plot(bit, 'LineWidth', 1.5);grid on;%graficar secuencia de entrada
title('Señal binaria');
axis([0 100*length(g) -2.5 2.5]);

subplot(2,1,2);plot(ask, 'LineWidth', 1.5);grid on;%graficar señal modulada en ASK
title('Modulacion ASK');
axis([0 100*length(g) -2.5 2.5]);

end

Como nos podemos dar cuenta, en el programa para hacer un comentario es necesario poner el símbolo de porcentaje, los comentarios son las definiciones que hace cada línea de programación pero no afectan en nada al programa que hace la modulación.

8.2.2     GRAFICA MODULACION ASK EN MATLAB

En la siguiente gráfica podremos apreciar la modulación ASK, en la parte de arriba vemos la secuencia de bits que entra al modulador, y en la parte de abajo vemos la señal modulada.

  

8.3 SIMULACION MODULACION FSK

En esta parte veremos una modificación en la frecuencia, es decir, para cero toma un valor f1 y para 1 toma un valor f2.

8.3.1     PROGRAMA MODULACION FSK EN MATLAB

function FSK(g,f0,f1)%funcion ASK([secuencia de entrada],frecuencia1,frecuencia2)
% MODULACION
%EJEMPLO PARA INGRESAR DATOS
%PSK([110000111],2);
if nargin > 3
    error('muy extenso');
elseif nargin==1
    f0=1;
    f1=2;
    elseif nargin==2
        f1=2;
end
val0 = ceil(f0)-(f0);
val1 = ceil(f1)-(f1);
if val0 ~=0 || val1 ~=0
    error('Frecuencia debe ser entero');
end
if f0<1 || f1 <1
    error('frecuencia tiene que ser mayor que 1');
end

t=0:2*pi/99:2*pi;%tiempo de la señal modulada
cp=[]; sp=[];
mod=[]; mod1=[]; bit=[];

for n=1:length(g)%recorrer el vector de la secuencia de entrada
    if g(n)==0
        die=ones(1,100);
         c=sin(f0*t);%señal con frecuencia1
        se=zeros(1,100);
    else g(n)==1
        die=ones(1,100);
         c=sin(f1*t);%señal con frecuencia2
        se=ones(1,100);
    end
    cp=[cp die];
    mod=[mod c];
    bit=[bit se];
end

fsk=cp.*mod;
subplot(2,1,1);plot(bit, 'LineWidth', 1.5);grid on;%grafica secuencia de entrada
title('Señal binaria');
axis([0 100*length(g) -2.5 2.5]);

subplot(2,1,2);plot(fsk, 'LineWidth', 1.5);grid on;%grafica señal modulacion FSK
title('Modulacion FSK');
axis([0 100*length(g) -2.5 2.5]);
end

8.3.2     GRAFICA MODULACION FSK EN MATLAB

  
En la gráfica podemos ver en la primera parte la secuencia de entrada, y en la parte de abajo, la señal modulada en FSK, cabe recordar que el valor de las frecuencias f1 y f2 son ingresadas por el usuario al igual que la secuencia de bits de entrada, como se menciona en el programa, son parámetros de la función llamada FSK.

8.4  SIMULACION MODULACION PSK

La última de las modulaciones primarias es la PSK, la cual mostraremos a continuación su programa y respectiva gráfica en Matlab.

8.4.1     PROGRAMA MODULACION PSK EN MATLAB

function PSK(g,f)%funcion PSK con parametros([secuencia de bits],frecuencia para modular)
% MODULACION
if nargin > 2
    error('muy extenso');
elseif nargin==1
    f=1;
end
if f<1
    error('frecuencia tiene que ser mayor que 1');
end

t=0:2*pi/99:2*pi;% tiempo de la modulacion
cp=[]; sp=[];
mod=[]; mod1=[]; bit=[];

for n=1:length(g)%recorre la secuencia de entrada
    if g(n)==0
        die=(-ones(1,100));%cambio de fase
        se=zeros(1,100);
    else g(n)==1
        die=ones(1,100);%cambio de fase
        se=zeros(1,100);
    end
    c=sin(f*t);%señal para modular
    cp=[cp die];
    mod=[mod c];
    bit=[bit se];
end
bpsk=cp.*mod;%producto punto entre vectores
subplot(2,1,1);plot(cp, 'LineWidth', 1.5);grid on;%grafica de la secuencia de entrada
title('Señal binaria');
axis([0 100*length(g) -2.5 2.5]);
subplot(2,1,2);plot(bpsk, 'LineWidth', 1.5);grid on;%grafica de la señal modulada PSK
title('Modulacion PSK');
axis([0 100*length(g) -2.5 2.5]);
end

8.4.2     GRAFICA DE MODULACION PSK EN MATLAB

  
En esta gráfica al igual que las anteriores podemos ver en primer lugar la secuencia de bits que entra al modulador, y en la parte de abajo vemos la señal modulada FSK; es fácil evidenciar en esta gráfica el cambio de polaridad o de fase de la gráfica dependiendo de la secuencia de bits entrante.

8.5  DISEÑO MODULADOR QAM

Después de haber visto las técnicas de modulación primarias, nos damos fácilmente cuenta por medio de las gráficas que aunque son moduladores digitales, no darían abasto en caso de tener que modular señales de video o datos, para lo cual posterior a la modulación QPSK que es una modulación con 4 símbolos, es decir, según la formula que vimos anteriormente, maneja dos bits por símbolo; tampoco fue suficiente para la modulación de video y datos y surge la modulación M-QAM, donde M simboliza la cantidad de símbolos que interfieren en la modulación. En nuestro caso es un 16-QAM, es decir, que intervienen 16 símbolos en la modulación, y cada símbolo maneja información de 4 bits.
Este modulador fue diseñado en la segunda herramienta a la cual se hizo mención en el segundo capitulo, en Picc, este fue menos inmediato que Matlab, en que sentido, en que las gráficas de Matlab se muestran con solo llamar la función como se llamo la modulación, en el caso de QAM, se programa en Picc y el programa se quema en un microcontrolador por medio de la herramienta Pickit2 contenida en quemador de Pics. Luego de programar el microcontrolador, era necesario diseñar un circuito acondicionador el cual complementara lo hecho en el programa del micro que básicamente era la modulación QAM por medio de la señal de entrada con el conversor análogo/digital y luego, esa señal digital vuelve y pasa por el circuito acondicionador para finalmente visualizar la modulación QAM en un osciloscopio. A continuación mostraremos paso a paso la construcción del modulador QAM.

8.5.1     ELEMENTOS INVOLUCRADOS


8.5.1.1        MICROCONTROLADOR


El microcontrolador es un dispositivo mejor conocido como PIC, es un elemento programable y es capaz de generar múltiples soluciones de electrónica y comunicaciones. Hay de mucha variedad, pero en nuestro caso usamos un PIC de referencia 16f877a con un diagrama de pines que podemos ver a continuación en la Figura12.
                        Figura12: Diagrama de pines del PIC



Como podemos ver en la Figura12, el conversor análogo digital se encuentra en el pin 2, también conocido como RA0 ya que hace parte del puerto A. el microcontrolador tiene 4 puertos, del A al D, cada uno contando entre 4 y 8 pines por puerto. Para nuestro diseño, usamos el puerto B como salida de los datos digitales, conversión realizada por el puerto A0.

1.5.1.2        ARREGLO R2R

Figura 13: Arreglo R2R



En la Figura13 podemos ver el arreglo de resistencias de manera que trabajan como un conversor digital análogo, es conocido R2R por que se toman valores de resistencias y del doble de ese valor para hacer el montaje como se ve en la figura. 

1.5.1.3        CIRCUITO ACONDICIONADOR


El circuito acondicionador está formado por un arreglo de resistencias conocido como el R2R o el conversor digital análogo, para poder mostrar la señal QAM en el osciloscopio.

1.5.2     SEGUIMIENTO FOTOGRAFICO


A continuación veremos una serie de fotos de la construcción del circuito acondicionador.

Foto1



                       Foto2

  
                       Foto3

  

Como nos podemos dar cuenta en las fotografías, en la Foto1 esta el montaje del microcontrolador, en la Foto2, se está haciendo el montaje del arreglo R2R, y en la Foto3 se está haciendo el cableado entre el puerto B del microcontrolador y el arreglo R2R para presentar a continuación el circuito final de la investigación.

1.5.2.1        CIRCUITO FINAL MODULADOR QAM


En la imagen 14 vamos a ver el circuito final con el que se va a realizar la modulación QAM.



En la imagen 14 podemos ver el circuito final con el microcontrolador instalado, la salida del puerto B conectadas al arreglo R2R que se diseñó con valores de resistencias de 10 KΩ y 20 KΩ, podemos ver una placa metálica conectada en el microcontrolador, es el oscilador, o reloj, el cual va  hacer funcionar de manera adecuada el micro, en este caso es de 20 MHz, finalmente está instalado un potenciómetro o resistencia variable, el cual me va a generar cambios de amplitud de una señal entrante por el pin RA0 que es el conversor análogo digital y a partir de la cual se empieza a construir la señal modulada QAM.

1.5.3     PROGRAMA EN PICC DEL MODULADOR QAM

#include <16F877A.h>
#device adc=8
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPUT
#include <math.h>
#BYTE TRISB=0x86
#BYTE PORTB=0x06
void main()
{
   int a;
   float32 se,fi,l;
   unsigned char vec[20];
   int8 x,d,t,b,q;
   float amp;
   TRISB=0x00;
   PORTB=0xFF;
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);%%CONVERSOR ANALOGO DIGITAL
   for(;;)
   {
      set_adc_channel(0);
      delay_us(20);
      q=read_adc();
      a=0;
      for(a=0;a<=7;a=a+2)
      {
         if(vec[a]==0x45)
         { 
            if(vec[a+1]==0x45)
            {
               if(x==1)
               {
                  amp=1;
                  l=3.1416;
                  d=1;
                  x=0;
               }
               if(x==0)
               {
                  amp=1;
                  l=3.1416;
                  d=0;
                  x=1;
               }
            }
            else
            {
               if(vec[a+1]==0x45)
               {
                  if(x==1)
                  {
                     amp=0.5;
                     l=3.141592654;
                     d=1;
                     x=0;
                  }
                  if(x==0)
                  {
                     amp=0.5;
                     l=3.1416;
                     d=0;
                     x=1;
                  }
               }
            }
         }
         else
         {
            if(vec[a]==0x46)
            {
               if(vec[a+1]==0x46)
               {
                  if(x==1)
                  {
                     amp=0.5;
                     l=0;
                     d=1;
                     x=0;
                  }
                  if(x==0)
                  {
                     amp=0.5;
                     l=0;
                     d=0;
                     x=1;
                  }
               }
               else
               {
                  if(vec[a+1]==0x45)
                  {
                     if(x==1)
                     {
                        amp=1;
                        l=0;
                        d=1;
                        x=0;
                     }
                     if(x==0)
                     {
                        amp=1;
                        l=0;
                        d=0;
                        x=1;
                     }
                  }
               }
            }
         }
         if(d==1)
         {
            t=1;
            while(t!=360)
            {
               se=cos(fi);
               se*=amp;
               se+=1;
               b=se/195312;
               PORTB=b;
               t++;
               fi=(t*3.1416)/180;%%GENERACION SEN Y COS MOD. QAM
               fi+=l;
               fi-=1.5707;
            }
            t=1;
            PORTB=64;
         }
         else
         {
            t=1;
            while(t!=360)
            {
              
               se=sin(fi);
               se*=amp;
               se+=1;
               b=se/195312;
               PORTB=b;
               t++;
               fi=(t*3.1416)/180;%%GENERACION SENOS Y COS MOD. QAM
               fi+=l;
            }
            t=1;
            PORTB=64;
         }
      }
   }
}
En el programa nos podemos dar cuenta, se está dando la generación de los senos y cosenos que son los datos que componen la señal QAM, por medio de los comentarios es fácil ubicar dichos procesos, ahora, veremos unas fotos tomadas al osciloscopio donde se muestra la señal modulada QAM.

1.5.3.1        GRAFICA MODULADOR QAM

  

En las tres fotografías anteriores podemos ver la modulación QAM, y aunque a simple vista no es evidente, cuando se verifica detalladamente nos damos cuenta que una curva contiene cerca de 4 bits, lo que lo hace un 16 QAM, cuando hablo de cerca, me estoy refiriendo a que se puede generar problemas debido a la tolerancia de los equipos utilizados en el montaje, hay que recordar que no son elementos ideales y que tienen algunas pérdidas que se evidencian en la modulación.

4 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. disculpe pero me sale este error..... en matlab 2012
    >> ASK
    Error using ASK (line 10)
    Not enough input arguments.
    me podrian ayudar

    ResponderEliminar
    Respuestas
    1. Posiblemente ya lo resolviste en su tiempo, pero ahí te dice claro que no tiene parámetros de entrada la funcion ASK, lo que debes hacer es simplemente definir un vector g=[ 1 0 0 1 1 1 0] (los valores que se te antojen como datos binarios de entrada)
      y la f = 2.

      Eliminar
  3. Muy buenas excelente blog, pero no puedo ver las imagenes las podrias cargar de nuevo??

    ResponderEliminar