You are on page 1of 11

UNIVERSIDAD TCNICA FEDERICO SANTA MARA

DEPARTAMENTO DE ELECTRNICA

LECTURA 5
TRANSFORMADA RPIDA DE FOURIER FFT

CURSO SIGLA PROFESOR AYUDANTE

LABORATORIO DE PROCESAMIENTO DIGITAL DE SEALES ELO385 RODRIGO HUERTA CORTS ALEJANDRO HERRERA

Valparaso, 14 de Abril de 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

INTRODUCCIN
El anlisis frecuencial de seales en tiempo discreto se realiza, normalmente, de forma ms conveniente en procesadores de seales digitales que pueden ser computadores de propsito general (PCs) o hardware especialmente diseado. Para realizar el anlisis frecuencial de una seal discreta es necesario convertir la secuencia {x(n)} en el dominio del tiempo en una secuencia equivalente en el dominio de la frecuencia. La Transformada Discreta de Fourier (DFT) juega un papel importante en numerosas aplicaciones de procesamiento de seales digitales. Entre otras destacan: filtrado lineal, anlisis de correlacin y anlisis espectral. Una de las razones de la importancia de la DFT es la existencia de algoritmos sumamente eficientes para su clculo. Uno de los ms utilizados es el denominado Radix 2, el cual se basa en el hecho de analizar una secuencia que posee un nmero tamao N que es una potencia de 2. Existe un algoritmo denominado Radix 4, cuyo nombre deriva de la misma razn del Radix 2. Estos tipos de algoritmos permiten calcular en forma rpida y sumamente eficiente la DFT. Se denominan FFT por la sigla en ingls de Fast Fourier Transform. Como veremos ms adelante, la DFT requiere de grandes cantidades de operaciones matemticas para lograr el mismo resultado que los algoritmos FFT. En particular, el clculo de la FFT (con el algoritmo Radix 2) usando 1024 puntos puede mejorar la rapidez hasta en alrededor de 200 veces la velocidad de calculo directo la DFT. En las siguientes secciones se muestra el algoritmo FFT radix 2 que utiliza el criterio de Decimacin en Frecuencia, el cual se basa en la descomposicin sucesiva de la entrada en subsecuencias cada vez ms pequeas, hasta cierto lmite.

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

1 TRANSFORMADA DISCRETA DE FOURIER - DFT


Bsicamente, el problema de clculo de la DFT es obtener la secuencia {X(n)} de longitud N segn la frmula dada en (1): X (k ) = x(n)W nk
n =0 N 1

(1)

donde N = 2 a , a = 1, 2, 3, ... El factor W = e


j 2 N

con e jx = cos( x) j sen( x) es denominado Twiddle Constant.

Con lo anterior, el calculo de un punto de la transformada discreta de fourier est dada por: X (k ) = x(0)W 0 + x(1)W k + x(2)W 2 k + ....x( N 1)W k ( N 1) k = 0, 1, 2, ...N-1 (2)

Desarrollando (2) para los N valores posibles de k se obtiene una matriz de tamao NxN. De (2) se puede calcular el nmero de operaciones necesarias para realizar la transformacin de los datos mediante este algoritmo. El nmero de sumas complejas que se deben realizar es de (N-1)N y la cantidad de multiplicaciones complejas asciende a N2. Es claro que sta cantidad de operaciones es alta y requiere de un enorme poder de clculo. El clculo directo de la DFT no es eficiente debido, fundamentalmente, a que no explota las propiedades de simetra y periodicidad del factor de fase WN. De la observacin de (2) es claro que no es necesario realizar las N2 multiplicaciones ya que los valores de los factores W0 = 1 no son necesarios de multiplicar. Adems existen propiedades de periodicidad y simetra en stos factores de forma tal que: W k+N = W k W k + N / 2 = W k (3) (4)

La simetra y periodicidad de los factores W quedan de manifiesto en la figura siguiente. El ejemplo es para N = 8.
W6 = W14 = ... W5 = W13 = ... W7 = W15 = ...

