44
FFT : Fast Fourier Transform

FFT : Fast Fourier Transform€¦ · Historia Series de Fourier son desarrolladas en 1807 por Jean-Baptiste Joseph Fourier. Carl Friedrich Gauss desarrolla en 1805 la transformada

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

FFT : Fast Fourier Transform

2

Objetivo

Explicar las principales características de la Transformada Rápida de Fourier « FFT: Fast Fourier Transform » así como mencionar los principales aspectos de su implementación.

Además se mencionarán algunos de los recursos disponibles para una optima implementación en algunos dispositivos específicos.

Al final de la unidad el alumno deberá estar en la capacidad de implementar un algoritmo básico de la Transformada Rápida de Fourier «FFT» .

Historia

● Series de Fourier son desarrolladas en 1807 por Jean-Baptiste Joseph Fourier.

● Carl Friedrich Gauss desarrolla en 1805 la transformada rápida como un método para calcular series trigonométricas de frecuencia armónica para calcular la trayectoria de los planetas. Este método resultaría ser a la postre la transformada rápida de Fourier.

Transformada Rápida de Fourier «FFT»

Historia

● Se van mejorando los métodos de calculo de las series de Fourier.

● En 1958 Good I. J desarrolla un algoritmo más eficiente «Prime-factor FFT algorithm»

● En 1965 Cooley y Tukey redescubren el algoritmo de Gauss de la transformada rápida y lo aplican para series de con N a la potencia de un número primo (e.g. N², N³)

Transformada Rápida de Fourier «FFT»

Historia

● Winograd combina todos los métodos y produce un algoritmo recursivo o anidado de la FFT el cual resultó ser el algoritmo más eficiente posible.

Transformada Rápida de Fourier «FFT»

La matriz de la DFT● De la definición :

● Potencias de N nos dan el residuo de N (modulo N) ya que WN = 1

● DFT de NxN da la matriz :

Transformada Rápida de Fourier «FFT»

W = [1 1 1 1 … 11 W 1 W 2 W 3 … W (N−1 )

1 W 2 W 4 W 6 … W 2 (N−1 )

1 W N−1 W 2 (N−1 ) W 3(N −1) … W (N−1 )2 ]

W N = e− j

2 π

N

Conjugado de cada vector en cada renglón

Matriz de la DFT con N=2

Transformada Rápida de Fourier «FFT»

W = [1 11 −1]

e− j 2π

2 =−1

Matriz de la DFT con N=3

Transformada Rápida de Fourier «FFT»

W = [1 1 11 W W 2

1 W 2 W 4]= [1 1 11 W W 2

1 W2 W ]W = [

1 1 1

1 −1− j √32

−1+ j√32

1−1+ j√3

2−1− j √3

2] Módulo

de 3

Matriz de la DFT con N=3

Transformada Rápida de Fourier «FFT»

W = [1 1 11 W W 2

1 W 2 W 4]= [1 1 11 W W 2

1 W2 W ]W = [

1 1 1

1 −1− j √32

−1+ j√32

1−1+ j√3

2−1− j √3

2] e

− j 2π3

e− j 4π

3

Matriz de la DFT con N=4

Transformada Rápida de Fourier «FFT»

W = [1 1 1 11 W W 2 W 3

1 W 2 W 4 W 6

1 W 3 W 6 W 9 ]= [1 1 1 11 W W 2 W3

1 W 2 1 W 2

1 W 3 W 2 W]

W = [ 1 1 1 1 1 -j -1 j 1 -1 1 -1 1 j -1 -j

]e− j

2 π4 = e

− j π2 = − j

e− j

4 π4 =−1

Matriz de la DFT con N=4

Transformada Rápida de Fourier «FFT»

W = [ 1 1 1 1 1 -j -1 j 1 -1 1 -1 1 j -1 -j

]W 4 x [n ] → Sólo sumas y restas

Matriz de la DFT con N=5

Transformada Rápida de Fourier «FFT»

W = [1 1 1 1 11 W W 2 W 3 W 4

1 W 2 W 4 W 6 W 8

1 W3

W6

W9

W12

1 W4

W8

W12

W16]= [

1 1 1 1 11 W W 2 W 3 W 4

1 W 2 W 4 W W 3

1 W3

W W4

W2

1 W4

W3

W2

W]

Matriz de la DFT con N=6

Transformada Rápida de Fourier «FFT»

W = [1 1 1 1 1 11 W W 2 W 3 W 4 W 5

1 W 2 W 4 W 6 W 8 W10

1 W 3 W 6 W 9 W 12 W15

1 W 4 W 8 W 12 W 16 W 20

1 W 5 W 10 W 15 W 20 W 25]= [

1 1 1 1 1 11 W W 2 W 3 W 4 W5

1 W 2 W 4 1 W 2 W 4

1 W 3 1 W 3 1 W 3

1 W 4 W 2 1 W 4 W 2

1 W 5 W 4 W 3 W 2 W]

Estrategia: divide y vencerás

Transformada Rápida de Fourier «FFT»

Problema simple Problema simple Problema simple Problema simple

Soluciónintermedia

Solución

DivisiónDivisión

Sub-problema

División DivisiónDivisión División

Sub-problema

ConjuntarConjuntarConjuntarConjuntarConjuntarConjuntar

ConjuntarConjuntar

Soluciónintermedia

Problema

Estrategia: divide y vencerás

Transformada Rápida de Fourier «FFT»

Problema simple Problema simple Problema simple Problema simple

Soluciónintermedia

Solución

DivisiónDivisión

Sub-problema

División DivisiónDivisión División

Sub-problema

ConjuntarConjuntarConjuntarConjuntarConjuntarConjuntar

ConjuntarConjuntar

Soluciónintermedia

Problema x(n)

X(k)

W

Estrategia: divide y vencerás (1er paso)

● Propuesta: Tomar el problema de tamaño N y subdividirlo en pequeños problemas de tamaño N/2 cuya complejidad sea N²/4.

● Hay una complejidad adicional N relacionada con la recuperación de la solución final.

● La complejidad entonces será de N²/2 + N

Transformada Rápida de Fourier «FFT»

X = W N x complejidad : O(N²)

Estrategia: divide y vencerás (1er paso)

Gráficamente

● Dividir la entrada de la DFT en 2 con señales de longitud N/2

● Calcular las 2 DFT de tamaño sea N/2.

● Conjutar los 2 resultados

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás (1er paso)

Transformada Rápida de Fourier «FFT»

N²/4

N²/4

N

N=8   64→

N=8 16+16+8  40→

Estrategia: divide y vencerás

● Propuesta: Re-usar el procedimiento una y otra vez, e.g. Cortar los problemas N/2 en cuatro problemas de tamaño N/4.

● Hay una complejidad adicional N relacionada con la recuperación de la solución en cada paso.

● Lo anterior se puede hacer log2 N-1 = k-1

veces (hasta tener DFT's de tamaño 2)

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás

● Cada vez se tiene una complejidad de orden N para hacer la conjunción.

● La solución divide y conquistarás tendrá una complejidad del orden de N log

2 N .

● Para N ≥4. esta solución es mucho mejor que una complejidad de N² .

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás

Transformada Rápida de Fourier «FFT»

2(N/2) 4(N/4) 8(N/8) O(N) O(N) O(N)

3N+8DFT N/8

Estrategia: divide y vencerás

● Dividir la señal de entrada en índices pares y nones

● Dividir la salida en la primera y segunda mitad

Transformada Rápida de Fourier «FFT»

X [k ] = ∑n=0

N−1

x [n] e− j

2 π

Nnk

, k=0,1, ... ,N−1

x [n ] , n=0,1, ... , N−1x [2n ]

n=0,1, ... , N2

−1x [2n+1 ]

X [k ] , k=0,1, ... , N−1X [k ] k=0,1, ... , N

2−1

X [k+N / 2]

Estrategia: divide y vencerás

Primera mitad

Transformada Rápida de Fourier «FFT»

X [k ] = ∑n=0

N /2−1

x [2n ]W 2nk+ ∑

n=0

N /2−1

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

W = e− j

N

X [k ] = ∑n=0

N /2−1

x [2n ]W 2nk+ ∑

n=0

N /2−1

x [2n+1]W (2nk+k)

X [k ] = ∑n=0

N /2−1

x [2n ]W N /2nk

+W k ∑n=0

N /2−1

x [2n+1]W N /2nk

I)

Estrategia: divide y vencerás

Primera mitad

Transformada Rápida de Fourier «FFT»

X [k ] = ∑n=0

N /2−1

x [2n ]W N /2nk

+W k ∑n=0

N /2−1

x [2n+1]W N /2nk

X [k ] = X k+W k Xk , k=0,1, ... , N2

−1“'

DFT Par DFT Impar

I) W = e− j

N

Estrategia: divide y vencerás

Considerando de la 2da mitad:

Transformada Rápida de Fourier «FFT»

X [k +N2

] = ∑n=0

N / 2−1

x [ 2n]W N / 2

n ( k + N2

)

+W( k + N

2)

∑n=0

N /2−1

x [2n+1]WN /2

n (k+ N2

)

X [k ] = X k+W k Xk , k=0,1, ... , N2

−1“'

W = e− j

N → W N /2= e

− j2 π

N(N2

)

=−1

X [ k+ N2

] = ∑n=0

N /2−1

x [2n ]W N /2nk

−W k ∑n=0

N /2−1

x [2n +1 ]W N /2nk

II)

Estrategia: divide y vencerás

Considerando de la 2da mitad:

● La segunda mitad es similar a la primera pero con el signo cambiado

Transformada Rápida de Fourier «FFT»

X [k+N2

] = X k−W k Xk , k=0,1, ... , N2

−1“'

X [ k+ N2

] = ∑n=0

N /2−1

x [2n ]W N /2nk

−W k ∑n=0

N /2−1

x [2n +1 ]W N /2nk

II)

Estrategia: divide y vencerás

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás

Complejidad del algoritmo

● Separación de la señal de entrada en 2 mitades de tamaño N/2 : Costo = casi nulo

● Cálculo de 2 DFT's de N/2 : Costo = 2 x (N/2)² = N²/2

● Combinación de los 2 resultados: Costo = multiplicación por N/2 números complejos Wk

● Costo total : N²/2 + N/2 , más o menos la mitad del costo del problema inicial.

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás

¿Que pasa si repetimos el proceso anterior?

● Se continua dividiendo hasta llegar a la DFT-2 ya que su resultado es trivial (sumas y diferencias)

● Requiere de log2 N-1 pasos

● Cada paso requiere de la conjunción de resultados : N/2 multiplicaciones y N adiciones.

● Costo total : N/2 (log2 N-1) multiplicaciones y N

log2 N sumas (ahorros del orden de log

2 N/N).

Transformada Rápida de Fourier «FFT»

Estrategia: divide y vencerás

Una DFT de tamaño N requiere del orden de N log

2 N operaciones

!!!!

Transformada Rápida de Fourier «FFT»

Factorización de matrices (DFT, N = 4) ● Separar la entrada en pares e impares

● Calcular 2 DFT de tamaño 2 con resultados X'[k] y X”[k]

● Calcular la suma y diferencia de X'[k] y Wk X”[k]

Transformada Rápida de Fourier «FFT»

W 4 =[ 1 1 1 1 1 -j -1 j 1 -1 1 -1 1 j -1 -j

]=[ 1 0 1 0 0 1 0 -j 1 0 -1 0 0 1 0 j

][ 1 1 0 0 1 -1 0 0 0 0 1 1 0 0 1 -1

][ 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1

]

Factorización de matrices (DFT, N = 4)

Transformada Rápida de Fourier «FFT»

W 4 =[ 1 1 1 1 1 -j -1 j 1 -1 1 -1 1 j -1 -j

]=[ 1 0 1 0 0 1 0 -j 1 0 -1 0 0 1 0 j

][ 1 1 0 0 1 -1 0 0 0 0 1 1 0 0 1 -1

][ 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1

]

Calcular la suma y diferencia

Separar la entrada en pares e imparesCalcular 2 DFT

de tamaño 2

Utiliza 8 sumas y ninguna multiplicación

Factorización de matrices (DFT, N = 8)

Transformada Rápida de Fourier «FFT»

W 8 = [ 1 1 1 1 ⋯ 1 1 W 1 W 2 W 3

⋯ W 7

1 W 2 W 4 W 6⋯ W 14

⋯ 1 W 7 W 14 W21

⋯ W 49]= ⋯

Factorización de matrices (DFT, N = 8)

Paso 1: Separar índices pares e impares

Transformada Rápida de Fourier «FFT»

D 8 = [ 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1

]D8 : Decimación de tamaño 8

Factorización de matrices (DFT, N = 8)

Paso 2: Cálculo de 2 DFT de tamaño N/2

Transformada Rápida de Fourier «FFT»

[W 4 04

04 W 4]= [

1 1 1 1 0 0 0 0 1 -j -1 j 0 0 0 0 1 -1 1 -1 0 0 0 0 1 j -1 -j 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 -j -1 j 0 0 0 0 1 -1 1 -1 0 0 0 0 1 j -1 -j

]2 DFT-4 requieren de 16 sumas

Factorización de matrices (DFT, N = 8)

Paso 3: Multiplicar la salida de la segunda 2 DFT por W k

Transformada Rápida de Fourier «FFT»

[ I 4 04

04 Λ4]= [

1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 W 0 0 0 0 0 0 0 0 W² 0 0 0 0 0 0 0 0 W³

]Λ4 : Matriz de

vectores propios

Factorización de matrices (DFT, N = 8)

Paso 3: Multiplicar la salida de la segunda 2 DFT por W k

Transformada Rápida de Fourier «FFT»

[ I 4 04

04 Λ4]= [

1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 W 0 0 0 0 0 0 0 0 W² 0 0 0 0 0 0 0 0 W³

]W 2 = -j

W / W 3 : *

Factorización de matrices (DFT, N = 8)

Paso 4: Recombinar X[k] y X[k+N/2] mediante sumas

Transformada Rápida de Fourier «FFT»

S8 = [I 4 I 4

I 4 − I 4] = [

1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 1 0 0 0 -1

]

Factorización de matrices (DFT, N = 8)

En total:

● Producto de 4 matrices

● Lo que requerirá 24 sumas y sólo 2 multiplicaciones

Transformada Rápida de Fourier «FFT»

W 8 = [I 4 I 4

I 4 − I 4]⋅[I 4 04

04 Λ4]⋅[W 4 04

04 W 4]⋅D 8

2 DFT-4Eigenvectores

Decimación

Factorización de matrices (DFT, N = 8)

Transformada Rápida de Fourier «FFT»

FFT N = 16

Transformada Rápida de Fourier «FFT»

Transformada Rápida de Fourier «FFT»

Alternativas de FFT

Decimation in Time Decimation in Frecuency

Conclusiones● El algoritmo Cooley-Tukey es el más popular especialmente para N=2N

● No es necesario hacer Zero-Padding

● Para otros casos (e.g. N = números primos) existen otros algoritmos diseñados ex-profeso para esos casos.

● Existen variedad de librerías disponibles (e.g. Fast Fourier Transform in the West, SPIRAL)

Transformada Rápida de Fourier «FFT»

www.fftw.org