Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Transformación discreta de Fourier

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

El entorno MATLAB® proporciona las funciones y para calcular la transformación discreta de Fourier y su inversa, respectivamente.fftifft Para la secuencia de entrada y su versión transformada (la transformación de Fourier en tiempo discreto a frecuencias igualmente espaciadas alrededor del círculo de unidad), las dos funciones implementan las relacionesxX

<math display="block">
<mrow>
<mi>X</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>=</mo>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</munderover>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<msubsup>
<mrow>
<mi>W</mi>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
<mrow>
<mi>k</mi>
<mi>n</mi>
</mrow>
</msubsup>
</mrow>
</math>

Y

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</munderover>
<mi>X</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<msubsup>
<mrow>
<mi>W</mi>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>k</mi>
<mi>n</mi>
</mrow>
</msubsup>
<mo>.</mo>
</mrow>
</math>

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

<math display="block">
<mrow>
<msub>
<mrow>
<mi>W</mi>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</msub>
<mo>=</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mi>j</mi>
<mn>2</mn>
<mi>π</mi>
<mo>/</mo>
<mi>N</mi>
</mrow>
</msup>
<mo>.</mo>
</mrow>
</math>

La convención MATLAB debe utilizar un negativo para la función.Notajfft Esta es una convención de ingeniería; física y matemáticas puras suelen utilizar un positivo .j

, con un único argumento de entrada, , calcula la DFT del vector o matriz de entrada.fftx Si es un vector, calcula la DFT del vector; si es una matriz rectangular, calcula el DFT de cada columna de matriz.xfftxfft

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

Calcular el DFT de la señal y la magnitud y fase de la secuencia transformada. Disminuya el error de redondeo al calcular la fase estableciendo valores de transformación de pequeña 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 trazar la magnitud y la fase en grados, escriba 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];

Un segundo argumento para especificar un número de puntos para la transformación, que representa la longitud DFT:fftn

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];

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

La amplitud FFT resultante es , donde está la amplitud original y es el número de puntos FFT.NotaA*n/2An Esto sólo es cierto si el número de puntos FFT es mayor o igual que el número de muestras de datos. Si el número de puntos FFT es menor, la amplitud FFT es menor que la amplitud original por la cantidad anterior.

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

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

Esta caja de herramientas también incluye funciones para el FFT bidimensional y su inversa, y .fft2ifft2 Estas funciones son útiles para el procesamiento de señales o imágenes bidimensionales. La función goertzel, que es otro algoritmo para calcular el DFT, también se incluye en la caja de herramientas. Esta función es eficiente para calcular el DFT de una parte de una señal larga.

A veces es conveniente reorganizar la salida de la función o para que el componente de frecuencia cero esté en el centro de la secuencia.fftfft2 La función mueve el componente de frecuencia cero al centro de un vector o matriz.fftshift

Consulte también

| | | | |