Articulo 2
Articulo 2
Articulo 2
2 • 45-52 45
Resumen
The following article is a brief introduction of fast Fourier transform (FFT), which is an algorithm for the calculation
of the discrete Fourier transform that reduce the runtime of the program for calculating the Fourier transform greatly.
Since 1965[6], when James W. Cooley and John W. Tukey published this algorithm, its use has expanded quickly and
personal computers have generated an explosion of further FFT applications. Examples of the FFT application are
circuit design, spectroscopy, crystallography, signal processing and communications, images, etc.
Keywords: Fast Fourier transform, algorithm, discrete Fourier transform, Cooley, Tukey.
El siguiente artı́culo es una breve introducción de la transformada rápida de Fourier (FFT por sus siglas en inglés),
el cual es un algoritmo para el cálculo de la transformada discreta de Fourier que reduce el tiempo de ejecución del
programa en gran medida. Desde 1965[6], cuando James W. Cooley y John W. Tukey publicaron dicho algoritmo,
su uso se ha expandido rápidamente y las computadoras personales han impulsado una explosión de aplicaciones
adicionales de la FFT. Algunos ejemplos de la aplicación de la FFT son diseño de circuitos, espectroscopia,
cristalografı́a, procesamiento de señales y comunicaciones, imágenes, etc.
Palabras clave: Transformada rápida de Fourier, algoritmo, transformada discreta de Fourier, Cooley, Tu-
key.
Un ejemplo de factorización matricial sencillo se utili- que la ecuación (4) resulta de tomar N = 4 = 2γ = 22 ;
za para justificar intuitivamente el algoritmo FFT. Las por lo tanto, podemos aplicar la FFT para el cálculo de
matrices factorizadas se representan alternativamente me- la ecuación (4).
diante gráficos de flujo de señales. A partir de estos gráfi-
cos, se construye la lógica de un programa de FFT para El primer paso en el desarrollo del algoritmo FFT para
computadora. A continuación, se presentan los desarrollos este ejemplo es reescribir la ecuación (4) como:
teóricos de diversas formas del algoritmo FFT.
X (0) x0 ( 0 )
1 1 1 1
X (1) 1 W 1 W2 W3 x0 ( 1 )
A. Formulación matricial X (2) = 1 W 2
(6)
W0 W 2 x0 ( 2 )
Considere la transformada discreta de Fourier: X (3) 1 W3 W2 W1 x0 ( 3 )
N −1
X La matriz de la ecuación (6) deriva de la ecuación
X (n) = x0 (k )e−j2πnk/N , n = 0, 1, . . . , N − 1 (4) usando la relación W nk = W nk mod(N ) . Recuerde que
k =0
(1) [nk mod(N )] es el resto o residuo de la división de nk
Nótese que la ecuación (1) describe el cálculo de N por N ; entonces si N = 4, n = 2 y k = 3, entonces:
ecuaciones. Por ejemplo, si N = 4 y tomamos:
W6 = W2 (7)
−j2π/N
W =e (2)
porque
entonces la ecuación (1) puede ser escrita como:
−j2π
nk 6
W = W = exp 6 = exp (−j3π )
4
X ( 0 ) = x0 ( 0 ) W 0 + x0 ( 1 ) W 0 + x0 ( 2 ) W 0 + x0 ( 3 ) W 0
−j2π
X ( 1 ) = x0 ( 0 ) W 0 + x0 ( 1 ) W 1 + x0 ( 2 ) W 2 + x0 ( 3 ) W 3 = exp (−jπ ) = exp 2
4
X ( 2 ) = x0 ( 0 ) W 0 + x0 ( 1 ) W 2 + x0 ( 2 ) W 4 + x0 ( 3 ) W 6
= W 2 = W nk mod(N ) (8)
X ( 3 ) = x0 ( 0 ) W 0 + x0 ( 1 ) W 3 + x0 ( 2 ) W 6 + x0 ( 3 ) W 9
(3) El segundo paso en el desarrollo es factorizar la matriz
cuadrada de la ecuación (6) como sigue:
Las ecuaciones (3) pueden ser representadas de forma
X (0) W0
matricial como: 1 0 0
X (2) 1 W2 0 0
X (0) W0 W0 W0 W0 x0 ( 0 ) X (1) = 0
0 1 W1
X (1) W 0 W 1 W2 W3 x0 ( 1 )
X (3) W3
0 0 1
X (2) = W 0 W 2
W4 W 6 x0 ( 2 )
W0 x0 ( 0 )
X (3) W0 W3 W6 W9 x0 ( 3 ) 1 0 0
(4)
0 1 0 W0 x0 ( 1 )
(9)
o de forma más compacta:
1 0 W2 0 x0 ( 2 )
0 1 0 W 2 x0 ( 3 )
X (n) = W nk x0 (k ) (5)
El método de factorización esta basado en la teorı́a
Denotando el tipo de letra, en negrita y cursiva, una ma- del algoritmo FFT que se desarrollará más adelante. Por
triz. el momento, es suficiente mostrar que el producto de las
matrices cuadradas de la ecuación (9) resulta en la matriz
Examinando la ecuación (4) se observa que debido a cuadrada de la ecuación (6) con la excepción de que las
que W y posiblemente x0 (k ) son complejos, son necesa- filas 1 y 2 han sido intercambiadas (las filas están numera-
rias N 2 multiplicaciones complejas y (N )(N − 1) adicio- das como 0, 1, 2 y 3). Nótese que este intercambio ha sido
nes complejas para desarrollar el cálculo matricial reque- tomado en cuenta en la ecuación (9) reescribiendo el vec-
rido. La FFT debe su éxito al hecho de que el algoritmo tor columna X (n); denotando al vector con intercambio
reduce el número de multiplicaciones y adiciones reque- de filas como:
ridas en el cálculo de la ecuación (4). Ahora vamos a
X (0)
discutir, a nivel intuitivo, cómo se lleva a cabo esta reduc- X (2)
ción. X (n) = X (1)
(10)
X (3)
B. Desarrollo intuitivo
esta factorización es la clave del algoritmo FFT.
Para ilustrar el algoritmo FFT, es conveniente escoger
el número de muestras de x0 (k ) de acuerdo a la relación Aceptando el hecho que la ecuación (9) es correcta,
N = 2γ , donde γ es un entero. En otros desarrollos se pue- a pesar que los resultados están desorganizados, se debe
de remover esta restricción (véase [1] y [3]). Recordemos
examinar el número de multiplicaciones requeridas para matricial redujo el número de multiplicaciones por un
calcular la ecuación. Primero, tomemos: factor de dos. Debido a que el tiempo de cálculo se rige en
gran medida por el número de multiplicaciones requeridas,
x1 ( 0 ) 1 0 W0 x0 ( 0 )
0 observamos la razón de la eficiencia del algoritmo FFT.
x1 ( 1 ) 0 1
= 0 W0
x0 (1) (11)
x1 ( 2 ) 1 0 W 2 0 x0 ( 2 ) Para N = 2γ , el algoritmo FFT es entonces un sim-
x1 ( 3 ) 0 1 0 W2 x0 ( 3 ) ple procedimiento de factorizar una matriz de N × N en
Entonces, el vector columna x1 (k ) es igual al produc- γ matrices (cada una de N × N ), tal que cada una de
to de las dos matrices a la derecha en la ecuación (9). las matrices factorizadas tiene la propiedad especial de
El elemento x1 (0) es calculado con una multiplicación minimizar el número de multiplicaciones y adiciones com-
compleja y una suma compleja (W 0 no es reducido a la plejas. Si generalizamos el resultado del ejemplo previo,
unidad para desarrollar el resultado general). se observa que la FFT requiere N γ/2 = 4 multiplicacio-
nes complejas y N γ = 8 adiciones complejas, mientras
x1 ( 0 ) = x0 ( 0 ) + W 0 x0 ( 2 ) (12) que el método directo [ecuación (4)] requiere N 2 multi-
plicaciones complejas y N (N − 1) adiciones complejas. Si
El elemento x1 (1) también es determinado por una asumimos que el tiempo de computo es proporcional al
multiplicación y una adición compleja. Solo una adición número de multiplicaciones, entonces la relación aproxi-
compleja es requerida para calcular x1 (2). Esto debido a mada del tiempo de computo directo al de la FFT esta
que W 0 = −W 2 ; por lo tanto, dada por:
N2 2N
x1 ( 2 ) = x0 ( 0 ) + W 2 x0 ( 2 ) = (16)
N γ/2 γ
= x0 ( 0 ) − W 0 x0 ( 2 ) (13)
donde si N = 1024 = 210 se tiene una reducción de compu-
donde la multiplicación compleja W 0x
0 (2) ya ha sido de- to de más de 200 a 1. La Figura 1 ilustra la relación entre
terminada al calcular x1 (0) [ecuación (12)]. Por la misma el número de multiplicaciones requeridas usando el algo-
razón, x1 (3) es calculada por una adición compleja sin ritmo FFT comparado con el número de multiplicaciones
multiplicación. El vector intermedio x1 (k ) es determina- usando el método directo.
do por cuatro adiciones complejas y dos multiplicaciones
250
complejas.
X (3) x2 ( 3 ) 100
W0 x1 ( 0 )
1 0 0
1 W2 0 0 x1 ( 1 )
= (14) 50
0 0 1 W 1 x1 ( 2 )
0 0 1 W3 x1 ( 3 )
0
2 4 8 16 32 64 128 256 512 1024
El término x2 (0) es determinado por una multiplica- N (número de muestras)
ción y una adición compleja:
Figura 1: Relación de multiplicaciones entre el cálculo directo
x2 ( 0 ) = x1 ( 0 ) + W 0 x1 ( 1 ) (15) y la FFT
El elemento x2 (1) es calculado por una adición debido
a que W 0 = −W 2 . Similarmente, x2 (2) se determina por El proceso de factorización matricial introduce una
una multiplicación y una adición compleja, y x2 (3) por discrepancia. Recordemos que el cómputo de la ecuación
solo una adición. (9) arroja X (n) en lugar de X (n); es decir,
X (0) X (0)
El cálculo de X (n) por medio de la ecuación (9) re-
X (2) X (1)
quiere un total de cuatro multiplicaciones complejas y
X (n) =
X (1) en lugar de X (n) = X (2)
ocho adiciones complejas. El cálculo de X (n) por medio
de la ecuación (4) requiere 16 multiplicaciones complejas y X (3) X (3)
12 adiciones complejas. Nótese que el proceso de factoriza- (17)
ción matricial introduce ceros en las matrices factorizadas Este reordenamiento es inherente en el proceso de
y, como resultado, reduce el número requerido de multi- factorización matricial y es un problema menor ya que
plicaciones. Para este ejemplo, el proceso de factorización es fácil generalizar una técnica para reorganizar X (n) y
(19) W0 W0
x0 (2) X(4)
es fácil desarrollar un resultado general para reorganizar W0 W0
W8 W4
x0 (3) X(12)
la FFT. W0 W0
x2 (3) W8 x3 (3) W 12 x4 (3)
Par de
x0 (4) nodos
x2 (4) x3 (4) x4 (4)
X(2)
duales W8 W4 W2
W0
x0 (7) X(14)
esta formulación gráfica, podemos describir suficientes W0
x1 (7) W8 x2 (7) W 12 x3 (7) W 14 x4 (7)
x0 (15) X(15)
El segundo arreglo vertical de nodos es el vector x1 (k ) W8 x1 (15) W 12 x2 (15) W 14 x3 (15) W 15 x4 (15)
Arreglos calculados
yectorias de transmisión de entrada provienen del mismo
Datos l=1 l=2 l=3 l=4
par de nodos del arreglo anterior. Por ejemplo, los nodos x0 (k) x1 (k) x2 (k) x3 (k) x4 (k)
x0 (0) X(0)
x1 (0) y x1 (8) se calculan a partir de los nodos x0 (0) y W0
x1 (0)
W0
x2 (0)
W0
x3 (0) W0
x4 (0)
Omitir
x0 (1) X(8)
x0 (8). Nótese que los nodos x0 (0) y x0 (8) no entran en W0 W0
W0 W8
x0 (4) X(2)
W8 x2 (4) x3 (4) W2
x4 (4)
Debido a que el cálculo de un par de nodos duales W0
W4
Omitir
x0 (5) X(10)
es independiente de otros nodos, es posible llevar a cabo W0
W8
Omitir
W4 W 11
Omitir
x0 (9) X(9)
nes de memoria previamente ocupadas por x0 (0) y x0 (8). W8
W4
W2 W9
x0 (10) X(5)
Los requerimientos de memoria son entonces limitados al W8
W4
W 10
Omitir
W5
Omitir
ración (medida verticalmente en términos del indice k) x0 (15)
W8 x1 (15) W 12 x2 (15) W 14 x3 (15) W 15 x4 (15)
X(15)
k y n como números binarios de dos bits, Si reescribimos la ecuación (29) en notación matricial,
obtenemos:
k = 0, 1, 2, 3 o k = (k1 , k0 ) = 00, 01, 10, 11
x1 (0, 0) W0 x0 (0, 0)
1 0 0
n = 0, 1, 2, 3 o n = (n1 , n0 ) = 00, 01, 10, 11 x1 (0, 1) 0 1 0 W0 x0 (0, 1)
x1 (1, 0) =
Un método compacto de escribir k y n es: 1 0 W2 0 x0 (1, 0)
x1 (1, 1) 0 1 0 W2 x0 (1, 1)
k = 2k1 + k0 n = 2n1 + n0 (23) (30)
Nótese que la ecuación (30) es exactamente la matriz
donde k0 , k1 , n0 y n1 pueden tomar solamente los valores factorizada de la ecuación (11), desarrollada en la Subsec-
de 0 y 1. La ecuación (23) es simplemente el método para ción B, con el indice k escrito en notación binaria. Por lo
escribir un número binario en su equivalente en base-10. tanto, la sumatoria interna de la ecuación (27) especifica
Usando la representación de la ecuación (23), se puede la primera de las matrices factorizadas para el ejemplo
reescribir la ecuación (22) para el caso de N = 4, como: desarrollado en la Subsección B o, equivalentemente, el
arreglo l = 1 de el diagrama de flujo de señal ilustrado
1 X
1
en la Figura 2.
x0 (k1 , k0 )W (2n1 +n0 )(2k1 +k0 )
X
X ( n1 , n0 ) =
k0 = 0 k1 = 0
(24) De forma similar, si escribimos la sumatoria externa
Observe que la única sumatoria en la ecuación (22) de la ecuación (27) como:
debe ser reemplazada por γ sumatorias con el fin de eva- 1
luar todos los bits de la representación binaria de k. x1 (n0 , k0 )W (2n1 +n0 )k0
X
x2 ( n0 , n1 ) = (31)
k0 = 0
Factorización de W p . Ahora considere el término
W p . Debido a que W a+b = W a W b , entonces: y representamos el resultado en forma matricial, se obtie-
ne:
W (2n1 +n0 )(2k1 +k0 ) = W (2n1 +n0 )2k1 W (2n1 +n0 )k0
x2 (0, 0) 1 W0 0 x1 (0, 0)
0
= W 4n1 k1 W 2n0 k1 W (2n1 +n0 )k0 x2 (0, 1) 1 W 2 0
x1 (0, 1)
0
x2 (1, 0) = 0
0 1 W 1 x1 (1, 0)
= W 2n0 k1 W (2n1 +n0 )k0 (25)
x2 (1, 1) 0 0 1 W3 x1 (1, 1)
Nótese que el término entre paréntesis es igual a la (32)
unidad debido a que: la cual es la ecuación (14). Ası́, la sumatoria externa de
la ecuación (27) determina la segunda de las matrices
n1 k1
factorizadas del ejemplo de la Subsección B.
n 1 k 1
W 4n1 k1 = W 4 = e−j2π·4/4 = ( 1 ) n 1 k1 = 1
(26) De las ecuaciones (27) y (31) tenemos:
Por lo tanto, la ecuación (24) puede ser escrita en la
forma: X ( n1 , n0 ) = x2 ( n0 , n1 ) (33)
1 1
Es decir, los resultados finales x2 (n0 , n1 ) tal como se
x0 (k1 , k0 )W 2n0 k1 W (2n1 +n0 )k0
X X
X (n1 , n0 ) =
obtuvieron de la sumatoria externa están en orden inverso
k0 = 0 k1 = 0
de bit respecto a los valores deseados X (n1 , n0 ). Esto es
(27)
simplemente la desorganizació que resulta del algoritmo
Esta ecuación representa el fundamento del algoritmo
FFT.
FFT. Para demostrar este punto, considere individual-
mente cada una de las sumatorias de la ecuación (27).
Si combinamos las ecuaciones (28), (31) y (33),
Primero, reescriba la sumatoria entre corchetes como:
1
1 X
X x1 ( n0 , k0 ) = x0 (k1 , k0 )W 2n0 k1
x1 (n0 , k0 ) = x0 (k1 , k0 )W 2n0 k1 (28)
k1 = 0
k1 = 0
1
x1 (n0 , k0 )W (2n1 +n0 )k0
X
Enumerando las ecuaciones representadas por la ecua- x2 (n0 , n1 ) =
ción (28), se obtiene: k0 = 0
X ( n1 , n0 ) = x2 ( n0 , n1 ) (34)
x1 (0, 0) = x0 (0, 0) + W 0 x0 (1, 0)
x1 (0, 1) = x0 (0, 1) + W 0 x0 (1, 1) donde el conjunto de la ecuación (34) representa la for-
mulación original de Cooley-Tukey[6] del algoritmo FFT
x1 (1, 0) = x0 (0, 0) + W 2 x0 (1, 0)
para N = 4. A este tipo de ecuaciones se les conoce como
x1 (1, 1) = x0 (0, 1) + W 2 x0 (1, 1) (29) recursivas, ya que la segunda se calcula a partir de la
primera.