Está en la página 1de 10

2

Seales y Anlisis de Fourier


En esta prctica se pretende revisar parte de la materia del tema 2 de la asignatura desde la
perspectiva de un entorno de clculo numrico y simulacin por ordenador. El objetivo
fundamental es familiarizarse con la definicin, manipulacin y representacin de seales en
MATLAB. Para ello, en primer lugar, repasaremos y consolidaremos las nociones de MATLAB
adquiridas en la prctica anterior; en particular la definicin, operacin y representacin de
seales en el dominio del tiempo. Posteriormente, utilizaremos algunas de las funciones que
ofrece MATLAB para el Anlisis de Fourier as como para la manipulacin de seales en los
dominios del tiempo y la frecuencia,

1. Introduccin
Como ya estudiamos en diversos ejemplos de la prctica anterior, MATLAB es
muy utilizado en la definicin, manipulacin y representacin de seales
analgicas. Siendo rigurosos, el procedimiento seguido en esos ejemplos no es
adecuado para el anlisis de seales analgicas; es ms, en general, MATLAB
no permite analizar seales analgicasi. Esto se debe a que la forma natural de
representar una seal en MATLAB es definir una secuencia finita de valores
mediante un vector fila. As, como veremos en el siguiente ejercicio, podemos
definir la secuencia de instantes de tiempo equidistantes (intervalo 1 ms) entre 0
y 0.25s. Y del mismo modo, definimos una seal sinusoide como una secuencia
de valores.

Ejercicio 1

Genere una secuencia de instantes de tiempo que parta de t=0s y llegue hasta
t=0.25s en intervalos de 1ms. Construya una funcin seno en esa base de
tiempo de amplitud 1 y frecuencia 5Hz. Use plot para dibujar la forma de onda.
Adems, destaque cada punto de la grfica con *.

>> Tinicial=0; % Definimos el tiempo inicial


>> Tfinal=0.25; % Definimos el tiempo final
>> step=0.001; % Definimos el paso entre instantes de tiempo
>> t=Tinicial:step:Tfinal-step; % Se genera el vector de tiempos
>> y=1*sin(5*2*pi*t); % Se genera y
>> plot(t,y); hold on; % Dibujamos y
>> plot(t,y,*); % Dibujamos las muestras de y

i. Salvo que se usen bloques funcionales o toolboxes

Fsica de las Comunicaciones Electrnica y Electromagnetismo


Seales y Anlisis de Fourier 2

Por tanto, siendo estrictos, en MATLAB toda seal es discreta en tiempo, mien-
tras que en amplitud puede ser discreta (cuantizada) o continua (aunque limi-
tada por la precisin de los tipos numricos). No obstante, si los intervalos
temporales entre valores son suficientemente pequeos y el rango temporal en
el que se define la seal es suficientemente amplio, la secuencia de valores
empleada para representar la seal y las operaciones realizadas para su anlisis
proporcionan una buena aproximacin a los resultados tericos. En el caso ms
simple y frecuente, los valores se toman en instantes equiespaciados, intervalo
que no debe confundirse con el periodo de muestreo. De momento, ignoraremos
el efecto de la discretizacin de seales (utilizaremos intervalos de tiempo sufi-
cientemente pequeos, de modo que los efectos sean despreciables). Asimismo,
la amplitud de las seales est sometida a una discretizacin que, dada la pre-
cisin de los tipos numricos empleados en MATLAB, podemos ignorar.

1.1. Seales especiales.

Vamos a ver una posible forma de representar en MATLAB algunas seales


analgicas tpicas.
SEAL ESCALN
% Ejemplo de seal escalon
>> t=-10:0.01:10;
>> f_escalon=[zeros(1,1000),ones(1,1001)];
>> plot(t,f_escalon);

SEAL PULSO
% Ejemplo de seal pulso
>> t=-10:0.01:10;
>> f_pulso=[zeros(1,950),ones(1,101),zeros(1,950)];
>> plot(t,f_pulso);

