You are on page 1of 42

Programacin y Simulacin Avanzada (L110)

Sesin: 8
La Transformada Discreta de Fourier (DFT) y la Transformada Rpida de Fourier (FFT)

Ing. Jos C. Bentez P.

ndice
La Transformada Discreta de Fourier (DFT) y la Transformada Rpida de Fourier (FFT) Objetivo La DFT y la FFT DFT

Programacin y Simulacin Avanzada

Objetivo
Comprender la DTF. Calculo de la DFT mediante la FFT.

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


Una seal peridica puede representarse como suma de ondas sinusoidales. Las que nos interesarn especialmente sern las que tienen unas frecuencias determinadas, y en eso se basa el anlisis de Fourier. Las frecuencias elegidas son; la frecuencia que caracteriza la seal que queremos analizar, y sus mltiplos; el doble, el triple: f, 2f, 3f, 4f, 5f

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


Y as, cualquier seal podr descomponerse en una suma como la siguiente:

Esta forma de descomponer una seal en el dominio de la frecuencia se llama la Transformacin de Fourier.

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


La ventaja de elegir estas funciones, que se llamarn armnicos, es que analizar una seal cualquiera para ver sus componentes con esas frecuencias ser una tarea sencilla. La formulacin matemtica para seales discretas se ha desarrollado en la clase terica. Veremos la capacidad de Matlab para obtener las componentes no ya de una seal continua, sino de la seal discreta que la representa en forma de muestreo. Esto se llamar la Transformada Discreta de Fourier (DFT), y hay muchas formas de calcularla. La ms eficiente es la Transformada Rpida de Fourier (FFT).

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


Matlab tiene implementada una funcin para calcular una FFT:
>>fft(x)

En donde x es nuestra seal discreta (secuencia discreta de datos). El resultado numrico de la transformacin son 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.

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


Ejemplo:
>>t=[0:0.01:1]; >>x1=5*sin(4*pi*t); >>x2=2*sin(8*pi*t+1); >>x=x1+x2; >>plot(t,x)

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


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 graphcon la funcin bar:
>>bar(y)

Programacin y Simulacin Avanzada

La transformada de Fourier y la FFT


Tal y como se dijo, tenemos los datos repetidos en un grfico simtrico, nos interesan slo la mitad, y para ser ms concretos, los primeros, porque a partir de un determinado valor son muy pequeos. Podemos representar una parte del grfico escribiendo >>bar(y(1:20))

Programacin y Simulacin Avanzada

10

La transformada de Fourier y la FFT


Nuestro grfico tiene dos barras mucho mayores que las anteriores, vamos a ver lo que representa cada una. Nuestras barras representan las amplitudes de la serie:

La que hemos generado es:


x = x1 + x2 = 5*sin(4*pi*t)+2*sin(8*pi*t+1)

Programacin y Simulacin Avanzada

11

La transformada de Fourier y la FFT


La que hemos generado es:
x = x1 + x2 = 5*sin(4*pi*t)+2*sin(8*pi*t+1)

La primera barra representa A0, la componente continua. Nuestra seal no tena. La segunda barra representa la amplitud A1, correspondiente frecuencia fundamental f que tampoco exista en la seal que nos hemos generado. Tampoco tenemos en A3.

Programacin y Simulacin Avanzada

12

La transformada de Fourier y la FFT


En cambio si tenemos componentes con frecuencias 2f y 4f, y eso es lo que nos muestra el grfico.

Programacin y Simulacin Avanzada

13

La transformada de Fourier y la FFT


Como hemos dicho, los valores de amplitudes en el grfico estn multiplicados por N/2, siendo N el nmero elementos de la secuencia (100 en este caso). Si queremos verlos slo hay que dividir por N/2.

Programacin y Simulacin Avanzada

14

La transformada de Fourier y la FFT


