Cap-4 FFT
Cap-4 FFT
Cap-4 FFT
OBJETIVOS:
N 1
j . 2. π . n. k
X( n) x 0 ( k ) . exp n 0 .. N 1 (22-1)
N
k=0
j . 2. π
W exp (22-2)
N
0 0 0 0
X( 0 ) x 0 ( 0 ) . W x 0 ( 1 ). W x 0 ( 2 ). W x 0 ( 3 ). W
0 1 2 3
X( 1 ) x 0 ( 0 ) . W x 0 ( 1 ). W x 0 ( 2 ). W x 0 ( 3 ). W (22-3)
0 2 4 6
X( 2 ) x 0 ( 0 ) . W x 0 ( 1 ). W x 0 ( 2 ). W x 0 ( 3 ). W
0 3 6 9
X( 3 ) x 0 ( 0 ) . W x 0 ( 1 ). W x 0 ( 2 ). W x 0 ( 3 ). W
Las ecuaciones anteriores pueden ser más fácilmente representadas en forma matricial:
0 0 0 0 x 0( 0)
X( 0 ) W W W W
0 1 2 3 x 0( 1)
X( 1 ) W W W W
. (22-4)
X( 2 ) 0 2 4 6 x 0( 2)
W W W W
X( 3 ) 0 3 6 9 x 0( 3)
W W W W
o más compactamente:
n . k. (22-5)
X( n) W x 0( k)
El examen de (22-4) revela que ya que W y posiblemente x0(k) sean complejas,
entonces son necesarias N2 multiplicaciones complejas y N.(N-1) adiciones para
realizar el cómputo matricial requerido.
La FFT debe su éxito al hecho que el algoritmo reduce el número de multiplicaciones y
adiciones requeridas en el cálculo de (22-4). Ahora se discutirá, a nivel intuitivo, como
se lleva a cabo esta reducción.
23 - DESARROLLO INTUITIVO
1 1 1 1 x 0( 0)
X( 0 )
1 2 3 x 0( 1)
X( 1 ) 1 W W W
. (23-1)
X( 2 ) 2 0 2 x 0( 2)
1 W W W
X( 3 ) 3 2 1 x 0( 3)
1 W W W
n.k mod( n . k , N )
W W
Recúerdese que mod(n.k,N) es el resto de la división entre n.k y N, por lo tanto si N=4,
n=2 y k=3 entonces:
6 2 (23-2)
W W
ya que
n.k 6 j . 2. π .
W W exp ( 6) exp( j . 3. π ) exp( j . π )
4
j .π .2. 2 mod( n . k , N )
exp ( 2) W W (23-3)
4
Se puede demostrar fácilmente que el producto de las dos matrices cuadradas da por
resultado la matriz cuadrada de (23-1). Con la excepción que las filas 1 y 2 han sido
intercambiadas. Note que el intercambio ha sido tomado en cuenta en (23-4)
reescribiendo el vector columna X(n), se denota el vector con la fila intercambiada por:
X( 0 )
X( 2 )
X d ( n) (23-5)
X( 1 )
X( 3 )
x 1( 0) 0 x 0( 0)
1 0 W 0
x 1( 1) 0 x 0( 1)
0 1 0 W
. (23-6)
x 1( 2) 2 x 0( 2)
1 0 W 0
x 1( 3) 2 x 0( 3)
0 1 0 W
Esto es, el vector columna x1(k) es igual al producto entre el vector y la matriz a la
derecha de la ecuación (23-4).
El elemento x1(0) es computado por una multiplicación compleja y una adición
compleja (W0 no es reducido a la unidad para desarrollar un resultado general).
0
x 1( 0) x 0( 0) W .x 0( 2) (23-7)
El elemento x1(1) está también determinado por una multiplicación compleja y una
adición. Sólo una adición compleja se realiza para computar x1(2). Esto deviene del
hecho que W0 = - W2.
Por lo tanto
2 0
x 1( 2) x 0( 0) W .x 0( 2) x 0( 0) W .x 0( 2) (23-8)
donde la multiplicación compleja W0.x0(2) ya ha sido computada en la determinación
de x1(0).
Por el mismo razonamiento, x1(3) es computada por sólo por una adición compleja y
ninguna multiplicación. El vector intermedio x1(k) es entonces determinado por cuatro
adiciones y dos multiplicaciones complejas.
x 2( 0) 0 x 1( 0)
X( 0 ) 1 W 0 0
x 2( 1) 2 x 1( 1)
X( 2 ) 1 W 0 0
. (23-9)
X( 1 ) x 2( 2) 1 x 1( 2)
0 0 1 W
X( 3 ) x 2( 3) 3 x 1( 3)
0 0 1 W
El elemento x2(0) está determinado por una multiplicación y una adición complejas:
0
x 2( 0) x 1( 0) W .x 1( 1) (23-10)
W0 = - W2.
Con un razonamiento similar x2(2) está determinado por una multiplicación compleja y
una adición y x2(3) por sólo una adición.
Luego el cómputo de (23-4) requiere un total de cuatro multiplicaciones complejas y
ocho sumas complejas. En cambio el cómputo de (22-4) requiere dieciséis
multiplicaciones complejas y 12 sumas complejas.
Nótese que el proceso de factorización de la matriz introduce ceros en las matrices
factoreadas y, como resultado, reduce el número requerido de multiplicaciones. Para
este ejemplo, el proceso de factorización de matriz ha reducido el número requerido de
multiplicaciones en un factor de dos.
Ya que el tiempo de cómputo es fuertemente gobernado por el número de
multiplicaciones, se ve la razón de la eficiencia del algoritmo FFT.
Para N = 2γ el algoritmo FFT es entonces simplemente un proceso de factorización de
una matriz N x N en γ matrices (cada una de N x N) de modo tal que cada una de las
matrices factoreadas tenga una propiedad especial de minimizar el número de
multiplicaciones y adiciones.
Si se extiende el resultado del ejemplo previo, se nota que la FFT requiere N.γ /2 = 4
multiplicaciones complejas y N.γ = 8 adiciones complejas, mientras que el método
directo requiere N2 multiplicaciones complejas y N.(N-1) adiciones complejas.
Si se supone que el tiempo de cómputo es proporcional al número de multiplicaciones,
entonces la razón aproximada de tiempo de cómputo del método directo al de la FFT
está dado por:
2
N 2. N
γ γ (23-11)
N.
2
la cual para N =1024 = 210 es una reducción computacional de más de 200 a 1. La
Figura 23.1 ilustra la relación entre el número de multiplicaciones requeridas usando el
algoritmo FFT comparada con el número de multiplicaciones del método directo.
2 N . ln( N )
f dir( N ) N f fft( N ) N 2 .. 1024
2 ln( 2 )
X d ( n) en vez de X( n)
X( 0 ) X( 00)
X( 2 ) X( 10)
se convierte en (23-12)
X( 1 ) X( 01)
X( 3 ) X( 11)
Obsérvese que si los argumentos binarios de (18) son "flippeados" o "bit reversed" (es
decir, 10 se transforma en 01, etc.) En otras palabras, la imagen del espejo del binario.
entonces
X( 00) X( 00)
X( 10) X( 01)
X d ( n) X( n) (23-13)
X( 01) “flipea a” X( 10)
X( 11) X( 11)
Como se muestra, se representa el vector de datos o arreglo x0(k) por una columna
vertical de nodos sobre la izquierda del gráfico. El segundo arreglo vertical de nodos es
el vector x1(k) computado en la ecuación (23-6), y el próximo arreglo corresponde el
vector x0(k) = Xd(n), ecuación (23-9). En general, se computarán γ arreglos, donde
N =2γ .
El flujo de señal se interpreta como sigue. A cada nudo ingresan dos líneas sólidas
representando "sendas de transmisión" desde nudos previos. Una senda transmite o trae
una cantidad desde un nodo en un arreglo, multiplica la cantidad por Wp, y saca el
resultado por el nudo del próximo arreglo. El factor Wp aparece cerca de la flecha de la
senda de transmisión, la ausencia de este factor implica que Wp = 1.
Los resultados entrantes en un nudo desde dos sendas de transmisión son combinados
aditivamente.
Para ilustrar la interpretación del gráfico de flujo de señal, considérese el nudo x1(2) de
la Figura 24.1.
De acuerdo a las reglas para interpretar el gráfico de flujo de señal:
2
x 1( 2) x 0( 0) W .x 0( 2) (24.1)
lo cual es simplemente la ecuación (23-8). Cada nodo del gráfico de flujo de señal es
expresado similarmente.
Este método es entonces un método conciso para representar los cómputos requeridos
en la matriz factorizada del algoritmo FFT (23-4). Cada columna del gráfico
corresponde a una matriz factorizada; se requieren γ arreglos verticales de N puntos
cada uno (N=2γ ). La utilización de esta presentación gráfica permite fácilmente
describir el proceso de factorización para N grande.
Se muestra en gráfico aparte (Figura 24.2) el diagrama de flujo de señal para N=16.
Con un diagrama de flujo de señal de este tamaño, es posible desarrollar las propiedades
concernientes al proceso de factorización de la matriz y así proveer de un marco para el
desarrollo de un diagrama de flujo para un programa de computadora que aplique el
algoritmo FFT.
25 - NODOS DUALES
La inspección de la Figura 24.2 revela que en cada arreglo siempre se pueden encontrar
dos nodos cuyas entradas de senda de transmisión provienen del mismo par de nudos en
el arreglo previo. Por ejemplo, los nodos x1(0) y x1(8) son computados en términos de
los nodos x0(0) y x0(8). Note que los nodos x0(0) y x0(8) no entran en el cómputo de
cualquier otro nodo. Se define a tales nodos como Par de Nodos Duales.
Ya que le cómputo de un par de nodos duales es independiente de los otros nodos, es
posible realizar cómputo "in-place". Para ilustrar, nótese de la Figura 24.2 que se
pueden calcular simultáneamente x1(0) y x1(8) en términos de x0(0) y x0(8) y retornar
el resultado a las locaciones de almacenamiento previamente ocupadas por x0(0) y
x0(8). Los requerimientos de almacenaje están entonces limitados solamente al arreglo
de datos x0(k). A medida que cada arreglo es computado, los resultados son retornados
a este arreglo.
28 - DETERMINACION DE Wp
En base a las discusiones precedentes, se han definido las propiedades de cada arreglo
con la excepción de los valores de p en (27-1). El valor p se determina p con el
siguiente procedimiento:
29 - REORDENAMIENTO DE LA FFT
Usando las propiedades discutidas para el gráfico de flujo de señal de la FFT, se puede
fácilmente desarrollar una diagrama de flujo para programar el algoritmo sobre una
computadora digital. Se sabe de las discusiones previas que primero se computa el
arreglo l=1 arrancando por el nodo k=0 y trabajando hacia abajo en el arreglo. En cada
nodo k se computa el par de ecuaciones (27-1) donde p está determinado por el
procedimiento descripto. Se continúa hacia abajo en el arreglo computando el par de
ecuaciones (27-1) hasta alcanzar la región de los nodos que deben ser saltadas.
Se salta sobre los nodos apropiados y se continúa hasta haber computado el arreglo
entero. Luego se procede a computar los arreglos remanentes usando el mismo
procedimiento. Finalmente se reordena el arreglo final para obtener los resultados
deseados.
El diagrama de flujo de la Figura 30.1 sirve para elaborar un programa de computadora
que realiza el algoritmo FFT.
La caja 1 describe los datos de entrada necesarios. El vector de datos x0(k) se supone
que es un complejo y está indexado como k = 0, 1, ..., N-1. Si x0(k) es real., entonces la
parte imaginaria debería ser puesta a cero. El número de puntos muestra N debe
satisfacer la relación N = 2γ , con γ entero.
La inicialización de varios parámetros del programa se lleva a cabo en la caja 2. El
parámetro l es el número de arreglo que está siendo considerado. Se arranca con el
arreglo l=1.
El espaciamiento entre los nodos duales está dado por el parámetro N2; para el arreglo
l=1, N2=N/2 y es inicializado como tal. El parámetro NU1 es el desplazamiento a
derecha requerido en la determinación del valor de p en la ecuación (27-1); es
inicializado a γ -1. El índice k del arreglo es inicializado a k=0, así trabajará desde la
cima y progresará hacia abajo en el arreglo.
La caja 3 chequea para ver si el arreglo l a ser computado es mayor que γ . De ser así,
el programa bifurca a la caja 13 para reordenar los resultados computados por inversión
de bit. Si todos los arreglos no han sido computados, se procede a la caja 4.
La caja 4 pone un contador I =1. Este contador monitorea el número de pares de nodos
duales que han de ser considerados. Recuérdese que es necesario saltar ciertos nodos
con el objeto de asegurar que los nodos previamente considerados no son encontrados
una segunda vez. El contador I es el control para determinar cuándo el programa debe
saltar.
Las cajas 5 y 6 realizan el cómputo de la ecuación (27-1). Ya que K y l han sido
iniciializados a 0 y 1 respectivamente, el nodo inicial considerado es el primer nodo del
primer arreglo. Para determinar el factor p para este nodo, recuérdese que primero se
debe escalar el número binario k a la derecha γ -l bits. Para llevar a cabo esto, se
computa el valor entero de k/2γ − l = k/2NUl , y se pone el resultado en M como se
muestra en la caja 5. De acuerdo a los procedimientos para la determinación de p, se
debe bit-reverse M, donde M está representado por γ = NU bits.
La función IBR(M) denotada en la caja 5 es una rutina especial para reversión de bit y
será descripta más adelante.
La caja 6, es el cómputo de (27-1). Se computa el producto Wp.(x(k+N/2) y se asigna el
resultado a una locación de almacenamiento temporario. Después se suma y se resta este
término de acuerdo con (27-1). El resultado es la salida del nodo dual.
Luego se procede hacia abajo en el arreglo en el próximo nodo. Como se muestra en la
caja 7, k se incrementa en 1.
Para evitar el cómputo de un nodo dual que ha sido considerado previamente, se
chequea en la caja 8 para determinar si el contador I es igual a N/2. Para el arreglo 1, el
número de nodos que pueden ser considerados consecutivamente sin saltar es igual a
N/2=N2. La caja 8 determina esta condición. Si I no es igual a N2, entonces se procede
hacia abajo en el arreglo y se incrementa el contador I como se muestra en la caja 9.
Recuérdese que k ya ha sido incrementado en la caja 7.
Las cajas 5 y 6 son entonces repetidas para el nuevo valor de k.
Si I = N/2 en la caja 8, entonces se sabe que se ha alcanzado un nodo previamente
considerado. Luego se saltan N2 nodos poniendo k=k+N2. Debido a que k ya ha sido
incrementado en 1 en la caja 7, es suficiente saltar a los nodos previamente
considerados incrementando a k en N2.
Antes de realizar los cómputos indicados en las cajas 5 y 6 para el nuevo nodo k=k+N2,
se debe chequear primero para ver que no se haya excedido el tamaño del arreglo. Como
se muestra en la caja 11, si k es menor que N-1 (recuérdese que k está indexado desde 0
a N-1), se resetea el contador I a 1 en la caja 4 y se repiten las cajas 5 y 6.
Si k > N - 1 en la caja 11, se sabe que se debe proceder al próximo arreglo. Por lo tanto,
como se muestra en la caja 12, I es indexado por 1. El nuevo espaciamiento N2 es
simplemente N2/2 (recuérdese que el espaciamiento es N/2l, NU1 es decrementado en 1
(NU1 es igual a γ - l) y k es reseteado a 0. Luego se chequea la caja 3 para ver si todos
los arreglos han sido computados. Si es así, se procede a reordenar el resultado final.
Esta operación es realizada en las cajas 13 a 17.
La caja 13 revierte los bits del entero k para obtener el entero i. De nuevo, se usa la
función de reversión de bit IBR(k) la cual se explicará posteriormente. Recuérdese que
para reordenar la FFT simplemente de intercambian x(k) con x(i). Esta manipulación es
realizada por las operaciones indicadas en la caja 15. Sin embargo, antes de ingresar en
la caja 15 es necesario determinar, como se muestra en la caja 14, si i es menor que o
igual a k. Este paso es necesario para prohibir la alteración de los nodos previamente
reordenados.
La caja 16 determina cuándo todos los nodos han sido reordenados y la caja 17 es
simplemente un índice para k.
En la caja 18, se describe la lógica de la función de reversión de bit IBR(k). Se ha
implementado el procedimiento de reversión de bit descripto en un parágrafo anterior.
Cuando se procede a implementar el diagrama de flujo de la figura adjunta en un
programa de computadora, es necesario considerar las variables x(k) y Wp como
números complejos y ellas deben ser manejadas acordemente.
Figura 24.2
Figura 27.1
Figura 29.1
Figura 30.1