W4 = W12 = ...

W0 = W8 = ...

W3 = W11 = ... W2 = W10 = ...

W1 = W9 = ...

Figura 1: Periodicidad y simetra de los factores W

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

A partir del algoritmo DFT y las consideraciones anteriores es posible llegar a un mtodo de clculo mucho ms eficiente, que entrega los mismos resultados y con un nmero menor de operaciones. Es el llamado algoritmo de Transformada Rpida de Fourier (FFT, Fast Fourier Transform).

1.1 DESARROLLO DEL ALGORITMO FFT RADIX 2. DECIMACIN EN FRECUENCIA.


Sea la secuencia de datos {x(n)}, con n: [0 : N-1]. Separando {x(n)} en dos secuencias para ns pares e impares es posible aplicar la DFT a la secuencia de datos {x(n)}, quedando de la siguiente forma: X (k ) = x(n)W nk + x(n)W nk
n =0 n= N 2 N 1 2 N 1

(5)

Si se reemplaza n = n + N/2 en la segunda sumatoria de (5) queda X (k ) = x(n)W nk + W kN / 2 x(n + Donde WkN/2 sale de la sumatoria por no estar en funcin de n.
n =0 n =0 N 1 2 N 1 2

N )W nk 2

(6)

Usando W kN / 2 = (cos( ) jsen( )) k = 1k , (6) queda de la forma siguiente N X (k ) = x(n) + (1) k x(n + )W nk 2 n =0
N 1 2

(7)

A partir del hecho de que (-1)k = 1 para k par y (-1)k = -1 para k impar, (7) puede ser separada en sumatorias para secuencias pares e impares N X (k ) = x(n) + x(n + )W nk , para k par 2 n =0 N X (k ) = x(n) x(n + )W nk , para k impar 2 n =0
N 1 2 N 1 2

(8)

(9)

Si se reemplaza k = 2k para la sumatoria de los pares y k = 2k+1 para la sumatoria de los impares, (8) y (9) pueden ser reescritas como N X (2k ) = x(n) + x(n + )W 2 nk , para k par 2 n =0 N X (2k 1) = x(n) x(n + )W 2 nkW n , para k impar 2 n =0 RAHC - 2003
4
N 1 2 N 1 2

(10)

(11)

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

Para facilitar la escritura y aprovechando que los factores W son funciones de perodo N, los factores 2 pueden ser reescritos de la forma siguiente:W N . Luego W N puede ser representado como WN / 2 . Sean a(n) = x(n) + x(n + N / 2) b(n) = x(n) x(n + N / 2) Las ecuaciones (12) y (13) pueden ser escritas ms claramente como 2 DFT de N/2 puntos, o
nk X (2k ) = a (n)WN / 2 n =0 N 1 2 n =0 N 1 2

(12) (13)

(14) (15)

nk n X (2k + 1) = b(n)WN / 2WN

La figura 2 muestra la descomposicin de una DFT de N puntos en dos DFT de N/2 puntos para el caso de N = 8. Aplicando (14) y (15) es posible llegar a obtener los Xs de la primera etapa de la FFT.
a(0) x(0) a(1) x(1) a(2) x(2) a(3) x(3) b(0) x(4) x(5) x(6) x(7) -1 b(1) -1 b(2) -1 b(3) -1 W3
N

X(0) X(2) X(4) X(6) W0


N

N/2 DFT

X(1) X(3) X(5) X(7)

W1N W2N

N/2 DFT

Figura 2: Descomposicin de una DFT de N puntos en 2 DFTs de N/2 puntos, para N = 8.

Como resultado del proceso de descomposicin, los Xs quedan ordenados en grupos de pares e impares. El proceso de descomposicin puede ser repetido nuevamente pero esta vez para N/4, que para el caso de 8 puntos, es la etapa final. El nmero de etapas, o DFTs, se deber repetir hasta llegar a la DFT de 2 puntos. En general una FFT de N puntos tendr a etapas, con N = 2 a .

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