>>t=[0:0.01:1]; >>x1=5*sin(4*pi*t); >>x2=2*sin(8*pi*t+1); >>x=x1+x2; >>y=abs(fft(x))/50; >>bar(y(1:20))

Los pequeos valores (aprox. cero) en otros armnicos se deben a utilizar pocos puntos para muestrear la seal. El resultado con 1000 puntos es el siguiente grfico:
>> t=[0:.001:1]; >> x1=5*sin(4*pi*t); >> x2=2*sin(8*pi*t+1); >> x=x1+x2; >> y=abs(fft(x))/500; >> bar(y(1:20))
Programacin y Simulacin Avanzada

15

La transformada de Fourier y la FFT


El resultado con 100 puntos es el siguiente grfico: El resultado con 1000 puntos es el siguiente grfico:

Programacin y Simulacin Avanzada

16

La transformada de Fourier y la FFT


Vamos a probar ahora con la misma seal pero con una componente continua >>t=[0:0.01:1]; >>x1=5*sin(4*pi*t); >>x2=2*sin(8*pi*t+1); >>x=3+x1+x2; >> plot(t,x);

Programacin y Simulacin Avanzada

17

La transformada de Fourier y la FFT


>>y=abs(fft(x))/50; >>bar(y(1:20)) Podemos ver a A0 en la barra ahora. Los valores de amplitud de la componente continua estn multiplicados por N en lugar de N/2. Por eso aparece con valor 6.

Programacin y Simulacin Avanzada

18

La transformada de Fourier y la FFT


Si ahora en lugar de una componente continua aadimos el trmino de alta frecuencia que vimos que poda representar ruido >>t=[0:0.01:1]; >>x1=5*sin(4*pi*t); >>x2=2*sin(8*pi*t+1); >>x3=0.5*sin(50*pi*t+1); >>x=x1+x2+x3; >>plot(t,x)

Programacin y Simulacin Avanzada

19

La transformada de Fourier y la FFT


Y ahora vemos sus componentes en la FFT >>y=fft(x); >>A=abs(y)/50; >>bar(A) En el grfico de barras podemos ver ahora la componente de ruido. Esa componente podr ser eliminada ahora. La forma ms directa es borrarla en la variable y.
Programacin y Simulacin Avanzada

20

La transformada de Fourier y la FFT


Para ello podemos editarla dentro de Matlab haciendo doble click en y. Entraremos en el editor de tablas, con un aspecto similar a una hoja de clculo, y en l podemos borrar los elementos que representan el ruido, el 26 y el 77.
Programacin y Simulacin Avanzada

21

La transformada de Fourier y la FFT


La nueva fft ser ahora >>y=abs(y)/50; >>bar(A);

Programacin y Simulacin Avanzada

22

La transformada de Fourier y la FFT


En un caso real para limpiar mejor las componentes de ruido podramos eliminar tambin los cercanos (24 al 28, y 75 al 79, se deja como ejercicio).

Programacin y Simulacin Avanzada

23

La transformada de Fourier y la FFT


La nueva fft ser ahora >>y=abs(y)/50; >>bar(A);

Programacin y Simulacin Avanzada

24

La transformada de Fourier y la FFT


Una vez eliminados podemos invertir la transformacin de Fourier con el comando ifft. El resultado, de nuevo es un nmero complejo. Nos interesa slo su parte real >>z=ifft(y); >>plot(real(z)) Hemos filtrado la seal!

Programacin y Simulacin Avanzada

25

La transformada de Fourier y la FFT


Si el muestreo lo hubisemos hecho con ms puntos el resultado sera mejor, pero el obtenido es suficientemente bueno para la mayor parte de las necesidades. >>t=[0:0.005:1]; >>x1=5*sin(4*pi*t); >>x2=2*sin(8*pi*t+1); >>x3=0.5*sin(50*pi*t+1); >>x=x1+x2+x3; >>plot(t,x)

Programacin y Simulacin Avanzada

26

La transformada de Fourier y la FFT