SEAL SAMPLING
% Ejemplo de seal sampling
>> t=-10:0.01:10;
% Seal sampling nula en t=n*pi, n=1,2,...
>> f_sampling=sin(t)./t;
>> plot(t,f_sampling);
% Seal sinc nula en t=n, n=1,2,...
>> f_sinc=sinc(t);
>> plot(t,f_sinc);

SEAL IMPULSO O DELTA DE DIRAC


% Ejemplo de seal impulso
>> t=-10:0.01:10;
>> f_impulso=[zeros(1,1000),1,zeros(1,1000)];
>> plot(t,f_impulso);

SEAL DIENTE DE SIERRA


% Ejemplo de seal diente de sierra de periodo 0.1Hz
% sawtooth(x,width) seal en diente de sierra con periodo 2*pi para los
% elementos del vector x. El parmetro width es un escalar entre

Fsica de las comunicaciones Electrnica y Electromagnetismo


2. Anlisis de Fourier 3

% 0 y 1, y describe la fraccin del periodo 2*pi en el que ocurre el


% mximo.
>> t=-10:0.01:10;
>> width=0.10;
>> f_sierra=sawtooth(2*pi*0.1*t,width);
>> plot(t,f_sierra);

SEAL TRIANGULAR
% Ejemplo de seal triangular de periodo 0.1Hz
% Es un caso particular de seal diente de sierra con width=0.5
>> t=-10:0.01:10;
>> f_triangular=sawtooth(2*pi*0.1*t,0.5);
>> plot(t,f_triangular);

SEAL EXPONENCIAL
% Ejemplo de seal exponencial decreciente
>> t=-10:0.01:10;
% tau: constante de tiempo (RC)
>> tau=200e-2;
>> f_expon=exp(-t/tau);
>> plot(t,f_expon);

SEAL CUADRADA
% Ejemplo de seal cuadrada de frecuencia 0.5Hz
% square(x,duty) genera una onda cuadrada de periodo 2*pi con un duty cycle dado
>> t=-10:0.01:10;
>> duty=50; % porcentaje del periodo en el que la seal es positiva
>> f_cuadrada=square(2*pi*0.5*t,duty);
>> plot(t,f_cuadrada);

2. Anlisis de Fourier
Las series de Fourier permiten describir seales peridicas como una combi-
nacin de seales armnicas (sinusoides). Con esta herramienta, podemos anal-
izar una seal peridica en trminos de su contenido frecuencial o espectro.
Adems, nos permite establecer la dualidad entre tiempo y frecuencia, de forma
que operaciones realizadas en el dominio del tiempo tienen su dual en el
dominio frecuencial. Utilizando operaciones sobre vectores, se pueden calcular
fcilmente los coeficientes de Fourier correspondientes a una seal. En el ejerci-
cio 2, se definen el vector n, que contiene los ndices de los coeficientes, y el
vector cn, que contiene los coeficientes. Los coeficientes cn, son los coefi-
cientes espectrales de la seal. La grfica de esos coeficientes en funcin del
ndice armnico n o de las frecuencias no se denomina espectro. Hay dos tipos
de grficos, uno con la magnitud de los coeficientes y otro de la fase. Ambas
funciones son discretas en frecuencia.

Fsica de las Comunicaciones Electrnica y Electromagnetismo


Seales y Anlisis de Fourier 4

Ejercicio 2

Escriba un fichero MATLAB que proporcione los coeficientes de Fourier de una


seal cuadrada de periodo 0.2s (frecuencia 5Hz) y amplitud igual a 1V.

% Obtener los coeficientes de Fourier para una seal cuadrada de periodo


% 0.2s y amplitud 1.
clear;
% frecuencia de la seal cuadrada (=1/T)
f=5;
T=1/f;
% Indice de los coeficientes
n=1:10;
% Coeficientes de Fourier
cn=2*(cos(n*pi)-1)./(-2*j*n*pi);
co=1;
subplot(2,1,1);
stem(n,abs(cn));
ylabel('Magnitud de cn');
subplot(2,1,2);
stem(n,angle(cn));
ylabel('fase de cn');
xlabel('n');