Etapa 1
x(0) x(1)

Etapa 2

Etapa 3
X(0)

N/4 DFT
X(4) W0 x(2) x(3) W0 x(4) x(5) x(6) x(7) -1 -1 -1 -1 W1
N N

-1 -1

X(2)

W2N

N/4 DFT
X(6) X(1)

N/4 DFT
X(5) W0N -1 W2
N

W2N W3
N

X(3)

N/4 DFT
X(7)

-1

Figura 3: Descomposicin de una DFT de N/2 puntos en 4 DFTs de N/4 puntos, para N = 8.

En la figura 3 es posible ver que la salida del algoritmo est desordenada. Esto se debe a que en las etapas que componen el algoritmo cada vez se realiza un agrupamiento de los datos almacenados en posiciones pares de memoria y los almacenados en posiciones impares. Por esta razn la salida necesita ser reordenada. El proceso que deja correctamente ordenados los datos de salida se denomina bit-reverse y ser explicado ms adelante. La ltima descomposicin, ya que se ha llegado a aplicar la DFT de 2 puntos, es la ms baja descomposicin del algoritmo Radix 2. Una DFT de 2 puntos las salidas X(n) pueden ser escritas como se observa en (16) y (17) X (0) = x(0)W 0 + x(1)W 0 = x(0) + x(1) X (1) = x(0)W 0 + x(1)W 1 = x(0) x(1) recordar que W = -1. Las ecuaciones (16) y (17) pueden ser representadas en un diagrama de flujo conocido como Mariposa. Este es el diagrama de flujo de la etapa final de todo algoritmo FFT que utiliza la decimacin en frecuencia.
1

(16) (17)

x(0)

X(0) = x(0) + x(1)

x(1)

X(1) = x(0) - x(1)


Figura 4: Diagrama de flujo de una FFT de 2 puntos - Mariposa

La decimacin en Frecuencia adquiere su nombre del hecho de que la secuencia de salida X(k) es descompuesta (decimada) en subsecuencias ms pequeas, continuando por a etapas o iteraciones. La RAHC - 2003
6

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

salida X(k) posee componentes tanto reales como imaginarios, y el algoritmo FFT se puede acomodar a entradas tanto reales como complejas. La FFT no es una aproximacin de la DFT, sino que es un algoritmo ms eficiente que se vuelve ms y ms importante a medida que N aumenta. El diagrama final del algoritmo Radix 2, con decimacin en frecuencia es mostrado en la figura 5.
Etapa 1
x(0) x(1) -1 x(2) -1 x(3) -1 x(4) -1 x(5) -1 x(6) -1 x(7) -1 W3 N -1 W2 N -1 W2 N -1 X(7) W0 N W1 N -1 X(3) X(5) W0 N W2 N -1 X(1) X(6) W0 N X(2)

Etapa 2

Etapa 3
X(0) X(4)

Figura 5: Diagrama de flujo de clculo de una FFT de 8 puntos usando decimacin en frecuencia

Una alternativa al diagrama de flujo mostrado en la figura 5 puede ser obtenida con entradas desordenadas (aplicando bit reverse a la secuencia de entrada) y salidas ya ordenadas. 1.1.1 Un ejemplo completo para el caso de N = 8

Sea la secuencia de entrada x(0) = x(1) = x(2) = x(3) = 1 y x(4) = x(5) = x(6) = x(7) = 0. Se encontrar su secuencia X(k), k = 1, 2, ...,7. Para N = 8, los coeficientes W pueden ser calculados slo una vez y luego almacenados para ocuparlos luego durante la aplicacin del algoritmo. No resulta eficiente generalizar la funcin que los calcula e incluirla dentro de las iteraciones de clculo. Los valores son:
W0 = W1 = W2 = W3 = 1 e-j2/8 = cos(/4) j sin (/4) = 0.707 j 0.707 e-j4/8 = - j e-j6/8 = - 0.707 j 0.707