>>y=fft(x); >>bar(abs(y))

Programacin y Simulacin Avanzada

27

La transformada de Fourier y la FFT


>>y(24:28)=[0,0,0,0,0]; >>y(175:179)=[0,0,0,0,0]; >>z=real(ifft(y)); >>plot(z);

Programacin y Simulacin Avanzada

28

La transformada de Fourier y la FFT


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.

Programacin y Simulacin Avanzada

29

La transformada de Fourier y la FFT


Dibujaremos una superficie para ver de qu estamos hablando. >>t=[0:0.01:1]; >> x1=5*sin(2*pi*t); >> x2=2*sin(8*pi*t+1); >> z=x1'*x2; >> surf(z)

Programacin y Simulacin Avanzada

30

La transformada de Fourier y la FFT


Y al igual que antes, si la superficie est dada por un tabla de datos, podr ser transformada, haciendo ahora una FFT en dos dimensiones. Esta transformacin dar como resultado otra tabla de amplitudes y fases de ondas como la del dibujo, tambin en 2D. >>y=fft2(z); >>surf(abs(y))

Programacin y Simulacin Avanzada

31

Tarea
1. 2. 3. 4. 5. 6. 7. 8. 9. Generar una seal con componente en continua y cinco componentes frecuenciales. Mostrar la seal en el dominio del tiempo y la frecuencia. Generar un ruido de alta frecuencia. Mostrar la seal en el dominio del tiempo y la frecuencia. Agregarle el ruido a la seal. Mostrar la seal compuesta en el dominio del tiempo y la frecuencia. Filtrar el ruido. Mostrar el resultado en el dominio del tiempo y la frecuencia. Escoger una seal unidimensional (1D) en formato wav sin comprimir. Mostrar la seal en el dominio del tiempo y la frecuencia. Generar un ruido de alta frecuencia. Mostrar la seal en el dominio del tiempo y la frecuencia. Agregarle el ruido a la seal. Mostrar la seal compuesta en el dominio del tiempo y la frecuencia. Filtrar el ruido. Mostrar el resultado en el dominio del tiempo y la frecuencia. Escoger una seal bidimensional (2D) en escala de grises en formato bmp. Mostrar la seal en el dominio del tiempo y la frecuencia.
Programacin y Simulacin Avanzada

32

DFT

Programacin y Simulacin Avanzada

33

DFT

Programacin y Simulacin Avanzada

34

DFT

Programacin y Simulacin Avanzada

35

DFT

Programacin y Simulacin Avanzada

36

DFT

Programacin y Simulacin Avanzada

37

DFT

Programacin y Simulacin Avanzada

38

DFT

Programacin y Simulacin Avanzada

39

Informe de Laboratorio
El informe de laboratorio se presentar con el desarrollo de todos los ejercicios desarrollados y preguntas de esta presentacin. El informe debe ser bsicamente un documento grfico en lo posible y debe adjuntarse los cdigos con los comentarios solicitados en USB. Lo mas importante de un informe de laboratorio son los conclusiones, comentarios y observaciones. Si han utilizado fuentes adicionales, adjuntarlas slo en USB. EL Informe presentar impreso y en formato digital (en USB).

Programacin y Simulacin Avanzada

40

Presentacin
Todas las fuentes, archivos utilizados y el Informe deben presentarse en su carpeta personal del dropbox, dentro de una carpeta que lleve las iniciales del curso, sus Apellidos, guion bajo y luego el nmero de laboratorio. Ejemplo: PYSA_PaternoM_L8 Si adjunta fuentes adicionales, debe conservar el nombre original y agregar _L8.

Las Tareas que no cumplan las indicaciones no sern evaluados por el profesor.
Programacin y Simulacin Avanzada

41

Agradecimiento

Blog del Curso: http://utppysa.blogspot.com


Programacin y Simulacin Avanzada - Prof. Ing. Jos C. Bentez P.

42