A partir de la serie de Fourier, es posible reconstruir una seal peridica. Cuanto


mayor sea el nmero de armnicos utilizado en el desarrollo en serie, mejor ser
la reconstruccin. Un parmetro importante en la reconstruccin de seales es la
velocidad de convergencia, o lo que es lo mismo, la velocidad con la que los
coeficientes de Fourier tienden a 0.

Ejercicio 3

Escriba un fichero en MATLAB para dibujar n armnicos de una seal cuad-


rada de periodo 0.2s y amplitud 1.

% Desarrollo en serie de Fourier de una seal cuadrada de periodo 0.2s y amplitud 1


clear;
% frecuencia de la seal cuadrada (=1/T)
f=5;
T=1/f;
% Indice de los coeficientes
n=1:10;
% Generamos la serie de Fourier
t=-1:0.01:1; % vector de tiempos
for i=1:50
for k=1:size(t,2)
s(i,k)=(2*(1-cos(pi*i))/(pi*i))*sin(2*pi*i*f*t(k));
end
end
for k=1:size(t,2)
st(k)=sum(s(:,k));
end

Fsica de las comunicaciones Electrnica y Electromagnetismo


2. Anlisis de Fourier 5

st(1)=st(1)+1;
plot(t,st,'r');
hold on;
% Seal cuadrada original
f_cuadrada=square(2*pi*f*t,50);
plot(t,f_cuadrada);
xlabel(tiempo);
ylabel(Amplitud);

MATLAB est equipado con funciones especiales que nos van a permitir real-
izar un anlisis de Fourier de funciones definidas por un conjunto de valores
discretos. Por ejemplo, el comando fft() nos permite obtener la transformada
rpida de Fourier (fast Fourier Transform) de una secuencia de nmeros
definida por el vector x. Por ejemplo:
>> X=fft(x);
donde X es un vector de nmeros complejos ordenados desde k=0...N-1. Si
queremos que sea ms eficiente en el clculo de la ffT, la longitud del vector x
deber ser una potencia de 2. Podemos rellenar de ceros el vector x para que
tenga la longitud apropiada. Esto se consigue automticamente haciendo:
>> X=fft(x,N);
donde N es exponente de 2. Mientras ms largo sea x, ms fina ser la escala
para la ffT. Debido a un fenmeno de plegamiento del espectro, slo la primera
mitad de los puntos obtenidos son de utilidad. La funcin fftshift() reordena el
vector X en orden creciente de frecuencia. Si X es el vector resultante de hacer
una ffT, utilizando esta funcin reordenamos los puntos en funcin de la fre-
cuencia.
>> X=fftshift(X);

Ejercicio 4

Obtenga la transformada de Fourier de una seal exponencial modulada en


amplitud con una frecuencia de portadora de 200Hz, x(t)=exp(-
2t)sin(2pi200t).

% Ejemplo de una ffT de una seal exponencial modulada en amplitud


% con una frecuencia portadora de 200Hz.

% Definicion de la seal
t=-0.25:0.001:0.25;
x=exp(-2*t).*sin(2*pi*200*t);
% Representacion en el tiempo
subplot(3,1,1);
plot(t,x);
title('x(t)=exp(-2t)sin(2pi200t)');
xlabel('Tiempo (t)');ylabel('x(t)');
% Transformada de Fourier
X=fftshift(fft(x));
% Magnitud y fase de la transformada
Xm=abs(X);
Xf=unwrap(angle(X))*180/pi;
% Base de frecuencias

Fsica de las Comunicaciones Electrnica y Electromagnetismo


Seales y Anlisis de Fourier 6