Las salidas intermedias de la secuencia de salida pueden ser obtenidas para cada etapa: Etapa 1:
x(0) + x(4) = x(1) + x(5) = x(2) + x(6) = x(3) + x(7) = [x(0) - x(4)]W0 = [x(1) - x(5)]W1 = [x(2) - x(6)]W2 = [x(3) - x(7)]W3 = 1 1 1 1 1 0.707 j0.707 -j -0.707 j0.707 7 x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7)

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

Aqu x(0), x(1),..., x(7) representan las salidas intermedias luego de la primera iteracin. Ahora stas son utilizadas como entradas para la siguiente etapa Etapa 2:
x(0) + x(2) = x(1) + x(3) = [x(0) x(2)]W0 = [x(1) x(3)]W0 = x(4) + x(6) = x(5) x(7) = (0.707 j0.707) + (-0.707 j0.707) = [x(4) x(6)]W0 = [x(5) x(7)]W2 = 2 2 0 0 1 j j1.41 1+ j j1.41 x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7)

La secuencia x(0), x(1),..., x(7) representan las salidas intermedias luego de la segunda iteracin. Nuevamente son utilizadas como entradas para la siguiente etapa
X(0) = X(4) = X(2) = X(6) = X(1) = X(5) = X(3) = X(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = x(7) + x(7) = 4 0 0 0 (1 j) + ( j1.41) = 1 j2.41 1 + j0.41 (1 + j) + ( j1.41) = 1 j0.41 1 + j2.41

Ahora la notacin X(k) representa la salida final del algoritmo. Los valores X(0), X(1),..., X(7) forman la secuencia de salida ordenada. Los resultados pueden ser verificados en MATLAB utilizando la funcin fft(). Un ejemplo completo para el caso de una FFT de 16 puntos utilizando el algoritmo Radix 2 se presenta a continuacin en la figura 6. La secuencia de entrada corresponde a un escaln temporal.

Figura 6: FFT de 16 puntos utilizando decimacin en frecuencia.

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

2 DESARROLLO DEL ALGORITMO FFT RADIX 2. DECIMACIN EN TIEMPO.


A diferencia del proceso de decimacin en frecuencia (DIF) que se basa en la descomposicin de la salida en subsecuencias ms pequeas, la decimacin en tiempo (DIT) es un proceso que divide la secuencia de entrada en subsecuencias ms pequeas. Sea la secuencia de datos {x(n)}, con n: [0 : N-1]. Separando {x(n)} en dos secuencias para ns pares e impares es posible aplicar (1) a la secuencia de datos {x(n)}, quedando de la siguiente forma: X (k ) = x(2n)W
n =0 2 Ahora, usandoW N = WN / 2 en (18) se obtiene N 1 2 n =0 N 1 2 n =0 N 1 2 2 nk

+ x(2n + 1)W ( 2 n +1) k


n =0

N 1 2

(18)

nk k nk X (k ) = x(2n)WN / 2 + WN x(2n + 1)WN / 2

(19)

Lo cual representa una DFT de 2 puntos. Sean ahora


nk C (k ) = x(2n)WN / 2 n =0 N 1 2 n =0 N 1 2

(20) (19)

nk D(k ) = x(2n + 1)WN / 2

Entonces X(k) en (19) puede ser escrito como


k X (k ) = C (k ) + WN D(k )

(20)

La ecuacin (20) debe ser interpretada para k < (N/2) 1. Usando la simetra de W, Wk+N/2 = -Wk, X (k + N / 2) = C (k ) W k D(k ) para k = 0, 1, 2, ...(N/2 1) Por ejemplo, para N = 8, (20) y (21) quedan X (k ) = C (k ) + W k D(k ) k = 0, 1, 2, 3 X (k + 4) = C (k ) W D(k ) k = 0, 1, 2, 3
k

(21)

(22) (23)

La figura 7 muestra la descomposicin de una DFT de 8 puntos en 2 DFTs de 4 puntos con el procedimiento de decimacin en el tiempo.

RAHC - 2003

Laboratorio de Procesamiento Digital de Seales

Transformada Rpida de Fourier - FFT

C(0) x x x x x x x x
(0) X(0)

C(1)
(2)

0
W

N/2 DFT

X(1)

C(2) C(3)

1
W

(4)

X(2)

2
W

(6)

X(3)

D(0)
(1) -W

3
W

X(4)

D(1)
(3)

N/2 DFT

1
-W

X(5)

D(2)
2
-W D X(6)

(5)

(3)
3
-W X(7)

(7)

Figura 7: Descomposicin de una DFT de 8 puntos en 2 DFTs de 4 puntos usando decimacin en tiempo.

Esta descomposicin es repetida para cada DFT de 4 puntos, llegando a 4 DFTs de 2 puntos. Ya que la ltima descomposicin es de 2 puntos este es fin del algoritmo, como se muestra en la figura 8.
x(0) X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)

