Contiene el contenido teórico del Informe académico sobre la transformada rápida de Fourier, basado en el texto de tratamiento de señales digitales de Proakis y Manolakis.
1. Transformada r´apida de Fourier
Conchari Cabrera Christian Ricardo
Quenta Alvarez Hamed Emmerson
30 de Mayo 2020
1. C´alculo eficiente de la DFT
Como en m´ultiples problemas de programaci´on. muchas veces la divisi´on del problema en peque˜nos sub-
problemas es el camino m´as f´acil hacia una soluci´on eficiente. Ocurre de igual manera con la transformada
discreta de Fourier. El m´etodo consiste en la descomposici´on de una DFT de N puntos en transformadas
DFT sucesivamente m´as peque˜nas.
Para ilustrar las ideas b´asicas, consideremos el c´alculo de una DFT de N puntos, donde N puede descompo-
nerse en factores como un producto de dos enteros, es decir:
N = LM (1)
Esto se puede ilustrar de mejor forma con la siguiente imagen extra´ıda del texto de Tratamiento digital de
se˜nales de Proakis y Manolakis.
Figura 1: Matriz de datos bidimensional para almacenar una secuencia x(n)[1]
Obs´ervese en la figura 1 que l es el´ındice para las filas y m es el´ındice para las columnas. As´ı, la secuencia
x(n) puede almacenarse en un matriz rectangular de diferentes maneras, dependiendo cada una de ellas de
la correspondencia existente entre el ´ındice n y los ´ındices (l,m).
Teniendo la siguiente correspondencia:
n = Ml + m (2)
Esto nos lleva a un arreglo donde la primera fila consta de los primeros M elementos de x(n), la segunda fila
est´a formada por los M elementos siguientes de x(n), y as´ı sucesivamente como se muestra en la figura 2.
1
2. Figura 2: Disposici´on por filas [1]
Tomando como ejemplo el caso donde N = 10, podemos tomar dos factores primos como 2 y 5. Entonces
tendremos.
x(0) = x(4 ∗ 0 + 0)
x(1) = x(4 ∗ 0 + 1)
x(2) = x(4 ∗ 0 + 2)
x(3) = x(4 ∗ 0 + 3)
x(4) = x(4 ∗ 0 + 1) = x(5 − 1)
x(5) = x(4 ∗ 1 + 1) = x[(2 − 1) ∗ 4]
x(6) = x(4 ∗ 1 + 2)
x(7) = x(4 ∗ 1 + 3)
x(8) = x(4 ∗ 1 + 4)
x(9) = x(4 ∗ 1 + 5) = x(2 ∗ 5 − 1)
Cuadro 1: Arreglo bidimensional para una disposici´on por filas.
.
x(0) x(1) x(2) x(3) x(4)
x(5) x(6) x(7) x(8) x(9)
Tambi´en se puede utilizar la correspondencia siguiente para una disposici´on por columnas.
n = l + mL (3)
En este caso se almacenan los L primeros elementos de x(n) en la primera columna, los siguientes L elementos
en la segunda columna, y as´ı sucesivamente como se ilustra en la figura 3
2
3. Figura 3: Disposici´on por columnas [1]
Volviendo al ejemplo anterior.
x(0) = x(0 + 0 ∗ 1)
x(1) = x(1 + 0 ∗ 1) = x(2 − 1)
x(2) = x(2 + 0 ∗ 1) = x(2)
x(3) = x(3 + 0 ∗ 1) = x(2 + 1)
x(4) = x(4 ∗ 0 + 1) = x(2 ∗ 2)
x(5) = x(4 ∗ 1 + 1) = x[(2 ∗ 2) + 1]
x(6) = x(4 ∗ 1 + 2) = x(2 ∗ 3)
x(7) = x(4 ∗ 1 + 3) = x[(2 ∗ 3) + 1]
x(8) = x(4 ∗ 1 + 4) = x[(5 − 1) + 2]
x(9) = x(4 ∗ 1 + 5) = x(2 ∗ 5 − 1)
Cuadro 2: Arreglo bidimensional para una disposici´on por columnas.
.
x(0) x(2) x(4) x(6) x(8)
x(1) x(3) x(5) x(7) x(9)
Se puede utilizar una disposici´on similar para almacenar los valores calculados de la DFT. En esto caso,
la correspondencia se establece entre el ´ındice k y la pareja de ´ındices (p,q), donde 0 ≤ p ≤ L − 1 y
0 ≤ q ≤ M − 1. Si seleccionamos la correspondencia
k = Mp + q (4)
la DFT se almacena por filas, donde la primera fila contiene los M primeros elementos de la DFT X(k),
la segunda fila contiene el siguiente conjunto de M elementos, y as´ı sucesivamente. Por el contrario, la
correspondencia
k = qL + p (5)
da como resultado un almacenamiento por columnas de X(k), donde los L primeros elementos se almacenan
en la primera columna, el segundo conjunto de L elementos se almacena en la segunda columna, y as´ı
sucesivamente.
3
4. Suponiendo que x(n) se hace corresponder con una matriz rectangular x(l, m) y X(k) con la correspondiente
matriz rectangular X(p, q)
La DFT se pueden expresar como una suma doble sobre los elementos de la matriz rectangular multiplicada
por los correspondientes factores de fase. M´as espec´ıficamente, adoptamos la correspondencia por columnas
y filas para x(n).
X(p, q) =
M−1
m=0
N−1
n=0
x(l, m)W
(Mp+q)(mL+l)
N (6)
Mediante las propiedades de exponentes.
W
(Mp+q)(mL+I)
N = WMLmp
N ∗ WmLq
N ∗ WMpl
N ∗ Wlq
N (7)
Aprovechando las propiedades de simetr´ıa y periodicidad del factor de fase WN .
Propiedad de simetr´ıa: W
k+N/2
N = −Wk
N
Propiedad de periodicidad: Wk+N
N = Wk
N
Se puede lograr una mayor eficiencia en la FFT sobre la DFT:
WNmp
N = 1, WmqL
N = Wmq
N/L = Wmq
M , WMpl
N = Wpl
N/M = Wpl
L (8)
Lo cual da lugar a
X(p, q) =
L−1
l=1
Wlq
N
M−1
m=0
x(l, m)Wmq
M Wlp
L (9)
La expresi´on (9) implica el c´alculo de las transformadas DFT de longitud M y longitud L. Dividiendo el
problema por partes como se plantea inicialmente. Para calcular esta ´ultima expresi´on se puede desarrollar
un procedimiento de tres pasos:
1. Para comenzar se calculan las DFT de M puntos llamando F(l, q) al factor de la sumatoria central.
F(l, q) =
M−1
m=0
x(l, m)Wmq
M , 0 ≤ q ≤ M − 1 (10)
Para cada una de las filas, l = 0, 1, ..., L − 1
2. En segundo lugar, calculamos una nueva matriz rectangular G(l,q) definida como:
G(l, q) = Wlq
N F(l, q), 0 ≤ l ≤ L − 1, 0 ≤ q ≤ M − 1 (11)
3. Por ´ultimo, calculamos las DFT de L puntos
X(p, q) =
L−1
l=0
G(l, q)Wlp
L (12)
para cada columna q = 0, 1, ... , M − 1, de la matriz G(l,q).
Aunque pueda parecer que el procedimiento es m´as complicado que utilizando el procedimiento tradicional.
Si evaluamos la complejidad de c´alculo (9). El primer paso implica el c´alculo de L transformadas DFT,
cada una de M puntos. Luego este paso requiere LM2
multiplicaciones complejas y LM(M − 1) sumas
complejas. El segundo paso requiere LM multiplicaciones complejas. Por ´ultimo, el tercer paso requiere ML2
multiplicaciones complejas y ML(L − 1) sumas complejas. El segundo paso requiere LM multiplicaciones
complejas. Por ´ultima, el tercer paso requiere ML2
multiplicaciones complejas y ML(L−1) sumas complejas.
Entonces, la complejidad de c´alculo ser´a:
Multiplicaciones complejas: N(M + L + 1)
Sumas complejas: N(M + L − 2)
4
5. En ambos casos podemos observar que el n´umero de operaciones se ha visto reducido. Tomando como ejemplo
el caso de N=10. Podemos seleccionar L=2 y M=5. Lo cual nos llevar´a a hacer 100 multiplicaciones complejas
a trav´es del c´alculo tradicional de la DFT, por otra parte a trav´es de la FFT nos llevar´a a 80 multiplicaciones
complejas y 50 sumas complejas. Lo cual significa una reducci´on considerable. De igual forma ocurrir´a con el
n´umero de sumas. Se puede observar que el n´umero de multiplicaciones se ha reducido de N2
a N(M +L+1)
y el n´umero de sumas se ha reducido de N(N − 1) a N(M + L − 2).
Ampliando el panorama, cuando N es un n´umero compuesto muy alto, este puede ser descompuesto en
factores para definir un producto de n´umeros primos de la forma
N = r1, r2, ..., rn (13)
Este procedimiento dar´a como resultado transformadas DFT m´as peque˜nas, lo que, a su vez lleva a un
algoritmo m´as eficiente. La primera segmentaci´on de la secuencia x(n) es una matriz rectangular de M
columnas con L filas. La descomposici´on de los datos implicar´a la segmentaci´on de cada fila (o columna) en
matrices rectangulares m´as peque˜nas que dar´an lugar a la transformadas DFT m´as peque˜nas.
Para ilustrar mejor el procedimiento antes mencionado, podemos utilizar una vez m´as el ejemplo antes
mencionado del c´alculo de una DFT de N = 10 puntos, descompuesto en sus factores primos N = 2∗5 = 10.
Descomponiendo por columnas:
Fila 1: x(0, 0) = x(0) x(0, 1) = x(2) x(0, 2) = x(4) x(0, 3) = x(6) x(0, 3) = x(8)
Fila 2: x(1, 0) = x(1) x(1, 1) = x(3) x(1, 2) = x(5) x(1, 3) = x(7) x(1, 3) = x(9)
Por el procedimiento antes mencionado obtendremos la siguiente matriz 2X5 utilizando la ecuaci´on (10):
F(l, q) =
M−1
m=0
x(l, m)Wmq
M , 0 ≤ q ≤ M − 1
F(0, 0) F(0, 1) F(0, 2) F(0, 3) F(0, 4)
F(1, 0) F(1, 1) F(1, 2) F(1, 3) F(1, 4)
Ahora debemos multiplicar cada uno de los t´erminos F(l,q) por los factores de fase Wlq
N = Wlq
10, 0 ≤ q ≤ 4
y 0 ≤ q ≤ 1. Obtendremos una matriz 2X3, utilizando la ecuaci´on (11):
G(l, q) = Wlq
N F(l, q), 0 ≤ l ≤ L − 1, 0 ≤ q ≤ M − 1
G(0, 0) G(0, 1) G(0, 2) G(0, 3) G(0, 4)
G(1, 0) G(1, 1) G(1, 2) G(1, 3) G(1, 4)
El paso final consistir´a en calcular las DFT de dos puntos para cada una de las cinco columnas, utilizando
la ecuaci´on (12):
X(p, q) =
L−1
l=0
G(l, q)Wlp
L
X(0, 0) = X(0) X(0, 1) = X(1) X(0, 2) = X(2) X(0, 3) = X(3) X(0, 4) = X(4)
X(1, 0) = X(5) X(1, 1) = X(6) X(1, 2) = X(7) X(1, 3) = X(8) X(1, 4) = X(9)
En resumen, el algoritmo desarrollado implica los siguientes pasos:
Algoritmo utilizando la disposici´on por columnas.
1. Almacenar la se˜nal por columnas.
2. Calcular la DFT de M puntos de cada fila.
1. Multiplicar la matriz resultante por los factores de fase Wlq
N .
1. Calcular la DFT de L puntos de cada columna.
1. Leer la matriz resultante por filas.
Referencias
[1] J. G. Proakis and D. G. Manolakis, Tratamiento digital de se˜nales. Pearson Prentice-Hall, 2007.
5