algoritmo FFT

Share Embed Donate


Short Description

Download algoritmo FFT...

Description

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

TRANSFORMADA RÁPIDA DE FOURIER (FFT) 1. RESUMEN La transformada rápida de Fourier (Fast Fourier Transform FFT) es un algoritmo extremadamente rápido para calcular la transformada discreta de Fourier (Discrete Fourier Transform DFT), ambos son métodos que en la práctica ejecuta un computador sobre datos discretos. A menudo cuando se presentan señales en el tiempo de larga duración, se hace inviable ejecutar la DFT, por esto fue necesaria la creación de la FFT, originalmente descubierta por Gauss (1805), fue redescubierta por J. W. Cooley y O. W. Tukey en IBM durante 1960 C.S. Burrus, de la Universidad de Rice University siendo jefe del departamento de Ingeniería, literalmente "escribió el libro" de los algoritmos de la rápida Transformada Discreta de Fourier DFT. Existen distintos métodos para calcular la FFT, en general los podemos dividir en 2 tipos: decimación en el tiempo, y diezmado en la frecuencia. El algoritmo busca reducir el número de multiplicaciones efectuadas en la DFT, reduciendo el número de cálculos para N datos de 2N2 a 2N·log2N, donde N debe ser una potencia de 2.Usualmente la presentación del algoritmo FFT se realiza de forma polinomial pero también puede ser presentado de forma matricial. La FFT explota las simetrías en la matriz W (ec.2.7) para aproximarse a una matriz diagonal. En la actualidad existen algoritmos aun más eficientes de calcular la DFT que inclusive el algoritmo FFT de Cooley y Tukey. No hablaremos del actual algoritmo de la FFT aquí. 2. FUNDAMENTO: 2.1 ANALSÍS DE FOURIER EN TIEMPO DISCRETO: Una señal discreta x [n ] será periódica si se cumple: x [n ]  x[n  N ] , en donde 2 N, periodo fundamental, es un entero mínimo. La exponencial compleja e  j N n es un ejemplo de función periódica discreta. El análisis de Fourier en tiempo discreto es similar a su análogo en tiempo continuo, pero una de las grandes diferencias que presenta en que las series ahora no presentaran infinitos términos sino que estarán determinados por el número del periodo N. Una señal periódica puede representarse en términos de exponenciales complejas de la forma: x [n ] 

N2

ae

k  N1

k

jk 2N n

con N2  ( N1 )  N

(2.1)

Esta es la representación de una serie de Fourier de una señal discreta 2 periódica; para hallar el k-ésimo coeficiente ak multipliquemos por e  jr N n ambos miembros en (2.1): e

 jr 2N n

x [n ] 

N2

ae

k  N1

D. L. LL.

1

k

jr 2N n

e

 jk 2N n

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

