MODULACIONES DIGITALES
RESUMEN._ El presente artículo tiene como fin simular algunos modelos de modulación digital en Matlab 7.1 como son ASK, OOK, FSK, QPSK, 8PSK. Las funiones tendrán como parámetro de ingreso el vector de bits y la frecuencia de la portadora. Asimismo, programar una interfaz gráfica (GUIDE) que genere bits aleatorios (hasta 10) para su posterior modulación.
INTRODUCCIÓN
La industria de las comunicaciones electrónicas ha venido reemplazando poco a poco las técnicas convencionales analógicas de modulación, como son AM (modulación de amplitud), FM (modulación de frecuencia) y PM (modulación de fase) por sistemas digitales de comunicaciones. Esto, debido a las ventajas que presenta la modulación digital: mayor inmunidad al ruido, sencillez de procesamiento, alta seguridad de los datos y multicanalización.
Algunas de las modulaciones digitales son: ASK (amplitude shift keying), OOK (On-Off keying), FSK (frequency shift keying), BPSK (binary phase shift keying), QPSK (quadrature phase shift keying), 8PSK (8 phase shift keying).
Fig. 1. Varias modulaciones digitales. |
El término comunicaciones digitales abarca un área extensa de técnicas de comunicaciones, incluyendo transmisión digital y radio digital. La transmisión digital es la transmisión de pulsos digitales, entre dos o más puntos, de un sistema de comunicaciones. El radio digital es la transmisión de portadoras analógicas moduladas, en forma digital entre, dos o más puntos de un sistema de comunicación. Los sistemas de transmisión digital requieren medios guiados y los sistemas de radio digital requieren medios no guiados [1].
En los sistemas de radio digital las señales de modulación y demodulación son pulsos digitales.
Función askd(g,f) y ookd(g,f)
En la modulación digital de amplitud (ASK), la amplitud de la portadora sinusoidal se conmuta entre dos valores en respuesta al código PCM. Por ejemplo, el valor 0 se puede transmitir como una amplitud de A volts, mientras que el estado 1 se transmite como una señal sinusoidal de amplitud de B volts. La señal ASK resultante consiste en impulsos modulados, llamados marcas, que representan el estado 1, y espacios que representan el estado 0. Este tipo de modulación se conoce también con el nombre de “modulación OOK (On-Off Keying), donde A=0 volts [2].
Las funciones askd y ookd permiten ingresar un vector binario g y la frecuencia f de la portadora. Estas funciones se muestran a continuación:
function askd(g,f) %Modulation ASK %Example: %askd([1 0 1 1 0],2) if nargin > 2 error('Too many input arguments') elseif nargin==1 f=1; end
if f<1; error('Frequency must be bigger than 1'); end
t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[];
for n=1:length(g); if g(n)==0; die=ones(1,100); se=zeros(1,100); else g(n)==1; die=2*ones(1,100); se=ones(1,100); end c=sin(f*t); cp=[cp die]; mod=[mod c]; bit=[bit se]; end ask=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 100*length(g) -2.5 2.5]);
subplot(2,1,2);plot(ask,'LineWidth',1.5);grid on; title('ASK modulation'); axis([0 100*length(g) -2.5 2.5]); |
La siguiente figura muestra como trabaja esta función:
Fig.2. Función ASKD. |
La función ookd se muestra a continuación:
function ookd(g,f) %Modulation OOK % Example: % ookd([1 1 0 1 0],2) if nargin > 2 error('Too many input arguments'); elseif nargin==1 f=1; end
if f<1; error('Frequency must be bigger than 1'); end
t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[];
for n=1:length(g); if g(n)==0; die=zeros(1,100); %Modulante se=zeros(1,100); %Señal else g(n)==1; die=ones(1,100); %Modulante se=ones(1,100); %Señal end c=sin(f*t); cp=[cp die]; mod=[mod c]; bit=[bit se]; end
ook=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 100*length(g) -2.5 2.5]);
subplot(2,1,2);plot(ook,'LineWidth',1.5);grid on; title('OOK modulation'); axis([0 100*length(g) -2.5 2.5]); |
La siguiente figura muestra como trabaja esta función:
Fig. 3. Función ookd. |
Función bpskd(g,f)
En la modulación BPSK la fase de la portadora conmuta de acuerdo al estado de la señal binaria. En este tipo de modulación el desfase es de 180º si se transmite un 0 y de 0o si se transmite un 1.
La función bpskd se muestra a continuación:
function bpskd(g,f) %Modulation BPSK %Example: %bpskd([1 0 1 1 0],2) if nargin > 2 error('Too many input arguments'); elseif nargin==1 f=1; end
if f<1; error('Frequency must be bigger than 1'); end
t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[];
for n=1:length(g); if g(n)==0; die=-ones(1,100); %Modulante se=zeros(1,100); %Señal else g(n)==1; die=ones(1,100); %Modulante se=ones(1,100); %Señal end c=sin(f*t); cp=[cp die]; mod=[mod c]; bit=[bit se]; end
bpsk=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 100*length(g) -2.5 2.5]);
subplot(2,1,2);plot(bpsk,'LineWidth',1.5);grid on; title('ASK modulation'); axis([0 100*length(g) -2.5 2.5]); |
La siguiente figura muestra como trabaja esta función:
Fig. 4. Función bpskd. |
Función fskd(g,f0,f1)
En la modulación FSK la frecuencia de la portadora cambia de acuerdo al valor de la modulante. Esto es, para un 0 se tendrá una frecuencia f0 y para un 1 se tendrá una frecuencia f1.
La función que simula la modulación fsk se muestra a continuación:
function fskd(g,f0,f1) %FSK modulation %Example:(f0 and f1 must be integers) %fskd([1 0 1 1 0],1,2) if nargin > 3 error('Too many input arguments') 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('Frequency must be an integer'); end
if f0<1 || f1<1; error('Frequency must be bigger than 1'); end
t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[];
for n=1:length(g); if g(n)==0; die=ones(1,100); c=sin(f0*t); se=zeros(1,100); else g(n)==1; die=ones(1,100); c=sin(f1*t); se=ones(1,100); end cp=[cp die]; mod=[mod c]; bit=[bit se]; end
ask=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 100*length(g) -2.5 2.5]);
subplot(2,1,2);plot(ask,'LineWidth',1.5);grid on; title('FSK modulation'); axis([0 100*length(g) -2.5 2.5]); |
La siguiente figura muestra como trabaja esta función:
Fig. 5. Función fskd. |
Función qpskd(g,f)
Para la modulación QPSK, se tiene un símbolo (fase) por cada dos bits. La siguiente función simula esta modulación.
function qpskd(g,f) %Modulation QPSK %Example: g is a binay vector; f is the carrier frequency. %qpskd([1 0 1 1 0 0],2) if nargin > 2 error('Too many input arguments'); elseif nargin==1 f=1; end
if f<1; error('Frequency must be bigger than 1'); end %*-*-*-*-*-* l=length(g); r=l/2; re=ceil(r); val=re-r;
if val~=0; error('Please insert a vector divisible for 2'); end %*-*-*-*-*-* t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[]; for n=1:2:length(g); if g(n)==0 && g(n+1)==1; die=sqrt(2)/2*ones(1,100); die1=-sqrt(2)/2*ones(1,100); se=[zeros(1,50) ones(1,50)]; elseif g(n)==0 && g(n+1)==0; die=-sqrt(2)/2*ones(1,100); die1=-sqrt(2)/2*ones(1,100); se=[zeros(1,50) zeros(1,50)]; elseif g(n)==1 && g(n+1)==0; die=-sqrt(2)/2*ones(1,100); die1=sqrt(2)/2*ones(1,100); se=[ones(1,50) zeros(1,50)]; elseif g(n)==1 && g(n+1)==1; die=sqrt(2)/2*ones(1,100); die1=sqrt(2)/2*ones(1,100); se=[ones(1,50) ones(1,50)]; end c=cos(f*t); s=sin(f*t); cp=[cp die]; %Amplitude cosino sp=[sp die1]; %Amplitude sino mod=[mod c]; %cosino carrier (Q) mod1=[mod1 s]; %sino carrier (I) bit=[bit se]; end bpsk=cp.*mod+sp.*mod1; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal') axis([0 50*length(g) -1.5 1.5]);
subplot(2,1,2);plot(bpsk,'LineWidth',1.5);grid on; title('QPSK modulation') axis([0 50*length(g) -1.5 1.5]); |
La siguiente figura muestra como trabaja esta función:
Fig. 6. Función qpskd. |
Función epsk(g,f)
De igual forma que la modulación QPSK, la modulación 8PSK lleva la información en la fase de la onda. En este caso se tiene un símbolo (fase) por cada tres bits. La siguiente función presenta esta modulación:
function epsk(g,f) %Modulation 8PSK %Example: g is a binay vector; f is the carrier frequency. %epsk([1 0 1 1 1 0],2) if nargin > 2 error('Too many input arguments'); elseif nargin==1 f=1; end
if f<1; error('Frequency must be bigger than 1'); end %*-*-*-*-*-* l=length(g); r=l/3; re=ceil(r); val=re-r;
if val~=0; error('Please insert a vector divisible for 3'); end %*-*-*-*-*-*
t=0:2*pi/149:2*pi; cp=[];sp=[]; mod=[];mod1=[];bit=[];
for n=1:3:length(g); if g(n)==0 && g(n+1)==1 && g(n+2)==1 die=cos(pi/8)*ones(1,150); die1=sin(pi/8)*ones(1,150); se=[zeros(1,50) ones(1,50) ones(1,50)];
elseif g(n)==0 && g(n+1)==1 && g(n+2)==0 die=cos(3*pi/8)*ones(1,150); die1=sin(3*pi/8)*ones(1,150); se=[zeros(1,50) ones(1,50) zeros(1,50)];
elseif g(n)==0 && g(n+1)==0 && g(n+2)==0 die=cos(5*pi/8)*ones(1,150); die1=sin(5*pi/8)*ones(1,150); se=[zeros(1,50) zeros(1,50) zeros(1,50)];
elseif g(n)==0 && g(n+1)==0 && g(n+2)==1 die=cos(7*pi/8)*ones(1,150); die1=sin(7*pi/8)*ones(1,150); se=[zeros(1,50) zeros(1,50) ones(1,50)];
elseif g(n)==1 && g(n+1)==0 && g(n+2)==1 die=cos(-7*pi/8)*ones(1,150); die1=sin(-7*pi/8)*ones(1,150); se=[ones(1,50) zeros(1,50) ones(1,50)];
elseif g(n)==1 && g(n+1)==0 && g(n+2)==0 die=cos(-5*pi/8)*ones(1,150); die1=sin(-5*pi/8)*ones(1,150); se=[ones(1,50) zeros(1,50) zeros(1,50)];
elseif g(n)==1 && g(n+1)==1 && g(n+2)==0 die=cos(-3*pi/8)*ones(1,150); die1=sin(-3*pi/8)*ones(1,150); se=[ones(1,50) ones(1,50) zeros(1,50)];
elseif g(n)==1 && g(n+1)==1 && g(n+2)==1 die=cos(-pi/8)*ones(1,150); die1=sin(-pi/8)*ones(1,150); se=[ones(1,50) ones(1,50) ones(1,50)];
end c=cos(f*t); s=sin(f*t); cp=[cp die]; %Amplitude cosino sp=[sp -die1]; %Amplitude sino mod=[mod c]; %cosino carrier (Q) mod1=[mod1 s]; %sino carrier (I) bit=[bit se]; end opsk=cp.*mod+sp.*mod1; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal') axis([0 50*length(g) -1.5 1.5]);
subplot(2,1,2);plot(opsk,'LineWidth',1.5);grid on; title('8PSK modulation') axis([0 50*length(g) -1.5 1.5]); |
La siguiente figura muestra como trabaja esta función:
Fig. 7. Función epsk. |
INTERFAZ GRÁFICA
La herramienta GUIDE de Matlab permite crear una simpática interfaz gráfica para cambiar de modulación con un par de clics. El entorno de esta interfaz se muestra en la siguiente figura:
![]() |
Fig. 8. Entorno de la interfaz gráfica para simular modulaciones digitales. |
Esta interfaz permite generar un vector de bits aleatorios cada vez que se presiona el botón Random, y modular la secuencia de bits. Permite, asimismo, que el usuario ingrese los valores binarios para su posterior modulación.
Esta sencilla interfaz así como las funciones descritas se encuentran publicadas en la página del autor en www.mathworks.com, User Community, File Exchange.
REFERENCIAS
[1]Sistemas de comunicaciones electrónicas, Tomasi, Wayne, pág 454-481
[2]Principios de las comunicaciones, Briceño, José, pág. 371-402