Captulo 24 Transformada rpida de Fourier. Es considerado un algoritmo clsico, que permite obtener a partir de una serie de valores temporales las componentes espectrales en frecuencia, y viceversa con un costo O(n log n).
Como veremos es un caso particular del problema ms general de calcular polinomios.
Existen dos formas de clculo: una es evaluar un polinomio representado por sus coeficientes. La otra es representar el polinomio por una serie de puntos. 24.1. Representacin por n coeficientes. Sea un polinomio de n coeficientes:
Donde los coeficientes son los n valores de a j .
Si se evalan las potencias de x a travs de multiplicaciones se requieren (n-1) + (n-2) +..+1 multiplicaciones, originando un algoritmo de complejidad O(n 2 ).
La evaluacin de polinomios suele efectuarse empleando la regla de Horner:
Que es de complejidad O(n), ya que requiere (n-1) multiplicaciones. La siguiente rutina ilustra el procedimiento de clculo.
double Horner(int a[ ], int n, double x) { double A=a[n-1]; for( i=n-2; i>=0; i--) A=a[i] +x*A; return(A); }
Las operaciones de suma y resta de polinomios expresados por sus coeficientes son de complejidad O(n), ya que basta sumar o restar los coeficientes. Sin embargo el producto de polinomios es de complejidad O(n 2 ).
Si A y B son de n coeficientes, el producto C(x) = A(x)B(x) tendr (2n-1) coeficientes: 1 0 ( ) n j j j A x a x 0 1 2 2 1 ( ) ( ( .... ( ( ))....)) i i i i n i n A x a x a x a x a x a 2 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
c 0 = a 0 b 0 c 1 = a 0 b 1 + a 1 b 0
c 2 = a 0 b 2 + a 1 b 1 + a 2 b 0
Operacin que se denomina convolucin de los coeficientes.
La evaluacin de los coeficientes de C es O(n), y debe repetirse n veces, lo cual implica O(n 2 ), para el costo de la multiplicacin de polinomios. 24.2. Representacin por n valores. Se tienen los valores o muestras: ( ) k k y A x con k = 0..n-1
y 0
x 0
y 1
x 1
y 2
x 2
y n-1
x n-1
x
Figura 24.1 Representacin por muestras. Si se conocen los puntos: (x k , y k ), se tienen n ecuaciones con n incgnitas (los coeficientes).
0 1 2 1 0 0 0 1 0 2 0 1 0 0 1 2 1 1 0 1 1 1 2 1 1 1 0 1 2 1 1 0 1 1 1 2 1 1 1 .... .... ..... .... n n n n n n n n n n n y a x a x a x a x y a x a x a x a x y a x a x a x a x
Pueden existir diferentes representaciones por puntos, ya que slo se requiere que los n puntos x k sean diferentes. Como se ver la eleccin adecuada de los n puntos permitir acelerar el clculo a O(n log n).
Esta representacin puede obtenerse a partir de la representacin por coeficientes con un costo O(n 2 ), ya que debe aplicarse n veces el algoritmo de Horner.
2 2 0 ( ) n j j j C x c x 0 j j k j k k c a b Transformada rpida de Fourier 3 Profesor Leopoldo Silva Bijit 20-01-2010 Tambin es posible pasar de la representacin por puntos a la de coeficientes, para esto es preciso resolver el sistema de ecuaciones planteado antes. Este problema se conoce como interpolacin.
2 1 0 0 0 0 0 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 ... 1 ... 1 ... n n n n n n n n a y x x x a y x x x a y x x x
La matriz tiene inversa si el determinante no es cero. El determinante de la matriz anterior, que se denomina de Vandermonde, puede calcularse segn:
1 0 2 1 1 2 0 1 det ( ) ( )( )...( ) k j n n j k n x x x x x x x x
El costo de evaluar la matriz inversa es O(n 2 ) y adems se debe realizar n multiplicaciones del vector de los y k por los renglones de la matriz inversa, con lo cual resulta O(n 3 ).
Sin embargo los coeficientes pueden calcularse con costo O(n 2 ) empleando la frmula de interpolacin de polinomios de Lagrange:
1 2 1 0 2 1 0 1 2 0 1 1 0 1 0 2 0 1 1 0 1 2 1 1 1 0 1 1 1 2 ( )( )...( ) ( )( )...( ) ( )( )...( ) ( ) .... ( )( )...( ) ( )( )...( ) ( )( )...( ) n n n n n n n n n n x x x x x x x x x x x x x x x x x x A x y y y x x x x x x x x x x x x x x x x x x
Que es un polinomio de n coeficientes que pasa por los n puntos (x k , y k ). O bien tal que A(x k ) = y k para k=0..n-1, lo cual puede comprobarse en la frmula anterior.
La ventaja de representacin por puntos es que el clculo del producto (tambin la suma y resta) de polinomios es ahora O(n). Pero en caso de multiplicacin, los polinomios deben representarse con 2n puntos, ya que C, debe ser de 2n puntos.
Si se tienen los polinomios A y B, puede determinarse su producto C, segn: 0 0 1 1 2 1 2 1 0 0 1 1 2 1 2 1 0 0 0 1 1 1 2 1 2 1 2 1 ( ) ( , ),...( , ),...( , ) ( ) ( , ),...( , ),...( , ) ( ) ( , ),...( , ),...( , ) A n An n A n B n Bn n B n A B n An Bn n A n B n A x x y x y x y B x x y x y x y C x x y y x y y x y y
24.3. Transformada discreta de Fourier. Se tienen las transformadas de Fourier, directa e inversa, en el dominio de f y t, para la seal s(t) y su densidad espectral S(f), definidas segn: 4 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 2 1 2 ( ( )) ( ) ( ) ( ( )) ( ) ( ) j ft j ft s t S f s t e dt S f s t S f e df
Y las transformadas discretas de Fourier: 1 2 / 0 1 2 / 0 ( ) ( ) 1 ( ) ( ) n j ik n i n j ik n i S k s i e s k S i e n
Con k=0..n-1
Si se define: w n =e -j2 /n como la n-ava raz compleja de la unidad, se tiene que:
e -j2 k/n = (w n ) k
El valor principal suele definirse segn: e j2 /n , en el primer cuadrante.
Reemplazando S(k) por S k , s(k) por s k , y (w n ) k por x se tienen dos polinomios.
Los polinomios se evalan en las races complejas de la unidad. Si se reemplazan las potencias de x se obtiene la relacin que permite obtener el espectro a partir de las muestras temporales:
Las figuras siguientes muestran los polinomios representados por puntos. 1 0 1 0 1 n i k i i n i k i i n S s x s S x 2 1 0 0 0 0 0 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 ... 1 ... 1 ... n n n n n n n n s S x x x s S x x x s S x x x 0*1 0*2 0*( 1) 0 0 1*1 1*2 1*( 1) 1 1 ( 1)*1 ( 1)*2 ( 1)*( 1) 1 1 1 ... 1 ... 1 ... n n n n n n n n n n n n n n n n n s S w w w s S w w w s S w w w Transformada rpida de Fourier 5 Profesor Leopoldo Silva Bijit 20-01-2010
Figura 24.2 Representacin de polinomios por puntos. El elemento (r, c) de la matriz anterior es (w n ) r*c con r y c variando entre 0 y (n-1). Puede comprobarse que el elemento (r, c) de la matriz inversa es: (1/n)*(w n ) -r*c
Que permite obtener las muestras temporales a partir del espectro. Notamos que el problema es similar al anterior, pero cambiando el signo de las n-avas potencias complejas de la unidad, y un escalamiento dividiendo por n.
Conocidas las muestras temporales, se requieren n multiplicaciones para obtener una muestra del espectro, y como se requieren n muestras en frecuencia, se obtiene un algoritmo de costo cuadrtico. Adems deben calcularse las potencias complejas de las n-avas races de la unidad. 24.4. Desarrollo del algoritmo de transformada rpida de Fourier. El algoritmo FFT permite calcular la DFT en O( n log n). El polinomio S(x) puede separarse en dos, uno con las potencias pares de x; el otro, con las potencias impares:
s 0
t 0
s 1
t 1
s 2
t 2
s n-1
t n-1
t T=intervalo de muestreo
S 0
f 0
S 1
f 1
S 2
f 2
S n-1
f n-1
f f S =1/n T=separacin en frecuencia 0*1 0*2 0*( 1) 0 0 1*1 1*2 1*( 1) 1 1 ( 1)*1 ( 1)*2 ( 1)*( 1) 1 1 1 ... 1 ... 1 1 ... n n n n n n n n n n n n n n n n n S s w w w S s w w w n S s w w w 1 0 ( ) n i k i i S S x s x ( / 2) 1 0 2 2 ( / 2) 1 1 3 1 2 2 ( ) ... ( ) ... ( ) ( ) ( ) n p n n i n k p i S x s s x s x S x s s x s x S S x S x xS x 6 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 Los polinomios son de n/2 puntos cada uno. Esto considerando n par y ms especficamente una potencia de dos. El clculo de los S k para n puntos puede descomponerse en dos clculos de polinomios pero con la mitad de puntos cada uno. A su vez, cada uno de esos polinomios, puede ser calculado en trminos de dos polinomios con la cuarta parte de los puntos, y as sucesivamente.
Ms adelante veremos cmo los S k pueden calcularse recursivamente, para obtener esa relacin es preciso conocer algunas propiedades de las races complejas de la unidad. 24.5. n-avas races complejas de la unidad. Existen n races n-avas complejas de la unidad: w n 0 , w n 1 , w n 2 , w n n-1
Con : (w n ) k = e -j2 k/n
Para n = 2, se tienen w 2 0 =e -j 0 = cos(0) + j sen(0) = +1 w 2 1 =e -j 1 = cos(- ) + j sen(- ) = -1
Figura 24.3. Races complejas cuadradas de la unidad
Para n = 4, se tienen: (w 4 ) = e -j /2 = -j w 4 0 = +1 w 4 1 = -j w 4 2 = -1 w 4 3 = +j Debe notarse que w 4 4 = w 4 0
Figura 24.4. Races complejas cuartas de la unidad
Algunas propiedades:
Para n>=0, k>=0 y d>0:
w 4 0
w 4 1
w 4 2
w 4 3
w 2 0 w 2 1
Transformada rpida de Fourier 7 Profesor Leopoldo Silva Bijit 20-01-2010 2 / 2 / / 2 2 / / 2 2 / 2 2 2 2 2 2 / 2 2 / 1/ 2 2 1 0 ( ) ( ) ( ) 1 ( ) ( ) ( ) ( ) 1 ( ) 1 (1) 1 ( ) 0 1 1 1 dk j dn dk j n k k dn n n j n n j n k n k n k n k n n n n n j n j n n n k n n k k n k i n n n k k k i n n n w e e w w e e w w w w w w w e e w w w w w w w
La ltima relacin es una serie geomtrica, se requiere n>=1, y que k sea positivo no divisible por n, para que el denominador no sea cero.
Si se efecta el producto de la matriz de Vandermonde por su inversa, el elemento (r, c) del producto, puede expresarse segn:
1 1 ( ) 0 0 ( / ) ( / ) n n kr kc k c r n n n k k n n w w w la cual toma valor 1 para r=c, y cero en caso contrario. Lo cual origina una matriz unitaria, comprobndose que la expresin para la inversa es correcta. Se requiere que (c-r) no sea divisible por n, esto se cumple ya que fuera de la diagonal:
-(n-1) < (r-c) < (n-1). 24.6. Series discretas para dos y cuatro puntos. Se tiene para n = 2: S 0 = s 0 + x 0 s 1
S 1 = s 0 + x 1 s 1
Evaluando en las races cuadradas complejas de la unidad: S 0 = s 0 + w 2 0 s 1 = s 0 + (+1)s 1
S 1 = s 0 + w 2 1 s 1 = s 0 + (- 1)s 1
Resultando: S 0 = s 0 + s 1
S 1 = s 0 - s 1
Para n = 4: Evaluando en las races cuartas complejas de la unidad, notando que todos los valores no son diferentes, debido a las propiedades de las races cuartas complejas de la unidad, se obtienen:
0 0 0 0 0 4 0 4 1 4 2 4 3 0 1 2 3 1 4 0 4 1 4 2 4 3 0 2 4 6 2 4 0 4 1 4 2 4 3 0 3 6 9 3 4 0 4 1 4 2 4 3 S w s w s w s w s S w s w s w s w s S w s w s w s w s S w s w s w s w s 8 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 Reemplazando por los valores numricos:
Finalmente, se advierte que para cuatro puntos, estn incorporados los polinomios asociados a dos puntos. Donde se ha definido: (S 0p , S 1p ) y (S 0i , S 1i ) como series de dos puntos.
0 0 0 2 1 3 0 4 0 0 2 0 2 1 3 0 4 0 1 1 0 2 1 3 1 4 1 1 3 0 2 1 3 1 4 1 ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) p i p i p i p i S s s s s S w S S s s s s S w S S s s j s s S w S S s s j s s S w S
24.7. Relaciones de recurrencia. De la descomposicin en dos polinomios y reemplazando los valores de evaluacin con las n- avas races complejas de la unidad, se desprenden dos relaciones de recurrencia para calcular los S k . Una para los valores: S 0 ,
S 1 , S 2 ,. , S n/2 -1 , y otra para: S n/2 ,
S n/2 +1 , S n/2 +2 ,. , S n-1
Empleando las propiedades de las races complejas, se obtienen:
Donde se han definido los valores de la parte par e impar como una evaluacin de un polinomio de n/2 puntos.
Finalmente se obtienen: 0 0 1 2 3 1 0 1 2 3 2 0 1 2 3 3 0 1 2 3 1 S s s s s S s js s js S s s s s S s js s js 2 2 2 2 2 / 2 2 / 2 ( ) ( ) ( ) ( ) ( ) ( ) k p i k k k k p n n i n k n k n k n k n p n n i n S S x xS x S S w w S w S S w w S w / 2 / 2 ( ) ( ) k kp p n k ki i n S S w S S w 2 2 / 2 / 2 2 / 2 2 2 2 / 2 / 2 / 2 ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) k k k k k k k k p n n i n p n n i n kp n ki k n k n k n k k k k k k k k n p n n i n p n n i n p n n i n kp n ki S S w w S w S w w S w S w S S S w w S w S w w S w S w w S w S w S Transformada rpida de Fourier 9 Profesor Leopoldo Silva Bijit 20-01-2010
Con k=0, 1, 2, (n/2)- 1
Asumiendo operaciones con nmeros complejos, los n valores se calculan de a pares, en trminos de los valores asociados a dos series de n/2 puntos cada una:
for (k=0; k<= (n/2)-1; k++) { S k = S kp + w n k S ki ; S k+n/2 = S kp - w n k S ki ; }
Es usual calcular una sola vez, la expresin comn dentro del for.
for (k=0; k<= (n/2)-1; k++) { t = w n k S ki ; S k = S kp + t ; S k+n/2 = S kp - t ; }
El costo de calcular una potencia puede extraerse, a travs de una multiplicacin dentro del lazo: w n = e -j2 /n ; w = 1; for (k=0; k<= (n/2)-1; k++) { t = w*S ki ; S k = S kp + t ; //Operacin denominada mariposa. Butterfly. S k+n/2 = S kp - t ; w * = w n ; }
La codificacin puede modificarse para tratar las variables complejas, por sus partes reales e imaginarias.
Para un polinomio descrito por 8 puntos temporales. El clculo puede visualizarse mediante la descomposicin en dos polinomios de 4 puntos, con los puntos pares en uno, y los impares en otro. Un polinomio de 4 puntos, se puede calcular mediante la composicin de dos polinomios de dos puntos, donde nuevamente se separan los ubicados en posiciones pares e impares. No es necesario descomponer polinomios de dos puntos, ya que su evaluacin es sencilla. El siguiente rbol ilustra la separacin entre partes pares e impares. / 2 k k kp n ki k k n kp n ki S S w S S S w S 10 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
Figura 24.5. Descomposicin en polinomios pares e impares. Si cada vez se suprime el bit menos significativo que representa al ndice en binario, se tendr que la divisin se efecta entre pares e impares. Por ejemplo el grupo (0, 2, 4, 6) se transforma al suprimir el bit menos significativo en (0, 1, 2, 3).
Esta visualizacin tambin posibilita un algoritmo iterativo en lugar de recursivo. En el nivel de las hojas se aplica la operacin mariposa a todos los grupos de a dos (pero en el orden que figuran en las hojas), luego se evalan polinomios de 4 puntos cada uno, considerando ahora las races cuartas complejas de la unidad, y as sucesivamente ascendiendo de nivel. 24.8. Reordenamiento de los puntos. Si se observa la siguiente tabla, donde se han colocado los valores de las muestras temporales en un arreglo, junto a sus ndices en binario y el arreglo modificado. Puede notarse que los ndices en binario del arreglo modificado son las imgenes especulares de los ndices originales. Puede tambin notarse que la ltima columna se puede visualizar como un contador binario inverso, es decir los dgitos que primero cambian son los ms significativos. En este caso slo es preciso intercambiar s 1 con s 4 , y s 3 con s 6 .
Arreglo original Contador binario Arreglo modificado Contador inverso s 0 000 s 0 000 s 1 001 s 4 100 s 2 010 s 2 010 s 3 011 s 6 110 s 4 100 s 1 001 s 5 101 s 5 101 s 6 110 s 3 011 s 7 111 s 7 111 Figura 24.6. Contador binario directo e inverso. Para 16 puntos, colocando los valores de los contadores binarios directo e inverso, en decimal, puede notarse que bastara generar las dos secuencias de valores siguientes:
s 0 s 1 s 2 s 3 s 4 s 5 s 6 s 7
s 0 s 2 s 4 s 6
s 1 s 3 s 5 s 7
s 2 s 6
s 0 s 4
s 1 s 5
s 3 s 7
Transformada rpida de Fourier 11 Profesor Leopoldo Silva Bijit 20-01-2010
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 j 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 ig x ig x ig x x x x ig Figura 24.7. Contador binario inverso con cuentas en decimal. Y slo intercambiar cuando j> i. Esto evita los cambios en los casos identificados en el tercer rengln con ig (por igualdad), y los cambios marcados con x (esto volvera a su lugar a los elementos del arreglo). Adems no es preciso revisar los casos con i= 0 e i=15. Si el nmero de muestras es una potencia de dos, se tiene que el primer valor de j, de la secuencia que debe generarse, ser: j=n/2 o la expresin equivalente: j=n>>1.
La siguiente funcin intercambia los elementos de un arreglo x, generando las secuencias de valores de i y j.
void bitreverse(int *x, int n) { int nmedios=n>>1, i, j, k, tx; //i contador binario for (i=1, j=nmedios; i<n-2; i++) { //printf("i=%d j=%d\n", i , j); if (i < j) { tx = x[i]; x[i] = x[j]; x[j] = tx; } //j contador binario inverso. Incrementa en uno la posicin ms significativa. //y desplaza a la derecha las reservas. for(k=nmedios; k <= j; k >>= 1) {j -= k;} j+=k; } }
Ejemplos del contador binario inverso, con operaciones en decimal: Si k y j tienen valor 8 ( 1000 en binario) se efecta la resta (queda j=0) y la condicin de reinicio deja k=4 (0100), lo cual termina la iteracin. Despus del for se setea en uno el bit que marca k, y deja j=4 (0100).
Se cambian todos los unos ms significativos por ceros, hasta encontrar el primer cero, el cual se setea a uno.
Si k=8 y j = 12 ( 1100 en binario) se efecta la resta (queda j=4) y la condicin de reinicio deja k=4 (0100), se vuelve a iterar, quedando j=0 y k=2. Lo cual termina la iteracin. Despus del for se setea en uno el bit que marca k, y deja j=4 (0010).
12 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 El siguiente ejemplo, busca el primer cero y lo cambia por uno, poniendo en cero el ms significativo. Si k=8 y j=10 (1010), la primera iteracin deja j=2 (0010) y k = 4 (0100), terminando la iteracin. El nuevo valor de j ser 6 (0110)
Otra alternativa de diseo es generando la imagen especular de i para formar j.
Se detectan los unos de i, y se los copia, mediante la variable m, en la posicin especular en j.
void contadorinverso(int *x, int n) { int nmedios=n>>1, i, j, m ,k ,tx;
for (i=1,j=nmedios; i<n-2; ) //el penltimo es par { printf("i=%d j=%d\n",i,j); if (i < j) { tx = x[i]; x[i] = x[j]; x[j] = tx; } for(i++, k=nmedios, m=1, j=0; k >=1; k >>= 1, m<<=1) { if(i&k) j|=m; } } } 24.9. Operacin mariposa. Para deducir el algoritmo iterativo, veremos algunos casos especficos. Para una serie de dos puntos, se muestra la serie inicial de puntos temporales en un arreglo. Luego de aplicar la operacin mariposa, y finalmente la reinterpretacin de los puntos en frecuencia.
n=2 for (k=0; k<= (n/2)-1; k++) { S k = S kp + w n k S ki ; S k+n/2 = S kp - w n k S ki ; }
S 0 = S 0p + w 2 0 S 0i ; S 1 = S 0p - w 2 0 S 0i ; Con w 2 0 = 1
La composicin de la serie de 4 puntos a partir de las series de dos puntos, se obtiene con:
s 0 s 1
s 0+ s 1 s 0 -s 1
S 0 S 1
Transformada rpida de Fourier 13 Profesor Leopoldo Silva Bijit 20-01-2010
n=4 for (k=0; k<= (n/2)-1; k++) { S k = S kp + w n k S ki ; S k+n/2 = S kp - w n k S ki ; }
0 0 0 4 0 0 2 1 3 0 2 0 4 0 0 2 1 3 1 1 1 4 1 0 2 1 3 1 3 1 4 1 0 2 1 3 ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) p i p i p i p i S S w S s s s s S S w S s s s s S S w S s s j s s S S w S s s j s s
Con: w 4 0 = 1, w 4 1 = - j = (w 2 1 ) 1/2 w 4 = 2 w
Para una serie de cuatro puntos temporales, se procede al reordenamiento. A stos se los trata como series de dos puntos. Se aplica la operacin mariposa, con n=2, a todos los pares:
Luego de la operacin en los pares: (0,1)(2,3)
Quedan las series en frecuencia de dos puntos
Se aplica ahora la operacin mariposa con n=4. A los pares (0,2) y (1,3). Lo cual genera los cuatro puntos en frecuencia.
Que puede leerse segn:
La composicin de la serie de 8 puntos a partir de las series de cuatro puntos, se obtiene con: n=8 for (k=0; k<= (n/2)-1; k++) { S k = S kp + w n k S ki ; S k+n/2 = S kp - w n k S ki ; }
Es decir:
S 0p +S 0i S 0p -S 0i S 1p -jS 1i S 1p +jS 1i
S 0 S 1 S 2 S 3
s 0 s 2 s 1 s 3
s 0+ s 2 s 0 -s 2 s 1 +s 3 s 1 -s 3
S 0p S 1p S 0i S 1i
14 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 0 0 0 8 0 0 4 0 8 0 1 1 1 8 1 1 5 1 8 1 2 2 2 8 2 2 6 2 8 2 3 3 3 8 3 3 7 3 8 3 p i p i p i p i p i p i p i p i S S w S S S w S S S w S S S w S S S w S S S w S S S w S S S w S
Con: w 8 0 =1, w 8 1 = e -j /4 = 1 (1 ) 2 j w 8 = 4 w
En el nivel 0: Se forman series de dos puntos, aplicando la operacin mariposa con n=2, a los pares: (0, 1), (0+2*1, 1+2*1), (0+2*2, 1+2*2), (0+2*3, 1+2*3)
En el nivel uno: Se forman series de 4 puntos. La composicin de dos series de 2 puntos se logra aplicando la operacin con n=4, a los pares (0,2) (1,3) y tambin a los pares (0+4, 2+4) (1+4, 3+4) logrando dos series de cuatro puntos.
En el nivel dos: La composicin de dos series de 4 puntos se logra aplicando la operacin con n=8. A los pares (0,4) (1,5) (2,6) (3, 7)
Dos series de 4 puntos
Serie de 8 puntos
Veamos ahora el caso general: Si n es el nmero de puntos. En el nivel 0, se tienen n/2 series de 2 puntos. En el nivel 1, se tienen n/4 series de 4 puntos. En el nivel 2, se tienen n/8 series de 8 puntos. En el nivel j, se tienen n/2 j+1 series de 2 j+1 puntos. En ltimo nivel, el m-1, la nica serie es de n= 2 m puntos.
El algoritmo iterativo debe generar las series asociadas al nivel, y los pares de puntos de cada serie y luego aplicarles la operacin mariposa a cada par.
Es decir, a travs de la variable j, se repite para cada grupo formado por nn puntos:
S 0p S 1p S 2p S 3p S 0i S 1i S 2i S 3i
S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
Transformada rpida de Fourier 15 Profesor Leopoldo Silva Bijit 20-01-2010 for(j=0; j<n; j+=nn) for (k=0; k<= (nn/2)-1; k++) { S k+j = S kp + w n k S ki ; S k+j+n/2 = S kp - w n k S ki ; }
Falta an una ltima iteracin para procesar cada uno de los niveles.
El siguiente segmento genera los pares a los que debe aplicrseles la operacin.
void mariposa(int m) { int n, k, j, nn, nivel; n = 1; for (k=0; k<m; k++) n *= 2; //n=2^m genera nmero de puntos
nn=1; for (nivel=0; nivel<m; nivel++) { nn=2*nn; //series de nn puntos. Con nn=2^(nivel+1) for(j=0; j<n; j=j+nn) //Para todos los n elementos en grupos de nn { for (k=0; k< nn/2; k++)//Se aplica mariposa a los pares (k+j, k+j+nn/2) { printf("(%d,%d)", k+j, k+j+nn/2); } putchar('\n'); } } }
Para m= 4, se tienen 16 puntos, el programa genera los pares: (0,1) 8 series de dos puntos (2,3) (4,5) (6,7) (8,9) (10,11) (12,13) (14,15) (0,2)(1,3) 4 series de 4 puntos (4,6)(5,7) (8,10)(9,11) (12,14)(13,15) (0,4)(1,5)(2,6)(3,7) 2 series de 8 puntos (8,12)(9,13)(10,14)(11,15) (0,8)(1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15) 1 serie de 16 puntos
La siguiente funcin resume las principales ideas. Slo falta definir el tratamiento de los nmeros complejos y de los arreglos.
16 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 void mariposa(double *S, int m) { int n, k, j, nn, nivel; double w, w n , u, t;
for (k=0, n=1; k<m; k++) n *= 2; //n=2^m genera n, el nmero de puntos a partir de m nn=1; w n = w 2 ; //Al inicio las series son de dos puntos for (nivel=0; nivel<m; nivel++) { nn=2*nn; //series de nn puntos. Con nn=2^(nivel+1) for(j=0; j<n; j=j+nn) //Para todos los n elementos en grupos de nn { w = 1; for (k=0; k< nn/2; k++) //Se aplica mariposa a los pares (k+j, k+j+nn/2) { t = w*S k+j+nn/2 ; //Con los valores de series de nn/2 puntos u = S k+j ; S k+j = u + t ; //Se calculan con la operacin mariposa, los S k+j+nn/2 = u - t ; //valores de las series de nn puntos. w * = w n ; } } w n = n w ; //Se duplica el nmero de puntos. } }
Al inicio, en el nivel cero, las series son de dos puntos; al subir de nivel debe calcularse la nueva raz compleja. Se ilustra, en el primer cuadrante la nueva raz, que tiene la mitad del ngulo.
w n
w 2n
n
n /2
Figura 24.8. Clculo de la raz cuadrada. Para calcular la raz compleja principal asociada a una serie de 2n puntos a partir de la raz compleja principal asociada a una serie de n puntos, pueden efectuarse las siguientes definiciones: Transformada rpida de Fourier 17 Profesor Leopoldo Silva Bijit 20-01-2010
2 2 2 n n n n n n w x jy w x jy
Del diagrama, aplicando la identidad trigonomtrica para la tangente del ngulo medio, se obtiene una relacin entre las coordenadas cartesianas de las races; la segunda relacin se cumple debido a que el mdulo de las races es de magnitud unitaria. 2 2 2 2 2 2 / 2 ( ) 1 cos 1 1 n n n n n n sen tg y y x x x y
Despejando, del sistema de ecuaciones, se obtienen las coordenadas cartesianas de w 2n en funcin de las coordenadas de w n . 2 2 1 2 1 2 n n n n x y x x
El cdigo completo de la funcin, con: s[i]=x[i] + jy[i], wn=wn1 +jwn2, w=w1 +jw2, adems se definen una serie de variables locales, para intercambios y para extraer constantes dentro de los lazos. Se eliminan los llamados a funcin, para disminuir el costo de la creacin de frames en el stack. Se agrega el argumento dir, para obtener la transformada directa e inversa con la misma funcin.
void FFT(short int dir, long m, double *x, double *y ) { int n, nn, nmedios, nivel, i,j,k,i1; double w1,w2, wn1,wn2,tx,ty,tw,t1,t2;
for (k=0,n=1; k<m; k++) n *= 2; //n=2^m genera nmero de puntos a partir de m
//void bitreverse(int *x, int n) nmedios=n>>1; for (i=1, j=nmedios; i<n-2; i++) { //printf("i=%d j=%d\n",i,j); if (i < j) { tx = x[i]; ty = y[i]; x[i] = x[j]; y[i] = y[j]; x[j] = tx; y[j] = ty; } 18 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 //j contador binario. Incrementa en uno la posicin ms significativa. //y desplaza a la derecha las reservas. for(k=nmedios; k <= j; k >>= 1) {j -= k;} j+=k; }
/* Calcula FFT */
nn=1; //wn = w2 = -1+j0; En el primer nivel son series de dos puntos wn1 = -1.0; wn2 = 0.0;
for (nivel=0; nivel<m; nivel++) { nn=2*nn; //series de nn puntos. Con nn=2^(nivel+1) for(j=0; j<n; j=j+nn) //Para todos los n elementos en grupos de nn { //w = 1+j0; w1 = 1.0; w2 = 0.0; for (k=0; k< nn/2; k++) //Se aplica mariposa a los pares (k+j, k+j+nn/2) { i=k+j; i1=i+nn/2; //t = w*S[k+j+nn/2]; t1 = w1 * x[i1] - w2 * y[i1]; t2 = w1 * y[i1] + w2 * x[i1]; //u = S[k+j]; //S[k+j+nn/2] = u - t; x[i1] = x[i] - t1; y[i1] = y[i] - t2; //S[k+j] = u + t ; //Operacin mariposa. x[i] += t1; y[i] += t2; //w * = wn ; tw = w1 * wn1 - w2 * wn2; w2 = w1 * wn2 + w2 * wn1; w1 = tw; } } //wn = sqrt(wn) ; Al subir de nivel se requiere la raz cuadrada de la anterior. wn2 = sqrt((1.0 - wn1) / 2.0); if (dir == 1) wn2 = -wn2; wn1 = sqrt((1.0 + wn1) / 2.0); } /* Escalamiento para transformada inversa */ if (dir == -1) for (i=0; i<n; i++) { x[i] /= n; y[i] /= n; } } Transformada rpida de Fourier 19 Profesor Leopoldo Silva Bijit 20-01-2010 24.10. Interpretacin de la FFT. 24.10.1. Corriente continua. Para una serie de 16 valores constantes en el tiempo se obtiene un espectro de un solo punto en el origen.
Figura 24.9. Forma de onda y espectro para seal continua en tiempo. Ntese el valor 16 en el valor mximo del espectro. En algunas definiciones se plantea la transformada directa escalada en 1/n. En este caso el mximo valor del espectro ser 1. Esto mejora la interpretacin como un impulso de Dirac de fuerza uno, asociado a la corriente continua. 24.10.2 Primera armnica. Para 16 muestras de la seal temporal: cos(2 n t/16), con n=0..15 se tiene la grfica de la seal, en incrementos de t. Su FFT, graficada como magnitudes de los valores complejos, est asociada dos puntos diferentes de cero; uno en f=1 f, y otro en f=15 f. Donde f = 1/ t.
Se toman 16 muestras en un perodo de la seal temporal. La grfica temporal est en unidades de t, que es el intervalo de muestreo. Se dice que es la primera armnica.
El espectro est en unidades de f. El punto espectral en 15 f es una frecuencia espejo relativa a f=8 f, que se denomina frecuencia de Nyquist, para el caso de 16 muestras.
En el espectro, la ms alta muestra en frecuencia (positiva o negativa) se denomina frecuencia de Nyquist. Es la mayor componente de alta frecuencia que puede existir en la seal temporal. Dicho de otra forma si la seal no contiene frecuencias superiores a la de Nyquist puede ser reconstruida exactamente a partir de sus muestras.
20 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010 Si la seal que se va a muestrear tiene una frecuencia mxima, para poder recuperar dicha seal, a partir de sus muestras, debe muestrersela con una frecuencia que sea el doble de la frecuencia mxima. Es decir dos muestras por perodo a lo menos. Si la seal vara ms rpido que la mitad de la frecuencia de muestreo no puede recuperrsela a partir de las muestras.
Figura 24.10. Forma de onda y espectro para Primera armnica. 24.10.3. Segunda armnica. Para 16 muestras de la seal temporal: cos(2 n t/8), con n=0..15 se tiene la grfica de la seal, en incrementos de t. Su FFT est asociada dos puntos diferentes de cero; uno en f=2 f, y otro en f=14 f. Donde f = 1/ t. Se dice que es la segunda armnica. El punto espectral en 14 es una frecuencia espejo relativa a la frecuencia de Nyquist. Se toman ahora 8 muestras por perodo.
Figura 24.11. Forma de onda y espectro para Segunda armnica. Transformada rpida de Fourier 21 Profesor Leopoldo Silva Bijit 20-01-2010 24.10.4. Tercera armnica. Se dibuja ahora la seal temporal de tercera armnica junto a la primera o fundamental, en forma continua. A la derecha se ilustran las 16 muestras de la tercera armnica. Se toman 16/3 muestras por perodo.
Figura 24.12. Forma de onda y muestras para Tercera armnica. La trasformada rpida muestra el espectro, donde figura la tercera armnica, y su espejo en 13.
Figura 24.13. Espectro para Tercera armnica. 24.10.5. Sptima armnica. Ntese que las muestras temporales difcilmente permiten visualizar la figura continua. Se toman 16/7 muestras por perodo. 22 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
Figura 24.14. Forma de onda y muestras para Sptima armnica. La transformada rpida permite visualizar el contenido armnico de la sptima. Y el espejo en 9.
Figura 24.15. Espectro para Sptima armnica. 24.10.6 Octava armnica. Al tomar muestras con la frecuencia de Nyquist, se toman dos muestras por perodo de la octava armnica, que tiene perodo 2 t, ya que la fundamental tiene perodo 16 t. Frecuencia de la fundamental = 1/16 t = f/16 = f f . Frecuencia de la octava armnica es = f/2 = 8 f f . Perodo de muestreo = t, frecuencia de muestreo =1/ t = f. Frecuencia de Nyquist = f/2 = 8 f f .
Las muestras de la octava armnica, dos por perodo, se ilustran junto a una grfica continua.
Transformada rpida de Fourier 23 Profesor Leopoldo Silva Bijit 20-01-2010
Figura 24.16. Forma de onda y muestras para Octava armnica. Y el espectro de magnitudes obtenido mediante la FFT:
Figura 24.17. Espectro para Octava armnica. Para la novena armnica, cuya frecuencia es mayor que la de Nyquist se obtiene un espectro idntico al de la sptima armnica. Lo cual no permite reconstruir la seal temporal a travs de su espectro. 24.10.7 Frecuencias no mltiplos enteros de la frecuencia de muestreo. Los casos anteriores daban un espectro de tonos puros. Sin embargo una frecuencia levemente diferente hace aparecer varias armnicas. Veamos por ejemplo una seal de 1,2 veces la frecuencia fundamental (cos(2 n t*1,2/16) )
Se aprecia un valor de componente continua y presencia de segunda tercera y cuarta, en magnitudes decrecientes. Siendo mayor la presencia de primera armnica. 24 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
Figura 24.18. Forma de onda y espectro para no mltiplo de frecuencia de muestreo. Para una seal con frecuencia 1,5 veces la de primera armnica, aparecen componentes espectrales en toda la banda (de 0 a 8), siendo ms importantes las contribuciones de la primera y segunda.
Figura 24.19. Espectro para con frecuencia 1,5 veces la de primera armnica. Transformada rpida de Fourier 25 Profesor Leopoldo Silva Bijit 20-01-2010 La mezcla de dos tonos puros: segunda de amplitud uno, y cuarta de amplitud 0,5.
Figura 24.20. Mezcla de frecuencias mltiples de la de muestreo. La mezcla de un tercio de la 3,2 armnica con un quinto de la 5,5 armnica:
Figura 24.20. Mezcla de frecuencias no mltiplos de la de muestreo. Se aprecia la dificultad para interpretar el contenido armnico en el espectro. Se detecta con facilidad la importancia de la tercera, pero no la de la quinta o sexta. 24.11. Derivacin de la FFT a partir de la transformada de Fourier.
df e f S t s f S dt e t s f S t s ft j ft j 2 1 2 ) ( ) ( )) ( ( ) ( ) ( )) ( ( 26 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
Si se aproxima la primera integral, asumiendo que s(t) es cero fuera del perodo fundamental (i=0..n-1), por una sumatoria, considerando el tiempo como una variable discreta t=i t.
s 0
t 0 =0 s 1
t 1 =1 t s 2
t 2 =2 t s n-1
t n-1
t t=intervalo de muestreo n t=Perodo fundamental
Figura 24.21. Aproximacin de la integral temporal.
Para aproximar la segunda integral, se discretiza la variable f, en los puntos i f. Esto tambin considera cero el espectro fuera del intervalo n f. Con i=0..n-1 y k=0..n-1.
Dividiendo la primera por t, y arreglando la segunda sumatoria, se obtiene:
Definiendo, con k=0..n-1: 1 2 0 2 ( ) ( ) ( ) ( ) i n j fi t i j fk t S f s i t e t s k t S f e df 1 2 0 1 2 0 ( ) ( ) ( ) ( ) i n j ki f t i i n j ki f t i S k f s i t e t s k t S i f e f 1 2 0 1 2 0 ( ) ( ) ( ) ( ) i n j ki f t i i n j ki f t i S k f s i t e t S i f s k t f t e t Transformada rpida de Fourier 27 Profesor Leopoldo Silva Bijit 20-01-2010
Se obtienen los polinomios:
Referencias. Thomas H. Cormen, Charles E. Leiserson, y Ronald L. Rivest, "Introduction to Algorithms", Second Edition, McGraw-Hill, ISBN 0-07-013151-1, 2001. ( ) ( ) ( ) ( ) 1 S k f S k t s k s k t f n t 1 2 / 0 1 2 / 0 ( ) ( ) 1 ( ) ( ) i n j ki n i i n j ki n i S k s i e s k S k e n 28 Estructuras de Datos y Algoritmos Profesor Leopoldo Silva Bijit 20-01-2010
ndice general. CAPTULO 24 ............................................................................................................................................ 1 TRANSFORMADA RPIDA DE FOURIER. ......................................................................................... 1 24.1. REPRESENTACIN POR N COEFICIENTES. ........................................................................................... 1 24.2. REPRESENTACIN POR N VALORES. .................................................................................................. 2 24.3. TRANSFORMADA DISCRETA DE FOURIER. ......................................................................................... 3 24.4. DESARROLLO DEL ALGORITMO DE TRANSFORMADA RPIDA DE FOURIER. ....................................... 5 24.5. N-AVAS RACES COMPLEJAS DE LA UNIDAD. ..................................................................................... 6 24.6. SERIES DISCRETAS PARA DOS Y CUATRO PUNTOS. ............................................................................ 7 24.7. RELACIONES DE RECURRENCIA. ....................................................................................................... 8 24.8. REORDENAMIENTO DE LOS PUNTOS. ............................................................................................... 10 24.9. OPERACIN MARIPOSA. .................................................................................................................. 12 24.10. INTERPRETACIN DE LA FFT. ....................................................................................................... 19 24.10.1. Corriente continua. .............................................................................................................. 19 24.10.2 Primera armnica. ................................................................................................................ 19 24.10.3. Segunda armnica. ............................................................................................................... 20 24.10.4. Tercera armnica. ................................................................................................................ 21 24.10.5. Sptima armnica. ............................................................................................................... 21 24.10.6 Octava armnica. .................................................................................................................. 22 24.10.7 Frecuencias no mltiplos enteros de la frecuencia de muestreo. .......................................... 23 24.11. DERIVACIN DE LA FFT A PARTIR DE LA TRANSFORMADA DE FOURIER. ...................................... 25 REFERENCIAS. ......................................................................................................................................... 27 NDICE GENERAL. .................................................................................................................................... 28 NDICE DE FIGURAS. ................................................................................................................................ 29
Transformada rpida de Fourier 29 Profesor Leopoldo Silva Bijit 20-01-2010 ndice de figuras. FIGURA 24.1 REPRESENTACIN POR MUESTRAS. .......................................................................................... 2 FIGURA 24.2 REPRESENTACIN DE POLINOMIOS POR PUNTOS. ...................................................................... 5 FIGURA 24.3. RACES COMPLEJAS CUADRADAS DE LA UNIDAD ..................................................................... 6 FIGURA 24.4. RACES COMPLEJAS CUARTAS DE LA UNIDAD .......................................................................... 6 FIGURA 24.5. DESCOMPOSICIN EN POLINOMIOS PARES E IMPARES. ........................................................... 10 FIGURA 24.6. CONTADOR BINARIO DIRECTO E INVERSO. ............................................................................. 10 FIGURA 24.7. CONTADOR BINARIO INVERSO CON CUENTAS EN DECIMAL. ................................................... 11 FIGURA 24.8. CLCULO DE LA RAZ CUADRADA. ........................................................................................ 16 FIGURA 24.9. FORMA DE ONDA Y ESPECTRO PARA SEAL CONTINUA EN TIEMPO. ....................................... 19 FIGURA 24.10. FORMA DE ONDA Y ESPECTRO PARA PRIMERA ARMNICA. ................................................. 20 FIGURA 24.11. FORMA DE ONDA Y ESPECTRO PARA SEGUNDA ARMNICA. ................................................ 20 FIGURA 24.12. FORMA DE ONDA Y MUESTRAS PARA TERCERA ARMNICA. ................................................ 21 FIGURA 24.13. ESPECTRO PARA TERCERA ARMNICA. ............................................................................... 21 FIGURA 24.14. FORMA DE ONDA Y MUESTRAS PARA SPTIMA ARMNICA. ................................................. 22 FIGURA 24.15. ESPECTRO PARA SPTIMA ARMNICA. ................................................................................ 22 FIGURA 24.16. FORMA DE ONDA Y MUESTRAS PARA OCTAVA ARMNICA. ................................................. 23 FIGURA 24.17. ESPECTRO PARA OCTAVA ARMNICA. ................................................................................ 23 FIGURA 24.18. FORMA DE ONDA Y ESPECTRO PARA NO MLTIPLO DE FRECUENCIA DE MUESTREO. ............ 24 FIGURA 24.19. ESPECTRO PARA CON FRECUENCIA 1,5 VECES LA DE PRIMERA ARMNICA. ......................... 24 FIGURA 24.20. MEZCLA DE FRECUENCIAS MLTIPLES DE LA DE MUESTREO. .............................................. 25 FIGURA 24.20. MEZCLA DE FRECUENCIAS NO MLTIPLOS DE LA DE MUESTREO. ........................................ 25 FIGURA 24.21. APROXIMACIN DE LA INTEGRAL TEMPORAL. ..................................................................... 26