4 minute read

Función qpskd(g,f)

MODULACIONES DIGITALES

RESUMEN._ El presente artículo tiene como fin simular algunos modelos de modulación digital en Matlab como son ASK, OOK, FSK, QPSK, 8PSK. Las funciones tendrán como parámetro de ingreso el vector de bits y la frecuencia de la portadora. Asimismo, programar hasta que genere bits aleatorios (hasta 10) para su posterior modulación.

Advertisement

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).

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:

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); se=zeros(1,100); else g(n)==1; die=ones(1,100); se=ones(1,100); end c=sin(f*t); cp=[cp die]; mod=[mod c]; bit=[bit se]; end %Modulante %Señal

%Modulante %Señal

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]);

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]);

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]);

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]);

This article is from: