Main Content

Transformada discreta de Fourier

La transformada discreta de Fourier, o DFT, es la principal herramienta del procesamiento digital de señales. La base del producto es la transformada rápida de Fourier (FFT), un método para calcular la DFT con un tiempo de ejecución reducido. Muchas de las funciones de la toolbox (incluyendo la respuesta en frecuencia en el dominio Z, el análisis del espectro y del cepstrum, y algunas funciones de diseño e implementación de filtros) incorporan la FFT.

El entorno MATLAB® cuenta con las funciones fft y ifft, que sirven para calcular la transformada discreta de Fourier y su inversa, respectivamente. Para la secuencia de entrada x y su versión transformada X (la transformada de Fourier en tiempo discreto a frecuencias igualmente espaciadas alrededor del círculo de la unidad), las dos funciones implementan las relaciones

X(k+1)=n=0N-1x(n+1)WNkn

y

x(n+1)=1Nk=0N-1X(k+1)WN-kn.

En estas ecuaciones, los subíndices de la serie comienzan con 1 en lugar de 0, debido al esquema de indexación de vectores de MATLAB, y

WN=e-j2π/N.

Nota: La convención de MATLAB consiste en utilizar un j negativo para la función fft. Se trata de una convención propia del sector de la ingeniería; el ámbito de la física y las matemáticas puras suele utilizar un j positivo.

fft, con un único argumento de entrada, x, calcula la DFT del vector o la matriz de entrada. Si x es un vector, fft calcula la DFT del vector; si x es un arreglo rectangular, fft calcula la DFT de cada columna del arreglo.

Por ejemplo, cree un vector de tiempo y una señal:

t = 0:1/100:10-1/100;                     % Time vector
x = sin(2*pi*15*t) + sin(2*pi*40*t);      % Signal

Calcule la DFT de la señal y la magnitud y la fase de la secuencia transformada. Reduzca el error de redondeo al calcular la fase estableciendo los valores de la transformada de menor magnitud en cero.

y = fft(x);                               % Compute DFT of x
m = abs(y);                               % Magnitude
y(m<1e-6) = 0;
p = unwrap(angle(y));                     % Phase

Para representar la magnitud y la fase en grados, introduzca los siguientes comandos:

f = (0:length(y)-1)*100/length(y);        % Frequency vector

subplot(2,1,1)
plot(f,m)
title('Magnitude')
ax = gca;
ax.XTick = [15 40 60 85];

subplot(2,1,2)
plot(f,p*180/pi)
title('Phase')
ax = gca;
ax.XTick = [15 40 60 85];

Figure contains 2 axes objects. Axes object 1 with title Magnitude contains an object of type line. Axes object 2 with title Phase contains an object of type line.

Un segundo argumento de fft especifica un número de puntos n para la transformada, que representa la longitud de la DFT:

n = 512;
y = fft(x,n);
m = abs(y);
p = unwrap(angle(y));
f = (0:length(y)-1)*100/length(y);

subplot(2,1,1)
plot(f,m)
title('Magnitude')
ax = gca;
ax.XTick = [15 40 60 85];

subplot(2,1,2)
plot(f,p*180/pi)
title('Phase')
ax = gca;
ax.XTick = [15 40 60 85];

Figure contains 2 axes objects. Axes object 1 with title Magnitude contains an object of type line. Axes object 2 with title Phase contains an object of type line.

En este caso, fft rellena la secuencia de entrada con ceros si es más corta que n, o trunca la secuencia si es más larga que n. Si no se especifica n, se establece por defecto la longitud de la secuencia de entrada. El tiempo de ejecución de fft depende de la longitud, n, de la DFT que realiza; consulte la página de referencia de fft para obtener información detallada sobre el algoritmo.

Nota: La amplitud FFT resultante es A*n/2, donde A es la amplitud original y n es el número de puntos de la FFT. Esto solo es cierto si el número de puntos de la FFT es mayor que o igual al número de muestras de datos. Si el número de puntos de la FFT es menor, la amplitud de la FFT es menor que la amplitud original en la cantidad mencionada.

La función de la transformada discreta de Fourier inversa ifft también acepta una secuencia de entrada y, opcionalmente, el número de puntos deseados para la transformada. Pruebe el ejemplo siguiente: la secuencia original x y la secuencia reconstruida son idénticas (dentro del error esperado por el redondeo).

t = 0:1/255:1;
x = sin(2*pi*120*t);
y = real(ifft(fft(x)));

figure
plot(t,x-y)

Figure contains an axes object. The axes object contains an object of type line.

Esta toolbox incluye asimismo funciones para la FFT bidimensional y su inversa, fft2 y ifft2. Estas funciones son útiles para procesar señales o imágenes bidimensionales. La función de Goertzel, que es otro algoritmo para calcular la DFT, también se incluye en la toolbox. Se trata de una función indudablemente eficaz para calcular la DFT de parte de una señal larga.

En ocasiones, resulta conveniente reordenar la salida de la función fft o fft2 para que el componente de frecuencia cero esté en el centro de la secuencia. La función fftshift mueve el componente de frecuencia cero al centro de un vector o una matriz.

Consulte también

| | | | |