N/4 DFT
x(4) x(2)

W0 W2

W0 W1 W2 W3 -W0 -W1 -W2 -W3

N/4 DFT
x(6) x(1)

-W0 -W2

N/4 DFT
x(5) x(3)

W0 W2

N/4 DFT
x(7)

-W0 -W2

Figura 8: Descomposicin de 2 DFTs de 4 puntos en 4 de dos puntos usando decimacin en tiempo.

La figura 9 muestra el diagrama de flujo final para una FFT de 8 puntos usando decimacin en tiempo. La secuencia de entrada est desordenada de la misma forma que la salida se encuentra desordenada en la decimacin en frecuencia. Con la secuencia de entrada x(n) desordenada, la salida resultante, X(s) queda debidamente ordenada.

RAHC - 2003

10

Laboratorio de Procesamiento Digital de Seales


x(0) x(4) x(2) x(6) x(1) x(5) x(3) x(7)

Transformada Rpida de Fourier - FFT


X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)

W0 -W0 W0 -W0 W0 -W0 W0 -W0

W0 W2 -W0 -W2 W0 W2 -W0 -W2

W0 W1 W2 W3 -W0 -W1 -W2 -W3

Figura 9: Diagrama de flujo de una FFT de 8 puntos usando decimacin en tiempo.

Idnticos resultados se obtienen con ambos procesos de clculo de la FFT (decimacin en tiempo y en frecuencia). Un diagrama de flujo alternativo al mostrado en la figura 9 se puede obtener con una secuencia de entrada ordenada y una salida desordenada.

3 ALGORITMO BIT REVERSAL PARA ORDENAMIENTO DE DATOS


Este algoritmo permite que una secuencia de entrada o salida del clculo de la FFT sea reordenada para obtener un resultado deseado. Como se vio en el caso de DIF, la salida es la que se desea reordenar. Cuando se utiliza DIT es la entrada la que se desordena para tener el resultado en orden. Para ilustrar este algoritmo se ver el caso de N = 8, representado por tres bits. El bit 3 y el 1 deben ser intercambiados de sus posiciones. Ejemplo, (100)b queda (001)b. Esto hace que el dato que estaba en la posicin de memoria 4 = (100)b pase a la posicin 1 = (001)b. Similarmente, (110)b es intercambiado por (011)b. De esta forma, una secuencia puede ser ordenada tanto para aplicarla a la entrada del algoritmo DIT o a aplicarla a la salida del algoritmo DIF. Lo anterior se resume grficamente en la siguiente figura: n2n1n0 n0n1n2 000 000 001 100 010 010 011 110 100 001 101 101 110 011 111 111
Figura 10: Resultado del intercambio de bits para aplicar el reordenamiento de la salida del algoritmo FFT. Conocido como Bit reverse. Caso de 3 bit o FFT de 8 puntos

RAHC - 2003

11

You might also like