Sunteți pe pagina 1din 17

INSTITUTO TECNOLOGICO SUPERIOR DE FRESNILLO

ING. ELECTRNICA
7A
Matemticas avanzadas

Ejemplos de aplicaciones de las series de Fourier y la transformada de


Fourier.

DOCENTE: OSVALDO GUTIRREZ MATA


ALUMNO: HECTOR RODRGUEZ HERNNDEZ

OCTUBRE 2016
La transformacin de Fourier y la FFT.
Hemos visto que una seal peridica que se repite en el tiempo como
un EKG- puede representarse como suma de ondas senoidales. Las

funciones a sumar pueden ser muy diferentes, al igual que 1+4 y 2+3
suman 5. Las que nos interesarn especialmente, y en eso se basa el
anlisis de Fourier son las que tienen unas frecuencias determinadas.
Las elegidas son, la frecuencia que caracteriza la seal que queremos
analizar (por ejemplo 80 por minuto podra ser un valor tpico de un
EKG), y sus mltiplos: el doble, el triple
f, 2f, 3f, 4f, 5f
Y as, cualquier seal podr descomponerse en una suma como la
siguiente

Esta forma de descomponer una seal se llama la Transformacin de


Fourier
La ventaja de elegir estas funciones, que se llamarn armnicos, es
que analizar una seal cualquiera para ver sus componentes con esas
frecuencias es sencillo. La formulacin matemtica para hacerlo se
sale de este curso, pero s se ver la capacidad de Matlab para
obtener las componentes no ya de una seal continua, sino de la serie
de datos que la representa bien o mal- en forma de muestreo. Esto
se llamar la Transformacin de Fourier Discreta (DFT), y hay muchas
formas de calcularla. La ms eficiente es la Transformada Rpida de
Fourier, la FFT.
Matlab tiene implementada una funcin para calcular directamente una
FFT, con hacer simplemente la instruccin

>>fft(x)
En donde x es nuestra serie de datos. El resultado numrico de la
transformacin no se interpreta directamente. Se trata de nmeros
complejos, que tendrn un mdulo que ser la amplitud- y un ngulo
la fase- de cada una de las componentes. Adems, estarn
repetidos, dando una serie de datos simtrica. Nos interesa slo la
mitad. Y adems estarn multiplicados por N/2, siendo N el nmero de
datos de nuestra serie. Si recuperaremos la ltima seal que
generamos.

Si nuestro espacio de tiempo es 1 seg, nuestra frecuencia f es 1/1seg = 1Hz. Si


hacemos
ahora la fft, y nos quedamos slo con las amplitudes (con la funcin abs) podemos
escribir
>>y=abs(fft(x));
Lo representaremos ahora con un nuevo tipo de grfico: un grfico de barras
bar-graph -con la funcin bar

>>bar(y)

FTTs en ms de una dimensin.


Haremos ahora una breve introduccin a la transformacin de Fourier en dos
dimensiones, que no es ms que una extensin de los mismos conceptos.
Al igual que cualquier seal puede representarse como suma de ondas
sinusoidales,
cualquier superficie puede representarse como suma de ondas sinusoidales en
dos
dimensiones. Dibujaremos una de estas superficies para ver de qu estamos
hablando
>>t=[0,0.01,1];
>> x1=5*sin(4*pi*t);
>> x2=2*sin(8*pi*t+1);
>> z=x1'*x2;
>> surf(z)

Ejercicio 1
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, 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 analgicas. 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.
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 *.
Cdigo#1
>> 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
Cdigo#2
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
% 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
2. Anlisis de Fourier
% 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);

Cdigo#3
Anlisis de Fourier

Las series de Fourier permiten describir seales peridicas como una


combinacin De seales armnicas (sinusoides).
Con Esta herramienta, podemos analizar 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 ejercicio
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
coeficientes espectrales de la seal. La grfica de esos coeficientes en
funcin del ndice armnico n o de las frecuencias n 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.
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');

Ejercicio 3

Escriba un fichero en MATLAB para dibujar n armnicos de una seal cuadrada 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
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 realizar 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 frecuencia.
>> 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
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)');
% 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)');
cdigo#4

function fousen(N)
x=-2:0.005:2;
sumparcial=0;
b=zeros(1,N);
for k=1:N
b(k)=2/(k*pi);
sumparcial=sumparcial+b(k)*sin(k*x*pi/2);

end
f=(x<0).*(-1-x/2)+(x>=0).*(1-x/2);
plot(x,f,b,x,sumparcial,g),shg

function fou(N)
x=-1:0.05:1;
a=zeros(1,N);
sumparcial=1/3;
for k=1:N
a(k)=quadl(@fun,-1,1,1e-9,[],k);

sumparcial=sumparcial+a(k)*cos(k*x*pi);
end
f=x.^2;
plot(x,f,b,x,sumparcial,g),shg
function y=fun(t,n)
y=(t.^2).*cos(n*pi*t);

REFERENCIAS
http://personales.unican.es/alvareze/CalculoWeb/CalculoII/practicas/P
R7_Armonicos_14_15.pdf
http://www2.imse-cnm.csic.es/~belen/Ficherospdf/practica2.pdf

S-ar putea să vă placă și