Sie sind auf Seite 1von 6

LA TRANSFORMADA DE FOURIER EN TIEMPO DISCRETO

CON MATLAB
El objetivo del siguiente tutorial o guía de programación de la transformada de Fourier en tiempo discreto es
sencillo, ya que vamos a hacer uso del poderoso comando que tiene como herramienta MATLAB como es fft (Fast
Fourier Transform), si bien esta función es tanto para tiempo continuo como para tiempo discreto, la diferencia
entre uno y otro está en la programación del intervalo de valores en las abscisas, en tiempo continuo tendremos un
intervalo sin “paso” y en tiempo discreto haremos uso del paso.

El código para nuestro propósito es el siguiente:

CÁLCULO DE LA TRANSFORMADA DE FOURIER EN TD DE FUNCIONES ARMÓNICAS.-


N=512;%NUMERO DE DATOS (podemos elegir cualquier valor, pero siempre
debe ser coherente )
t=linspace(-1,1,N); %intervalo de la variable de tiempo
T=2/N; %intervalo de muestreo
y=cos(2*pi*10*t);
figure(1), plot(t,y)
fc=1/(2*T);
paso=2*fc/N;
f=-fc:paso:fc-paso; %vector de frecuencias restamos el paso ya que en el dominio de la
frecuencia deben haber tantos elementos como hay en el dominio del tiempo, restando el
paso tenemos 512 elementos.
Y=fftshift(fft(y));
figure(2), plot(f,Y), xlabel('frecuencia')

Nuestras salidas son 2 graficas


y=cos(2*pi*10*t)
y=cos(2*pi*10*t)

FFT (Figura 2-TFTD la función coseno)


Así de sencillo es el calculo de la transformada de Fourier en tiempo discreto, pero hay un dato importante que
debemos recordar, la función resultante de la transformada de Fourier está en el dominio de la frecuencia y Matlab
ignoró la parte imaginaria ; en el ejemplo anterior no pudimos demostrar dicho caso ya que la transformada de
fourier de la función coseno no tiene parte imaginaria, vamos a calcular la TF de la función seno, que sí tiene parte
imaginaria. Para ello haremos un arreglo en el código (está resaltado con amarillo).

TRANSFORMADA DE FOURIER DE LA FUNCION SENO


N=512;%NUMERO DE DATOS (podemos elegir cualquier valor, pero siempre
debe ser coherente )
t=linspace(-1,1,N); %intervalo de la variable de tiempo
T=2/N; %intervalo de muestreo
y=sin(2*pi*10*t);
figure(1), plot(t,y)
fc=1/(2*T);
paso=2*fc/N;
f=-fc:paso:fc-paso; %vector de frecuencias restamos el paso ya que en el dominio de la
frecuencia deben haber tantos elementos como hay en el dominio del tiempo, restando el
paso tenemos 512 elementos.
Y=fftshift(fft(y));
figure(2), plot(f,imag(Y)), xlabel('frecuencia')
Figura 1 SENO

FFT (Figura 2-TFTD la función SENO)


TRANSFORMADA DE FOURIER EN TIEMPO DISCRETO 2D:

Vamos a desarrollar el codigo para el calculo de la transformada de fourier en tiempo discreto en 2 dimensiones;
utilizando el comando fft2 y una nueva colección de comandos nuevos que nos van a permitir apreciar imágenes de
la transformada.

N nos indica el tamaño de la imagen en pixeles:

Meshgrid es una rejilla y linspace nos indica el dominio del problema

Imagesc nos permite visualizar la imagen de prueba (testimage)

Como vimos en el ejemplo anterior el comando fftshift centra la grafica de la transformada de fourier

resulta que por el calculo de la transforada de fourier de testimage pues tiene parte compleja y matlab no procesa
funciones complejas a menos que le especifiquemos que es una funcion compleja, como basamos nuestro analisis de
la tf en los numeros reales simplemente recalcamos que queremos la parte real utilizando el comando abs() en la
imagen de la transformada de fourier

CÓDIGO
N=256;

[x,y]=meshgrid(linspace(-1,1,N)); %Meshgrid es una rejilla y linspace nos indica el dominio del problema

testimage=cos(2*pi*(10*x+10*y));

figure(1), imagesc(testimage), truesize % logra que cada dato de la matriz deciman ocupe un pixel de
la pantalla del monitor