Puesto que x[n] es periódica da lo mismo que n  [ N1, N2 o n  [0, N . Ahora tomando sumatoria para 0  n  N : N 1

e

 jr 2N n

n 0

N 1 N 1

x [n ]   ak e

jr 2N n

e

 jk 2N n

n 0 k 0

N 1

N 1

k 0

n 0

  ak  e

j ( r  k ) 2N n

(*)

Pero veamos que: N- 1

åe

ìï (e j 2Np s )N - 1 ïï = 0 ; s ¹ 0, ±N, ±2N,K = ïí e j 2Np s - 1 ïï ïïî N ; s = 0, ±N, ±2N,K

js 2Np n

n =0

N 1

Entonces en (*):

e n 0

 jr 2N n

N 1

N 1

k 0

n 0

x [n ]   ak  e ak 

j ( r  k ) 2N n

 ar N , luego:

1 N 1  jk 2N n  e x [n ] N n 0

(2.2)

Esta última se llama ecuación de análisis, es aplicable solo a una función periódica para obtener su la serie discreta de Fourier (SDF). Veamos ahora que en analogía a la variable continua nuestros resultados se pueden extender para hallar la SDF de señales de duración finita como se ve en la figura: x[n] (a)

N2

-N1

n

xp[n] (b)

-N1

N2

n

FIGURA 1: Ahora, sea x[n] una señal aperiódica de duración N podemos construir una señal periódica xp[n] de periodo N tal que:  x [n ] ; N1  n  N2 x [n ]   p (**)  0 ; N2  n y n  N1 Entonces podemos hallar la representación de la SDF de xp[n] sobre 2 N1  n  N2 en donde se debe cumplir que ak  N1  Nn 01e  jk N n x p [n ] ; ahora para D. L. LL.

2

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

que xp[n] se acerque mas a x[n] podemos hacer que el periodo sea más grande, es decir que en la figura.1.b los ciclos de xp[n] estarán cada vez más alejados y como x [n ]  0 n fuera de  N1  n  N2 , podemos escribir: 1   jk 2N n ak  (2.3)  e x [n ] N n  j   jn Definamos la función X (e )   n  x[ n]e , entonces en (2.3) vemos que: ak 

1 N

X (e jo k ) , con o 

2 N

, de lo cual llegamos a: X (e jo k ) 



 x[n]e

 jko n

(2.4)

n 

Esta expresión se conoce como la transformada de Fourier en tiempo discreto. A partir de (2.1) se observa que x[n] se puede expresar también como: 1  x [n ]  X (e jo k )e jko n (2.5)  N k  Como X (e jo k ) es periódica podemos coger el intervalo de la sumatoria de 0 a N-1, luego: N 1 1 N 1 x [n ]   X (e jo k )e jko n X (e jo k )   x[n ]e  jko n (2.6) N k 0 n 0 2.2 TRANSFORMADA DISCRETA DE FOURIER (DFT): Con el resultado de (2.6) podemos intentar calcular la transformada para un conjunto de N datos, por simplicidad hagamos X (e jo k )  X (k ) y e jo k  e

 jk 2N n

 w Nkn , desarrollando: X (0)  X (1) 

 

N 1 n 0

e

N 1 n 0

 j (0) 2N n

x[n ]  (1  1  K K K  1)

 j (1) 2N

N 1) x [n ]  (w 1·0  w 1·1  K  w 1·( ) N N N

e

M

n

M

X (N  1)   Nn 01e

M

 j ( N 1) 2N n

x [n ]  (w (NN 1)0  w (NN 1)1  K  w (NN 1)( N 1) )

Puede ser expresado de forma matricial como:      

X (0)     X (1)    M     X (N  1)   

1 1

L M

1 (1)(1)

wN

M L O ( N 1)(1) 1 wN L

1 (1)( N 1)

wN

M

       

  w (NN 1)( N 1)  

x [0]   x [1]  M   x [N  1]  

(2.7)

Equivalente a: X   W  x , donde W es denominada matriz de Fourier. Un hecho muy importante y evidente es que W es una matriz simétrica. Ahora veamos algunos casos prácticos en donde se usa la DFT: 2.3 EJEMPLOS DE LA DFT D. L. LL.

3

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

a.- Ejecutemos la DFT para el siguiente caso (N=4) por el método ordinario:

n x[n]

0 1

1 2

Calculando los valores de w Nkn  e n 0 k

 j ( 24 ) kn

e0·0=1 e1·0=1 e2·0=1 e3·0=1

0 1 2 3

2 3

3 4

 (  j )kn :

1

2

3

e0·1=1 -j -1 j

e0·2=1 -1 1 -1

e0·3=1 j -1 -j

Entonces de la formula (2.7): 1 1 1 1   1  j 1 j       1 1 1 1      1 j 1  j  

1    2   3    4  

X (0)   10     X (1)   2  2 j   X (2)   2       X (3)    2  2 j 

(2.8.1)

b.- Veamos ahora el caso para n=8: n x[n]

0 1

1 2

2 3

3 4

4 5

5 6

6 7

7 8

Procediendo como en el caso anterior encontramos ahora que:  1 

 1  1 

1 2 2

1

j j

2 2

 1  22  j 22 W  1  1  1  2j 2 2 2  j  1  2 2  1 2 j 2

1

j  1

2 2

j j

1

1

1  22  j 1 j

2 2

1

2 2

j 1

2 2

j 1

2 2

1 1

2 2

j 1

2 2

j 1

2 2

j j

2 2

1 1

2 2

j j

2 2

j



2 2

j

1 

2 2

2 2

j

2 2



1

     j  22  j 22   1 1  2 2  j  2 j 2  1 j  2 2  j j 2  2  j 1

2 2

j j

2 2

(2.8.2)

Entonces ejecutando W x  X , obtenemos: k X(k)

D. L. LL.

0 36

1 -4 -j9.65

2 -4 -j4

3 -4 -j1.65

4

4 -4

5 -4 +j1.65

6 -4 +j4

7 -4 +j9.65

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

(*) OBSERVACIÓN: Veamos que en la ec. (2.8.1) pudimos haber realizado la siguiente factorización:  j 2 nk Observemos que: w 4 nk  e 4  (  j )nk 3 nk Entonces: X (k )   n 0 x [n ] w 4

X (k )  x [0]  x [1](  j )k  x [2](  j )2k  x [3](  j )3 k  x [0]  x [1](  j )k  x [2]( 1)k  x [3]( j )k Reordenando: X ( k )  ( x[0]  x[2]( 1)k )  ( x[1]  x[3]( 1)k )(  j )k (*.1) k k  ( x[2·0]  x [2·1]( 1) )  ( x[2·0  1]  x[2·1  1]( 1) )(  j )k Y sea ahora: x par [r ]  x [2r ] , xipm [r ]  x[2r  1] ; r  0,1 Desarrollando:

Y además como el valor de (-1)k solo depende de si k es par o impar, X par (r )  ( x par [0]  x par [1]( 1)r ) , podemos hacer que: y X ipm (r )  ( xipm [0]  xipm [1]( 1)r ) . Entonces para visualizar esto mejor desarrollemos (*.1) para este caso: X (0)  ( x[0]  x[2](1) )  ( x[1]  x[3](1) )(1) X (1)  ( x[0]  x[2]( 1))  ( x[1]  x[3]( 1) )(  j ) X (2)  ( x[0]  x[2](1) )  ( x[1]  x[3](1) )( 1) X (3)  ( x[0]  x[2]( 1) )  ( x[1]  x[3]( 1))( j ) En donde x[0]=1, x[1]=2, x[2]=3, x[3]=4, X par (0)  4 ; X par (1)  2 y X ipm (0)  6 ; X ipm ( 2) , entonces:

(*.2)

entonces

X (0)  X par (0)  X ipm (0)(1)  10 X (1)  X par (1)  X ipm (1)(  j )  2  2 j X (2)  X par (0)  X ipm (0)( 1)  2

(*.3)

X (3)  X par (1)  X ipm (1)(1)  2  2 j Que es el mismo resultado que obtuvimos anteriormente, pero ahora se necesitaron efectuar menos multiplicaciones. La ec. (*.3) nos invita a hacer el siguiente diagrama de desarrollo: x[0]

X par(0)

x[2]

X par(1)

x[1]

X imp(0)

x[3]

X imp(1)

X(0) X(1) X(2) X(3) FIGURA 2

D. L. LL.

5

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

En la ecuación (2.7) y de los ejemplos a y b notamos que el número de multiplicaciones complejas a ejecutar es N2 (sin considerar el hecho que w N0  1 ). El método matricial que hemos visto en la práctica es ejecutado por un computador; sin embargo cuando N es muy grande como en señales de video y audio digitales N  106 y se debe realizar 1012 multiplicaciones aproximadamente, entonces los cálculos resultaran muy tediosos, ocuparían mucha memoria y además tomaran mucho tiempo. Esto último fue la motivación para desarrollar un método más directo para calcular la DFT, el algoritmo de la transformada rápida de Fourier FFT, el cual acabamos de introducir implícitamente en la observación anterior. 3. DEDUCCIÓN DEL ALGORITMO FFT DE COOLEY – TUKEY: Hay Partamos de la DFT para una señal dada polinomialmente como: N 1

X ( k )   x [ n ] w N k ·n

(3.1)

n 0

Ahora asumiendo que el número de datos N es par, descomponemos la sumatoria en sus términos pares e impares: X (k ) 

N / 2 1

 n 0



N / 2 1

 n 0

x[2n ] w N k ·2 n 

N / 2 1

 n 0

x [2n ] w N k ·2 n  w N k

x[2n  1] w N k ·(2n 1)

N / 2 1

 n 0

x [2n  1] w N k ·2 n

Sea ahora: x [2n ]  f [n ] y x [2n  1]  g [n ] , donde el nuevo notemos que podemos hacer que definamos a: F (k ) 

N / 2 1

 n 0

w N k ·2 n  e G( k ) 

f [n ] w Nk ·/n2

 j 2N k ·2 n

e

N / 2 1

 g [n ] w n 0

n  [0, N / 2  1]  j N2 / 2 k ·n

 w N / 2kn , y

k ·n N /2

(3.2)

Además veamos que F(k) y G(k) son también periódicas: F (k  N / 2) 

N / 2 1

 n 0

f [n ] w N( k/2N / 2)·n 

N / 2 1

 f [n ] w n 0

k ·n N /2

e

 j N2 / 2 ( N / 2)·n

 F (k )

Análogamente para G(k); con N/2 como periodo mínimo. Entonces nuestro problema de calcular una DFT para N datos se redujo ahora a calcular 2 DFT para N/2 datos cada una. Nuevamente asumamos que N/2 es par y ahora, para F(k): F (k ) 

N / 2 1

 f [n ] w n 0



N / 2 1

 f [n ] w n 0

k ·n N /2



k ·n N/2



N / 4 1

 f [2n] w n 0

N / 4 1

 f [n ] w n 0

f

k ·2 n N /2

k ·2 n N /2

 w Nk / 2



N / 4 1

 f [2n  1] w n 0

N / 4 1

 g [n ] w n 0

f

k ·2 n N/2

k ·(2 n 1) N /2

n  [0, N / 4  1]

Donde ff , gf son lo mismo para f[n] que para x[n]. De igual forma para g[n]: D. L. LL.

6

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

G( k ) 

N / 4 1

 n 0



g [2n ] w Nk ·2/ 2n 

N / 4 1

 f [n ] w n 0

g

k ·2 n N/2

N / 4 1

 g [2n  1] w n 0

 w Nk / 2

N / 4 1

 n 0

k ·(2 n 1) N/2

gf [n ] w Nk ·2/ 2n n  [0, N / 4  1]

Es decir que ahora sobre f[n] y g[n] se realizan 4 DFT de longitud N/4. Entonces podríamos hacer múltiples divisiones del intervalo [0,N-1] mientras se pueda dividir N entre 2. Ahora estamos listos para generalizar el método, entonces: Sea x un vector de datos, de longitud N =2m. Entonces sobre el intervalo [0,N-1] se pueden realizar m particiones como se mostró anteriormente hasta llegar a una DFT de longitud 2 ,esta es la unidad básica del FFT conocida como mariposa (o butterfly en ingles) en donde solo se necesitara una multiplicación y 2 sumas complejas: como se muestra en la figura:

Figura 3: Los elementos computacionales básicos de la transformada rápida de Fourier es la mariposa. Toma dos números complejos, representados por a y b, y forma las cantidades mostradas. Cada mariposa requiere una multiplicación compleja y dos sumas complejas.

3.1 EJEMPLO DEL ALGORITMO FFT Para especificar la idea realicemos nuevamente el ejemplo b, para N=23 por el algoritmo FFT: X (k )   7n 0 x [n ] w 8 k ·n Desarrollando: (3.1.1)  x[0]w 8 0 k  x[1]w 8 k  x[2]w 8 2k  x[3]w 83 k  x[4]w 8 4 k  x[5]w 85 k  x [6]w 8 6 k  x[7]w 87 k Donde se cumple para w:

w 8 2 n ·k  e

 j 28 2 n ·k

e

 j 24 n ·k

 j 2 (2 n 1)·k

 w 4 n ·k

 j 2  n ·k

 j 2 k

w 8(2n 1)·k  e 8  e 4 e 8  w 4 n ·k w 8 k Agrupando términos pares con impares: X (k )  ( x [0]w 40 k  x [2]w 4 k  x[4]w 4 2k  x [6]w 43 k ) ( x [1]w 40 k  x[3]w 4 k  x [5]w 4 2k  x[7]w 43 k )w 8 k Tomamos: x [2r ]  f [r ] y x[2r  1]  g [r ] , r  0,1,2,3 ,luego: X ( k )  (f [0]w 40 k  f [1]w 4 k  f [2]w 4 2k  f [3]w 43 k ) (g [0]w 40 k  g [1]w 4 k  g [2]w 4 2k  g [3]w 43 k )w 8 k (3.1.2) Pero dentro de cada paréntesis de (3.1.2) podemos realizar una nueva factorización, sabiendo que: D. L. LL.

7

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

w 4 2 n ·k  e

 j 24 2 n ·k

w 4(2n 1)·k  e

e

 j 22 n ·k

 j 24 (2 n 1)·k



e

 w 2 n ·k

 j 22 n ·k

e

 j 24 k

 w 2 n ·k w 4 k

X ( k )  (f [0]  f [2]w 4 2k )  (f [1]  f [3]w 4 2k )w 4 k

Entonces:







 ( g [0]  g [2]w 4 )  ( g [1]  g [3]w 4 2k )w 4 k w 8 k 2k

Nuevamente: f [2s ]  ff [s ] y f [2s  1]  fg [s ] , s  0,1 , luego:



X (k )  (ff [0]  ff [1]w 2k )  (fg [0]  fg [1]w 2k )w 4 k







 ( gf [0]  gf [1]w 2k )  (g g [0]  g g [1]w 2k )w 4 k w 8 k Remplazando los índices iniciales:



X ( k )  ( x[0]  x[4]e  j k )  ( x[2]  x[6]e  j k )e



 j 2 k

 ( x [1]  x[5]e  j k )  ( x[3]  x [7]e  j k )e =>



 j 2 k

X (k )  ( x [0]  x [4]( 1)k )  ( x [2]  x [6]( 1)k )(  j )k



 

e

(***)

 j 4 k



 ( x[1]  x[5]( 1)k )  ( x[3]  x[7]( 1)k )(  j )k e

 j 4 k

(3.1.3)

Esta es la forma general de se obtiene k-ésimo termino para N=8, además vemos que se deberán ejecutar 4 DFT de longitud 2, y los resultados que se obtengan se usaran para ejecutar 2 DFT de longitud 4, para lo cual se realizo 3 particiones. Para interpretar lo que indica la ec. (3.1.3) veamos la figura 4, donde cada flecha en diagonal representa una suma y las acompañan sus factores multiplicativos:

FIGURA 4 El número total de cálculos que se realizara serán N=8 sumas para cada etapa y log2N=3 etapas, haciendo el número de procesos básicos de (8)(3)=N log2N. En general se cumple que para la FFT el número de cálculos es: N log2N. D. L. LL.

8

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

Comparando con la DFT de N2 cálculos. Para cuantificar la diferencia veamos la siguiente tabla para distintos valores de N: N N2 Nlog2N

2

4

8

16

32

64

128

256

512

1024

4 2

16 8

64 24

256 64

1024 160

4096 384

16384 896

65536 2048

262144 4608

1048576 10240

El número de cálculos es directamente proporcional al tiempo de solución:

FIGURA 5: Esta figura muestra que tan lento crece el tiempo de solución de un proceso de Nlog2N.

Esta diferencia en la rapidez de cálculos de la FFT + computación digital fue completamente responsable de la "explosión" del Procesamiento Digital de Señales DSP en los años 60's. Para terminar hay que mencionar que el algoritmo FFT se encuentra implementado en muchos programas de computación. Veamos las instrucciones que se usan en el MATLAB para el ejecutar el ejemplo a y b: a.-Para n=22:,x=(1,2,3,4): >> x=1:1:4 x = 1 2 3 >> y=fft(x)' y = 10.0000 -2.0000 - 2.0000i -2.0000 -2.0000 + 2.0000i

4

b.-Para n=23,x=(1,2,3,4,5,6,7,8) >> x=1:1:8

D. L. LL.

9

FIEE-UNI

MATEMATICAS V

TRANSFORMADA RAPIDA DE FOURIER

x = 1

2

3

4

5

6

7

8

>> y=fft(x)' y = 36.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000

- 9.6569i - 4.0000i - 1.6569i + 1.6569i + 4.0000i + 9.6569i

(*) A manera de extensión dejamos adjuntado un artículo donde se muestra la deducción del FFT de forma matricial en los anexos

4. REFERENCIAS BIBLIOGRAFICAS [1] .- Oppenheim, A. V. ; Willsky, A. S.; Nawab, S.H.: SEÑALES Y SISTEMAS: Ed. Prentice Hall: México:1998. Pág.:211 a 213-358 a 361-417 a 420. [2].-Rojas, V. D.: TRANSFORMADA Z: FIEE-UNI: Lima-Perú. 2001 Pág.: 93 a 105. Referencias en Internet: Visitar: • Cooley-Tukey FFT algorithm - Wikipedia, the free encyclopedia.htm • Mathworld_wolfram_com-FastFourierTransform.htm • Derivando la Transformada Rápida de Fourier.mht • Ecuación de Matriz para la DTFS.mht

D. L. LL.

10

FIEE-UNI

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF