Upload
others
View
15
Download
0
Embed Size (px)
Citation preview
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=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²
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
2π
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
2π
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
2π
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
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
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