TESTIMAGE=fftshift(fft2(testimage))

figure(2),imagesc(abs(TESTIMAGE)), truesize % Imagesc nos permite visualizar la imagen de


prueba (testimage)

Ejecutando el codigo tenemos las siguientes imágenes:

Ax+Ay=
inclinación de 45
grados
Los puntos que indican las flechas amarilals representan a la función delta de Dirac, que es el resultado de la
transformada de Fourier de la función coseno, se puede decir que es una vista aérea.

Un detalle importante de la FFT2 es que los puntos que representan las deltas de dirac están en la dirección de
“propagación de la función”

Observando mas detalladamente el código de la función que depende de dos variables vemos que existe un angulo
de inclinación de 45 grados ya que los coeficientes de ambas variables con iguales.¿Que pasaría si los cambiamos?
N=256;
[x,y]=meshgrid(linspace(-1,1,N));
testimage=cos(2*pi*(4*x+9*y));
figure(1), imagesc(testimage), truesize
TESTIMAGE=fftshift(fft2(testimage))
figure(2),imagesc(abs(TESTIMAGE)), truesize

Tenemos

Comparando ambas funciones de forma simultánea tenemos:

Esta herramienta nos sirve para apreciar la dirección de las deltas de Dirac que tienen implícitamente la dirección de
la función (En el sentido estricto esta definición no sirve) coseno en 2 dimensiones.
Pero para mejorar la experiencia grafica de la Transformada de Fourier en tiempo discreto podemos hacer algunos
cambios muy interesantes.

Para ello debemos tener claro un aspecto importante de la función Delta de dirac (Es la TTF de nuestra función). En
el análisis profundo de dicha función llegamos al detalle de que su imagen no es discreta del todo es decir no es un
impulso unitario aunque para fines “prácticos” los tomamos así. La Funcion Delta de dirac tiene un valor máximo en
un tiempo específico (Tiempo o cualquier variable independiente) pero no es cero del todo en otros valores si no que
toma valores cerca al cero que se pueden considerar nulos, como ser 10^8, 10^9 etc. Pero la pequeña modificación
del código nos mostrará esos pequeños valores.

Como queremos localizar esos valores pequeños, trabajamos con la escala logarítmica en el gráfico de la TTF
N=256;
[x,y]=meshgrid(linspace(-1,1,N));
testimage=cos(2*pi*(4*x+9*y));
figure(1), imagesc(testimage), truesize
TESTIMAGE=fftshift(fft2(testimage))
figure(2),imagesc(log10(abs(TESTIMAGE))), truesize

Ejecutando el codigo tenemos lo siguiente:

Para la función cos(2*pi*(4*x+4*y)); tenemos

De esa manera podemos observar el detalle de la Transformada de fourier , las líneas de proyección
de las deltas de Dirac en ambos ejes son equidistantes.
También podemos ver en mas detalle la aproximación ya que estamos en la escala logarítmica (como comentamos)
podemos ver el contraste de las 2 deltas de Dirac y verificar lo que dijimos acerca de su valor máximo y los valores
mas pequeños que se toman en cuenta como ceros.

El código es el siguiente:
N=256;
[x,y]=meshgrid(linspace(-1,1,N));
testimage=cos(2*pi*(4*x+4*y));
figure(1), imagesc(testimage), truesize
TESTIMAGE=fftshift(fft2(testimage))
figure(2),imagesc(log10(abs(TESTIMAGE)+0.01)), truesize,

Contraste de
la imagen
Ejecutando el programa tenemos lo siguiente:
Contraste Contraste
0.01 0.0001

Podemos observar que si queremos analizar la gráfica mas detalladamente solo debemos disminuir el
coeficiente que controla el contraste de la gráfica.

Conclusión:

La transformada de Fourier en 2 dimensiones es un caso generalizado de la FFT en una dimensión que nos
permite analizar algunas particularidades que son imposibles en 1 dimension, como ser la naturaleza de la función
Delta de Dirac.

Matlab es una herramienta especial para la ingeniería y muy útil en el procesamiento de señales.
Aprendimos que si deseamos analizar con profundidad una señal es posible con Matlab, no existen límites.

Me quedo con la frase de un investigador americano acerca del uso de Matlab en el estudio de señales: “El
éxito de Matlab en el procesamiento de señales se debe a que fue hecho para hacer matemáticas”

Das könnte Ihnen auch gefallen