delta_t = t(2)-t(1);
f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;
% Representacion en frecuencia
subplot(3,1,2);
plot(f,Xm,'r');
title('Mdulo de transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');
subplot(3,1,3);
plot(f,Xf,'r');zoom;
title('fase de la transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('fase X(jw)');

A partir de la transformada de Fourier, es posible reconstruir la seal en el


dominio del tiempo. El comando ifft() sirve para obtener la transformada
inversa de Fourier de una serie de nmeros complejos:
>> x=ifft(X);

Ejercicio 5

Obtenga la transformada de Fourier de una seal exponencial modulada en


amplitud , x(t)=exp(-2t)sin(2pi3t). Realice la transformada inversa y
obtenga la seal en el tiempo a partir de su transformada.

% Ejemplo de una ffT de una seal exponencial modulada en amplitud


% Obtencin de la seal en el tiempo a partir de su transformada

% Definicion de la seal
t=-0.25:0.001:0.25;
x=exp(-2*t).*sin(2*pi*3*t);
% Representacion en el tiempo
figure(1);
plot(t,x);
title('x(t)=exp(-2t)sin(2pi200t)');
xlabel('Tiempo (t)');ylabel('x(t)');
% Transformada y representacion en frecuencia
Xt=fft(x);
X=fftshift(Xt);
% Magnitud y fase de la transformada
Xm=abs(X);
Xf=unwrap(angle(X))*180/pi;
% Base de frecuencias
delta_t = t(2)-t(1);
f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;
figure(2);
subplot(2,1,1);
plot(f,Xm,'r');zoom;
title('Mdulo de transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');
subplot(2,1,2);
plot(f,Xf,'r');zoom;
title('fase de la transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('fase X(jw)');

Fsica de las comunicaciones Electrnica y Electromagnetismo


3. Producto de Convolucin 7

% Obtener la seal en el dominio del tiempo a partir de su transformada


xrec=ifft(Xt);
figure(3);
plot(t,xrec);
title('Transformada inversa')
xlabel('Tiempo (t)');ylabel('xrec(t)');

3. Producto de Convolucin
La convolucin es una potente herramienta matemtica utilizada en el proce-
sado de seales. Aunque en general se define como un operador que permite
determinar la respuesta de un sistema lineal, invariante en el tiempo ante una
determinada entrada, tambin se puede aplicar a dos seales arbitrarias. La con-
volucin de f y g se denota por f*g y se define como la integral del producto de
ambas funciones despus de que una sea invertida y desplazada. En MATLAB
contamos con la funcin conv() que realiza la la convolucin de los vectores x y
h. El vector resultante tiene un tamao igual a length(x)+length(h)-1.
>> y=conv(x,h);

Ejercicio 6

Genere un fichero MATLAB donde realice la convolucin de una seal coseno


de frecuencia 100Hz y una seal escaln. Compruebe que se verifican las
propiedades de la transformada de Fourier respecto al producto de convolu-
cin.

% Ejemplo de una ffT de una seal exponencial modulada en amplitud


% Obtencin de la seal en el tiempo a partir de su transformada

% Definicion de las seales


t = -pi:0.001:pi;
g_escalon=[zeros(1,1000*pi+1), ones(1,1000*pi+1)];
w = 2*pi;
g = cos(w*100*t);
g_conv = conv(g,g_escalon);
figure(1);
subplot(3,1,1);
plot(t,g_escalon);
title('SEAL ESCALON');
xlabel('Tiempo (t)');ylabel('e(t)');
subplot(3,1,2);
plot(t,g);
title('cos(2pit)');
xlabel('Tiempo (t)');ylabel('cos(2*pi*100*t)');

% Convolucion
g_conv = conv(g,g_escalon);
subplot(3,1,3);
plot(t,g_conv(1:length(g)),'r')
title('Convolucion');
xlabel('Tiempo (t)');

Fsica de las Comunicaciones Electrnica y Electromagnetismo


Seales y Anlisis de Fourier 8

% Transformada y representacion en frecuencia de la convolucion


G_conv=fftshift(fft(g_conv));
% Magnitud de la transformada
Gm_conv=abs(G_conv);
% Base de frecuencias
delta_t = t(2)-t(1);
f = ((1:length(g_conv)) - ceil(length(g_conv)/2)) / length(g_conv) / delta_t;
figure(2);
subplot(2,1,1);
plot(f,Gm_conv,'r');zoom;
title('Transformada de Fourier del producto de convolucion)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');

% Obtener G_conv como el producto de los espectros


G_escalon=fftshift(fft(g_escalon));
G=fftshift(fft(g));
G_conv2=G.*G_escalon;
% Base de frecuencias
delta_t = t(2)-t(1);
f2 = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;
subplot(2,1,2);
plot(f2,abs(G_conv2),'r');zoom;
title('Producto de las transformadas de Fourier)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');

4. Espectros de densidad de potencia y energa


Las seales se pueden clasificarse segn sean de energa o de potencia.

2
Energa de una seal: E = X ( f ) df

Potencia de una seal: P = S g df



Una seal se dice que es de energa si su E es finita, lo que implica que su poten-
cia es cero. Por ejemplo, los pulsos limitados en el tiempo.Una seal se dice que
es de potencia si su potencia es finita, lo que implica que su energa es infinita.
Un ejemplo de este tipo de seales lo encontramos en las seales peridicas.
Para el clculo de estos espectros disponemos, adems de las funciones para el
anlisis de Fourier anteriores, de la funcin psd(), que proporciona la densidad
espectral de potencia de una seal en dB.
>>Sg=psd(x,);

Ejercicio 7

Genere un fichero MATLAB donde realice la densidad espectral de potencia de


una seal coseno de frecuencia 100Hz.

Fsica de las comunicaciones Electrnica y Electromagnetismo


5. Clculo simblico 9

% Densidad espectral de potencia


t=-pi:0.001:pi;
w=2*pi*100;
g=cos(w*t);
PSD=psd(g,2^10,lenght(g));
plot(PSD);

5. Clculo simblico
Durante la prctica hemos representado las seales mediante vectores y hemos
manipulado las seales esencialmente mediante operaciones con vectores. Esta
es la forma habitual de trabajar con MATLAB. No obstante, aunque en prin-
cipio MATLAB no se diseo para realizar operaciones simblicas, s es posible
definir y manipular seales (y funciones en general) de manera simblica, si
disponemos del Toolbox para el clculo simblico. As, como en el ejercicio 8,
podemos definir una funcin seno o delta de dirac y calcular su transformada de
Fourier de forma simblica.

Ejercicio 8

Definir una funcin seno de forma simblica y calcular su transformada de Fou-


rier.
% Anlsis de Fourier con clculo simblico
syms t % crear variable simblica
g=sin(2*pi*t);
G=Fourier(g); % Transformada de Fourier
ezplot(g);
ginv=iFourier(G); % Transformada inversa

6. Cuestionario de Evaluacin

6.1. Serie de Fourier

Escriba un fichero en MATLAB (coeficientes_Fourier.m) que proporcione


los coeficientes de Fourier de la seal de la fig 1. Genere un fichero en
MATLAB (dibuja_armonicos.m) que permita dibujar n armnicos de dicha
seal.

6.2. Transformada de Fourier

Genere un fichero en MATLAB (transformada_Fourier.m) para obtener la


transformada de Fourier de la seal, x(t)=sen(2pi200t+sin(2pi2t)).
Realice la transformada inversa y obtenga la seal en el tiempo a partir de
su transformada.

Fsica de las Comunicaciones Electrnica y Electromagnetismo


Seales y Anlisis de Fourier 10

1
T

t
/2 /2

Fig. 1

6.3. Producto de Convolucin

Genere un fichero MATLAB (convolucion.m) donde se realice la convolu-


cin de una seal coseno de frecuencia 50Hz y una seal pulso. Represente
grficamente las seales obtenidas.

NOTA: no ser necesaria la entrega de una memoria. La evaluacin de esta


prctica se basar en los archivos requeridos en cada ejercicio.

Fsica de las comunicaciones Electrnica y Electromagnetismo

También podría gustarte