Está en la página 1de 32

Tratamiento matematico de se nales y sistemas 2004-05

Transformada discreta de Fourier


Transformada r apida
(Material elaborado por Alfonsa Garca L opez y Fr ancisco Garca Mazaro)
Introducci on
A principios del siglo XIX, a partir de problemas fsicos como la vibracion de una
cuerda o la propagaci on del calor, Joseph Fourier desarrollo una teora matematica sobre la
representacion de funciones por medio de series trigonometricas, que mas tarde terminara
en llamarse Analisis de Fourier.
A lo largo del siglo XIX, con la aportaci on importante de otros muchos matematicos,
como Dirichlet o Riemann (y pese a la oposicion de otros, todo hay que decirlo), se fue
formalizando toda la teora. Con la llegada del siglo XX, la integral de Lebesgue permiti o
plantear los problemas de un modo diferente, dando lugar a nuevos resultados y a nuevos
puntos de vista.
Sin embargo, si durante casi 200 a nos el An alisis de Fourier no ha pasado de ser un
importante campo de estudio dentro de la matem atica, con aplicaciones a la fsica o a otras
ciencias, a partir del a no 1965 la historia cambia por completo. Ese a no, Cooley y Tukey
(ver [5]) publicaron un metodo para calcular transformadas de Fourier que signicaba un
ahorro de tiempo importante respecto de todos los metodos conocidos hasta entonces, y que
posteriormente se denominara transformada rapida de Fourier (o FFT, por sus iniciales
en ingles).
Este descubrimiento signic o que muchos problemas, de muy diversos campos, que
antes no podan resolverse por la complicacion de los c alculos de los coecientes de Fourier,
ahora estan al alcance de la mano. O que se hayan encontrado en los ultimos a nos muchas
nuevas aplicaciones, insospechadas hasta entonces.
Entre estas aplicaciones, una de las m as importantes es la del procesamiento de se nales
digitales.
El primero en trabajar en este campo fue E. Oran Brigham (ver [3]), que escribi o
el primer libro sobre transformada r apida de Fourier, gracias al cual muchos ingenieros
aprendieron los fundamentos de esta herramienta.
El estudio de se nales aparece en una gran variedad de campos, y las ideas y tecnicas
asociadas juegan un papel importante en areas tan diversas de la ciencia como las co-
1
municaciones, la aeron autica, la astronoma, el dise no de circuitos, ac ustica, sismologa,
ingeniera biomedica, procesamiento de voz . . .
Algunos ejemplos relacionados con el tratamiento de se nales pueden ser:
Dise no de transmisores y receptores de radio y televisi on.
Diagn ostico automatico de electrocardiogramas.
Restauracion de se nales que han sido degradadas, bien en la trasmisi on de la voz
con interferencias (por ejemplo para aislar la voz del piloto del ruido de la cabina), o
bien en la recuperaci on y mejora de grabaciones antiguas (musicales, por ejemplo).
Restauracion de im agenes en general (por ejemplo, las imagenes enviadas por son-
das o satelites espaciales).
An alisis de promedios de ndice burs atil, con vistas a efectuar pron osticos economi-
cos . . .
Una idea de la importancia del algoritmo de Cooley y Tukey la da la cantidad de libros
que se han publicado en los ultimos a nos (la mayora, en ingles) sobre las transformadas
de Fourier (ver [4], [7], [10] o [21]), o incluso algunos unicamente sobre la transformada
r apida de Fourier (ver por ejemplo [3] o [15]). Tambien es facil encontrar recientemente el
citado algoritmo en muchos libros dedicados a algoritmos en general, buscandose adem as
continuas mejoras para su implementaci on de una manera m as eciente (ver [2], [6], [11],
[12] o [19]), en libros sobre analisis de se nales digitales (ver [13], [14], [16] o [17]), o incluso
en libros sobre c alculo cientco o simb olico (vease [8] o [20]).
En estas notas, vamos a dedicar una parte importante al estudio y aplicaci on de dicho
algoritmo. Pero antes de entrar en ello, veremos lo que son las series de Fourier y la
transformada discreta de Fourier, empezando con un repaso de los conceptos basicos de
operaciones con n umeros complejos.
1. N umeros complejos
En el cuerpo IR de los n umeros reales no tienen solucion determinadas ecuaciones
polin omicas como x
2
+1 = 0. Para resolver este problema se hace necesaria una ampliaci on
de los n umeros reales introduciendo un nuevo elemento, i, que verique dicha ecuaci on, y
construyendo un nuevo cuerpo que contenga a IR y a este elemento.
1.1. Denicion (Forma binomica de un n umero complejo).
Un n umero complejo en forma bin omica es una expresi on z = x+yi, donde i es la unidad
imaginaria, que verica i
2
= 1, y x e y son n umeros reales, que se denominan respecti-
vamente parte real de z y parte imaginaria de z, denot andose
x = Re z y = Imz.
1.2. Operaciones elementales con n umeros complejos.
Dados los n umeros complejos en forma bin omica z
1
= x
1
+y
1
i y z
2
= x
2
+y
2
i, se dene
z
1
z
2
= (x
1
x
2
) + (y
1
y
2
)i
z
1
z
2
= (x
1
x
2
y
1
y
2
) + (x
1
y
2
+x
2
y
1
)i
2
(es el producto de los binomios teniendo en cuenta que i
2
= 1).
Y si z
2
,= 0, entonces
z
1
z
2
=
(x
1
+y
1
i)
(x
2
+y
2
i)
(x
2
y
2
i)
(x
2
y
2
i)
=
x
1
x
2
+y
1
y
2
x
2
2
+y
2
2
+
x
2
y
1
x
1
y
2
x
2
2
+y
2
2
i.
En particular, el inverso del n umero z = x +yi ,= 0 es
1
z
=
x
x
2
+y
2

y
x
2
+y
2
i.
1.3. Observaciones.
(1) El n umero complejo x + yi se puede representar en el plano IR
2
como el punto de
coordenadas cartesianas (x, y).
(2) El conjunto I C de los n umeros complejos, con las operaciones denidas tiene estructura
de cuerpo, que contiene al de los n umeros reales ya que un n umero real es un complejo
de la forma x+iy con y = 0. Adem as este cuerpo es algebraicamente cerrado, es decir
toda ecuacion polin omica con coecientes complejos tiene soluci on en I C.
(3) I C no admite un orden total compatible con la estructura de cuerpo.
1.4. Potencias de la unidad imaginaria.
Observemos que, dado que i
2
= 1, las primeras potencias de la unidad imaginaria son
i
1
= i i
2
= 1 i
3
= i i
4
= 1
i
5
= i i
6
= 1 i
7
= i etc.
Para calcular i
n
con n ZZ basta elevar i al resto de la division de n entre 4.
Nota. La forma bin omica no es muy adecuada para calcular potencias altas de un n umero
complejo x + iy con x, y ,= 0, ya que sera necesario calcular la potencia del binomio y
despues simplicar las sucesivas potencias de i. Por ejemplo
(1 + 2i)
3
= (1)
3
+ 3(1)
2
(2i) + 3(1)(2i)
2
+ (2i)
3
= 1 + 6i + 12 8i = 11 2i.
Veremos una forma de expresar los n umeros complejos que permite, entre otras cosas, un
calculo m as eciente de potencias.
1.5. Denicion (Complejo conjugado).
Se llama conjugado del n umero complejo z = x +yi al n umero z = x yi.
1.6. Propiedades del conjugado.
1. Para todo z I C se verica z = z.
2. Si z
1
, z
2
I C entonces z
1
+z
2
= z
1
+z
2
y z
1
z
2
= z
1
z
2
Y si z
2
,= 0,
_
z
1
z
2
_
=
z
1
z
2
3
3. Para todo z I C se verica Re z =
z +z
2
e Imz =
z z
2i
de donde se deduce que un
n umero complejo z IR si y solo si z = z.
1.7. Denicion (M odulo y argumento de un n umero complejo).
Dado el n umero complejo z = x +yi se dene el m odulo de z de la forma
[z[ =
_
x
2
+y
2
y el argumento de z es un angulo , denotado arg z, que verica
x = [z[ cos , y = [z[ sen .
En la gura 1 se puede observar el signicado geometrico del m odulo y el argumento de
un n umero complejo:
Figura 1. M odulo y argumento de un n umero complejo.
Observemos que, dado que las funciones trigonometricas son peri odicas, hay innitos
argumentos de un n umero complejo. Llamaremos argumento principal de z ,= 0, y lo
denotaremos Arg z, al unico argumento [0, 2).
Nota. Se puede calcular el argumento de z = x + yi con x ,= 0 teniendo en cuenta que
tg =
y
x
y los signos de x e y.
1.8. Ejemplo: El n umero complejo z = 1 +

3i tiene modulo 2 y argumento 2/3, ya


que
_
(1)
2
+
_

3
_
2
= 2 , 2 cos(2/3) = 1 y 2 sen(2/3) =

3 ,
mientras que el n umero complejo z =

2
2
i

2
2
tiene modulo 1 y argumento /4.
1.9. Propiedades del m odulo y argumento.
1. [z[ 0 z I C.
2. [z[ = 0 z = 0.
3. [z[
2
= z z z I C.
4. [z
1
+z
2
[ [z
1
[ +[z
2
[ z
1
, z
2
I C.
4
5. [z
1
z
2
[ = [z
1
[[z
2
[ z
1
, z
2
I C.
6. Si
1
es un argumento de z
1
y
2
es un argumento de z
2
entonces
1
+
2
es un argumento
de z
1
z
2
y
1

2
es un argumento de
z
1
z
2
cuando z
2
,= 0.
1.10. Denicion (Exponencial compleja).
Dado IR se dene e
i
= cos +i sen .
As, dado un n umero complejo z = x +yi, la exponencial de z es
e
z
= e
x
(cos y +i sen y).
1.11. Teorema. Todo n umero complejo z puede expresarse de la forma
z = e
i
siendo = [z[ y un argumento de z.
As, z = x +iy = e
i
= (cos +i sen ).
1.12. Observaciones.
(1) A la expresi on z = e
i
dada por el teorema anterior se le suele llamar forma expo-
nencial o polar del n umero complejo z. Para obtenerla con Maple podemos usar las
funciones abs (para determinar el m odulo) y argument (que devuelve un argumento
en (, ]).
(2) Para operar con n umeros complejos se utilizara la forma de estos en la cual los calculos
sean mas sencillos, por ejemplo el producto y el cociente de n umeros complejos en forma
polar admiten una expresion muy simple (tengase en cuenta la propiedad 1.10.6):
si z
1
=
1
e
i
1
, z
2
=
2
e
i
2
entonces
z
1
z
2
=
1

2
e
i(
1
+
2
)
z
1
z
2
=

1

2
e
i(
1

2
)
si z
2
,= 0.
Esto permite una sencilla interpretaci on geometrica para el producto de dos n umeros
complejos: el n umero complejo z
1
z
2
tiene por m odulo el producto de los m odulos de
z
1
y z
2
y por argumento la suma de los argumentos.
En particular, multiplicar un n umero complejo z por otro de m odulo 1 y argumento
supone un giro de radianes.
1.13. Ejemplo: El n umero complejo z = 1 +

3i se escribe en forma polar:


z = 1 +

3i = 2e
i
2
3
,
mientras que z =

2
2
i

2
2
en forma polar sera z = e
i/4
(ver ejemplo 1.9).
1.14. Propiedades de la exponencial compleja.
1. e
0
= 1.
5
2. e
z
,= 0 z I C.
3. e
z
1
e
z
2
= e
z
1
+z
2
z
1
, z
2
I C.
4. [e
z
[ = e
Re z
z I C.
5. e
z
= 1 z = 2ki con k ZZ.
6. e
z
1
= e
z
2
z
1
z
2
= 2ki con k ZZ. (La funci on exponencial compleja no es
inyectiva).
7. e
z
= e
z
z I C. En particular, e
ix
= e
ix
x IR.
1.15. Observacion. Una f ormula que engloba las constantes m as usuales en Matematicas
es
e
i
+ 1 = 0
expresi on sorprendentemente simple, denominada f ormula de Euler, que presentamos a
modo de curiosidad.
1.16. Potencia de un n umero complejo. Formula de De Moivre.
Para calcular una potencia entera z
n
= z
(n
z de un n umero complejo puede utilizarse la
f ormula del binomio de Newton si z esta expresado en forma bin omica, pero si n es grande
el proceso resulta laborioso. Sin embargo, en forma polar, la potencia z
n
se puede obtener
f acilmente ya que
z
n
=
_
e
i
_
n
=
n
e
in
o lo que es lo mismo:
z
n
=
n
(cos n +i sen n) (1)
es decir z
n
tiene modulo
n
y argumento n.
La expresi on (1) se conoce como formula de De Moivre y, ademas de su utilidad en
este contexto, se puede aplicar para obtener relaciones entre las razones trigonometricas
de un angulo y las de sus m ultiplos enteros.
1.17. Races enteras de un n umero complejo.
Dado el n umero complejo z = e
i
,= 0 existen n n umeros w
k
, k = 0, 1, . . . n 1, que
verican (w
k
)
n
= z, es decir son las races n-esimas de z. Ademas, estos n umeros son
w
k
=
n

e
i
+2k
n
k = 0, 1, . . . n 1.
1.18. Observacion. Todas las races de un n umero complejo z = e
i
tienen el mismo
modulo
n

y sus argumentos se obtienen empezando en



n
e incrementando sucesivamente
2
n
radianes. Teniendo en cuenta la observacion 1.13 (2), las races w
k
se pueden expresar
de modo recurrente por:
w
0
=
n

e
i

n
, w
k
= e
i
2
n
w
k1
k = 1, . . . n 1.
6
1.19. Races n-esimas de la unidad.
Puesto que 1 = e
0i
, sus races n-esimas son
1, e
i
2
n
, e
i
4
n
, e
i
6
n
, . . . , e
i
2(n1)
n
.
1.20. Propiedades de las races n-esimas de la unidad.
1. La suma de las races n-esimas de la unidad es 0.
En efecto, si w = e
i
2
n
, entonces la suma es
S = 1 +w +w
2
+w
3
+. . . +w
n1
.
Y por tratarse de una progresi on geometrica de raz on w,
S =
1 w
n
1 w
= 0.
2. Si w es una raz n-esima de la unidad, w ,= 1, entonces
1 +w +w
2
+w
3
+. . . +w
n1
= 0.
(Vease la propiedad 1.)
3. Si n es par y w es una raz n-esima de la unidad, entonces w
2
es una raz n/2-esima
de la unidad.
Esto es evidente, ya que (w
2
)
n/2
= w
n
= 1.
1.21. Ejemplo: Las races cuartas de 1 son, como es sabido, 1, 1, i y i. Y pueden
expresarse de la forma:
1, i = e
i

2
= e
i
2
4
, 1 = e
i
= e
i
22
4
, i = e
i
3
2
= e
i
32
4
.
Si tomamos, por ejemplo, la raz w = i, se tiene que
1 +w +w
2
+w
3
= 1 + (i) + (1) + (+i) = 0.
Ademas, w
2
= 1, que es una raz cuadrada de la unidad.
7
2. Series de Fourier
Supongamos que queremos estudiar una magnitud de un cierto fen omeno natural que
viene expresada como una funci on y(t) del tiempo. Vamos a tratar de expresarla de la
forma
y(t) =

a
i
x
i
(t),
es decir como combinacion lineal de unas funciones sencillas, x
i
(t), que se denominan carac-
tersticas elementales. Los coecientes a
i
deben ser constantes y constituyen el espectro de
la funci on y(t). Es de suponer que la distribuci on y magnitud de los a
i
nos proporcione
informaci on sobre y(t).
Por ejemplo, el espectro del ecocardiograma puede informar al medico sobre el es-
tado del corazon; el espectro del ruido de un motor puede informar sobre su estado de
funcionamiento . . .
El estudio de este tipo de problemas es el objetivo de una disciplina denominada analisis
arm onico. El metodo propuesto lleva asociados tres problemas:
1. La elecci on adecuada de las caractersticas elementales x
i
(t).
2. Calculo del espectro, o sea de los coecientes a
i
.
3. Interpretaci on de la informaci on.
No vamos a entrar ahora en la interpretaci on de la informaci on, entre otras cosas
porque depende en buena parte del fen omeno mismo que se estudia.
En los metodos de c alculo es donde m as inuencia ha tenido el desarrollo reciente de
los ordenadores. De los metodos analogicos, gr acos, mecanicos . . . para calcular los
coecientes, se ha pasado al dominio casi absoluto de los medios digitales, simplicados en
gran medida gracias al algoritmo de Cooley y Tukey (ver [5]).
En cuanto al primer problema, el metodo de Fourier lo resuelve tomando funciones
exponenciales complejas (e
inx
) o trigonometricas (senos y cosenos). Pero hay que tener
en cuenta que para que las caractersticas elementales se ajusten bien a determinados
fen omenos naturales, as como para determinar mas f acilmente el espectro, es bueno que las
funciones x
i
(t) sean ortogonales, de manera que estamos poniendo y(t) como combinacion
lineal de vectores ortogonales.
El concepto de ortogonalidad se puede denir en un espacio vectorial cualquiera, y no
solamente en IR
2
o IR
3
, y va ligado al concepto de producto escalar. Si V es un espacio
vectorial sobre el cuerpo I C de los n umeros complejos (lo mismo valdra para espacios
vectoriales sobre IR), se llama producto escalar sobre V a una aplicaci on
, ) : V V I C
(u, v) u, v)
que verica las siguientes propiedades:
i) u
1
+u
2
, v) = u
1
, v) +u
2
, v) para u
1
, u
2
, v V , I C.
ii) u, v
1
+v
2
) = u, v
1
) +u, v
2
) para u, v
1
, v
2
V , I C.
iii) u, v) = v, u) para todo u, v V .
iv) u, u) 0 para todo u V y ademas u, u) = 0 si y solo si u = 0.
8
Se dice que dos elementos u, v V son ortogonales si su producto escalar es 0, y suele
escribirse u v u, v) = 0. Y se dice que un subconjunto de V es ortogonal si son
ortogonales cada par de elementos diferentes de dicho conjunto.
2.1. Series trigonometricas o de Fourier.
En el espacio vectorial de las funciones continuas de un intervalo [a, b] con valores
complejos se puede tomar el producto escalar dado por la f ormula f, g) =
_
b
a
f(x)g(x) dx,
con lo que se tiene que
f g
_
b
a
f(x)g(x) dx = 0.
Si consideramos por ejemplo el intervalo [0, 2] y las funciones e
n
(x) = e
inx
para n ZZ
es facil comprobar que el conjunto de funciones e
n
: n ZZ es un conjunto ortogonal. En
efecto, si n ,= m:
e
n
, e
m
) =
_
2
0
e
inx
e
imx
dx =
_
2
0
e
inx
e
imx
dx =
_
2
0
e
i(nm)x
dx =
e
i(nm)x
n m
_2
0
=
e
i(nm)2
e
0
n m
=
1 1
n m
= 0.
Observemos ademas que todas estas funciones e
n
son peri odicas de perodo 2 ya que
e
n
(x + 2) = e
in(x+2)
= e
inx
e
2ni
= e
inx
1 = e
inx
= e
n
(x).
Supongamos que tenemos otra funcion peri odica de perodo 2 con valores complejos,
f : [a, b] I C, siendo [a, b] el intervalo [0, 2] o bien [, ]. Nos preguntamos si podremos
escribir
f(x) =

c
n
e
inx
(2)
para unos ciertos valores de los coecientes c
n
.
Fourier conjetur o en su tiempo que la respuesta a esta pregunta era armativa, aunque
no todos los matem aticos de la epoca estaban de acuerdo. El problema principal radicaba
en formalizar la idea de suma innita. Hoy en da la igualdad (2) se interpreta en el sentido
de que la suma innita sea una serie convergente cuyo lmite (o suma) coincide con f(x)
para todo valor de x. Es otras palabras, la pregunta viene a decir si
lim
N
_
f(x)
N

n=N
e
inx
_
= 0
para todo x, o sea si f puede ser el lmite de unos determinados polinomios trigonometri-
cos. La respuesta positiva a dicha pregunta no se puede sin embargo garantizar en todos
los casos, como veremos un poco mas adelante.
Denominaremos serie de Fourier a una serie que se obtiene tomando, en el problema
general del analisis armonico que acabamos de ver, las funciones e
inx
: n ZZ como
caractersticas elementales para representar a otras funciones (que deberan ser peri odicas
como las e
n
).
9
Vamos a proceder ahora a calcular el espectro, o sea los coecientes (c
n
) tales que
f(x) =

c
n
e
inx
para todo todo x [, ]. Supongamos ademas que la convergencia de la serie anterior
permite intercambiar los signos de integral y de sumatorio. De esta forma, bas andonos en
la ortogonalidad de las funciones elegidas, al hacer el producto escalar de la funcion f con
cada una de las caractersticas elementales iremos obteniendo los coecientes:
Para calcular el coeciente c
k
basta hacer f, e
k
):
_

f(x)e
ikx
dx =
_

n=
c
n
e
inx
e
ikx
_
dx =

n=
c
n
_

e
i(nk)x
dx
= c
k
_

e
0
dx +

n=k
c
n
_

e
i(nk)x
dx = c
k
2
de donde se obtiene que, para todo k ZZ,
c
k
=
1
2
_

f(x)e
ikx
dx.
2.2. Denicion.
Dada una funci on f integrable en [, ], se dene la serie de Fourier de f como
SF(f) =

n=
c
n
e
inx
siendo
c
n
=
1
2
_

f(x)e
inx
dx
para todo n ZZ, a los que denominaremos coecientes de Fourier de f.
El problema sobre si la serie de Fourier es o no convergente a la funcion f original, o
sobre cu ando converge y de que manera, es decir los problemas de convergencia y repre-
sentacion de las series de Fourier, han estado muy ligados al desarrollo de la historia de
la matematica desde que en 1807 Fourier dio a conocer su teora. El ultimo de los m as
importantes teoremas sobre convergencia de series de Fourier fue publicado en el a no 1966
por L. Carleson, y habla de convergencia en casi todo punto (ver [1], [7] o [21] para m as
informaci on). Nosotros vamos a dar un resultado m as cl asico que se debe a Dirichlet:
2.3. Teorema. Sea f una funci on 2-peri odica y derivable a trozos. Entonces para cada
x IR las sumas parciales de la serie de Fourier de f convergen a
1
2
_
f(x
+
) +f(x

)
_
.
Si f es continua en el punto x, entonces convergen a f(x).
10
2.4. Series de Fourier en senos y cosenos.
Si f es una funci on peri odica de perodo 2 y con valores reales, puede resultar mas
apropiado escribir f como una suma (innita) de combinaciones lineales senos y cosenos,
en lugar de acudir a las exponenciales complejas.
Esto puede conseguirse transformando la suma de serie de Fourier de f en dos sumas,
correspondientes una a los terminos positivos y otra a los negativos, y teniendo en
cuenta que e
inx
= cos(nx) +i sen(nx) para todo x. El desarrollo en serie de Fourier de f
quedara entonces del siguiente modo:
SF(f) =

n=
c
n
e
inx
= c
0
+

n=1
_
c
n
e
inx
+c
n
e
inx
_
= c
0
+

n=1
_
c
n
cos(nx) +c
n
i sen(nx) +c
n
cos(nx) c
n
i sen(nx)
_
= c
0
+

n=1
_
(c
n
+c
n
) cos(nx) +i(c
n
c
n
) sen(nx)
_
.
Si llamamos a
n
= c
n
+c
n
y b
n
= i(c
n
c
n
) para todo n 0, se tiene que
SF(f) =
a
0
2
+

n=1
_
a
n
cos nx +b
n
sen nx
_
y a esta suma le llamaremos serie de Fourier en senos y cosenos de la funci on f.
Nota. Observemos que tal como hemos denido los coecientes a
n
y b
n
, estos pueden
obtenerse de la siguiente forma:
a
n
= c
n
+c
n
=
1
2
_

f(x)e
inx
dx +
1
2
_

f(x)e
inx
dx
=
1
2
_

f(x)
_
e
inx
+e
inx
_
dx =
1
2
_

f(x) 2 cos(nx) dx
=
1

f(x) cos(nx) dx
mientras que
b
n
= i(c
n
c
n
) = i
1
2
_

f(x)e
inx
dx i
1
2
_

f(x)e
inx
dx
=
1
2
_

f(x) i
_
e
inx
e
inx
_
dx =
1
2
_

f(x) i(2i) sen(nx) dx


=
1

f(x) sen(nx) dx.


Resumiendo, la serie de Fourier en senos y cosenos de una funcion f se puede escribir
de la forma
SFSC(f) =
a
0
2
+

n=1
_
a
n
cos nx +b
n
sennx
_
11
donde
a
n
=
1

f(x) cos nxdx y b


n
=
1

f(x) sen nxdx


para todo n 0.
Observese que, tal como hemos deducido al obtener la serie de Fourier en senos y
cosenos de una funci on f, se verica que SF(f) = SFSC(f) cuando una de ellas converge.
Incluso se da la igualdad entre las sumas parciales de ambas series, es decir
N

n=N
c
n
e
inx
=
a
0
2
+
N

n=1
_
a
n
cos nx +b
n
sennx
_
para todo N IN.
2.5. Ejemplo: Vamos a obtener la serie de Fourier para la funcion f(x) = x (denida en
el intervalo [, ] y extendida por periodicidad.
a
n
=
1

xcos nxdx = 0 b
n
=
1

xsen nxdx = (1)


n
2
n
Luego la serie es
SF(f) =

n=1
(1)
n+1
2
n
sin(nx)
2.6. Funciones con perodo distinto de 2.
Para funciones peri odicas con perodo distinto de 2 tambien es posible representarlas
por medio de funciones trigonometricas, tanto como combinaci on de exponenciales com-
plejas como con senos y cosenos: si f es una funci on denida en el intervalo [0, l] y de
perodo l, se llama serie de Fourier de f a la serie
SF(f) =

n=
c
n
e
2inx/l
siendo c
n
=
1
l
_
l
0
f(x)e
2inx/l
dx.
para todo n ZZ. Y an alogamente, el desarrollo en serie de Fourier en senos y cosenos de
f sera
SFSC(f) =
a
0
2
+

n=1
_
a
n
cos
2nx
l
+b
n
sen
2nx
l
_
donde
a
n
=
2
l
_
l
0
f(x) cos
2nx
l
dx y b
n
=
2
l
_
l
0
f(x) sen
2nx
l
dx
para todo n 0. Nosotros sin embargo trabajaremos siempre con funciones periodicas de
perodo 2.
2.7. Fenomeno de Gibbs.
12
Consideremos la funcion f de perodo 2 cuyos valores en el intervalo (, ] son
f(x) =
_

_
1 si < x < 0
1 si 0 < x <
0 si x = 0, .
Su gr aca es una onda cuadrada (ver gura 2). Teniendo en cuenta el teorema 2.3, se
verica que la serie de Fourier de f converge a la funci on en todo punto. Calculando la
serie de Fourier en senos y cosenos de f se tiene por tanto que
f(x) =
4

n=1
sen(2n 1)x
2n 1
para todo x IR.
Figura 2. Onda cuadrada.
En 1898 Michelson y Stratton dise naron un analizador arm onico capaz de obtener
de modo autom atico los 80 primeros coecientes de la serie de Fourier de una funci on y
usaban la suma parcial con esos terminos para reproducir la gr aca de la funci on original.
Al usarlo para la funci on f observaron una separaci on extra na en las proximidades del
punto de salto, que no desapareca al tomar m as terminos (ver guras 3 y 4). Ellos lo
atribuyeron a un fallo de su aparato, y consultaron a Gibbs.

Este encontro la explicaci on,
por lo que a dicho comportamiento se le pas o a denominar fen omeno de Gibbs:
13
Figura 3. Suma parcial con 10 sumandos.
Llamemos S
n
(x) a la suma parcial n-esima de la serie de Fourier de f, es decir
S
n
(x) =
a
0
2
+
n

k=1
_
a
k
cos(kx) +b
k
sen(kx)
_
=
n

k=1
sin((2 k 1)x)
2 k 1
(en las guras 3 y 4 pueden verse las gr acas de S
10
y S
50
). Se puede comprobar que en el
intervalo (0, ) la funci on S
n
tiene puntos crticos en x
m
=
m
n
, m = 1, 2 . . . , n1, que son
maximos locales si m es impar y mnimos locales si m es par. Ademas el maximo absoluto
se alcanza en

n
y
lim
n
S
n
_

n
_
=
2

_

0
sen t
t
dt 1

179.
Es decir, a pesar de que f tiene un salto de longitud 2 en el origen y que S
n
(x) converge a
f(x) para todo punto x, las gr acas de S
n
tienden a aproximarse a un segmento vertical
de longitud aproximadamente igual a 2 1

179 = 2

358.
Figura 4. Suma parcial con 50 sumandos.
3. Transformada discreta de Fourier
Para manejar una funci on en un ordenador suele ser necesario discretizarla, de mane-
ra que se obtienen los valores de la funci on en una cantidad nita de puntos, y se guarda
el conjunto (o la lista) de los pares formados por los puntos elegidos y las im agenes de la
funci on en dichos puntos. Cualquier informaci on que se necesite posteriormente sobre la
funci on habra que obtenerla de la lista almacenada.
La eleccion de los puntos a guardar ser a por tanto fundamental para obtener una
buena representaci on de la funci on. Si no tenemos mas datos sobre la funci on parece que
sera razonable obtener los valores en una cantidad n (lo m as grande posible) de puntos
equiespaciados del intervalo donde nos interese trabajar.
Supongamos que la funci on a discretizar es peri odica de perodo 2. Entonces una
buena opci on puede consistir en guardar los valores de la funci on en n puntos equiespacia-
dos del intervalo [0, 2], concretamente en los puntos x
j
= 2j/n, para j = 0, 1, . . . , n 1.
14
Para no complicar la notaci on, llamaremos de igual forma, f, a la funci on original y a su
discretizacion.
Vamos a considerar ahora la serie de Fourier de la funcion f discretizada. Puesto
que solo tenemos una cantidad nita de puntos, parece l ogico pensar que ahora la repre-
sentacion de f se consiga con una combinacion lineal nita (con igual n umero de sumandos
que la cantidad de puntos elegida) de funciones exponenciales complejas, o sea
f(x)
n1

k=0
A
k
e
ikx
.
Ahora bien, si tenemos en cuenta que s olo conocemos los valores de f en los puntos
x
j
, j = 0, 1, . . . , n 1, deber a ser
f(x
j
) = f
_
2j
n
_
=
n1

k=0
A
k
e
2ijk/n
, j = 0, . . . n 1,
para unos determinados valores A
k
I C, que constituyen el espectro de la funci on f. Para
simplicar la notacion, llamaremos w = e
2i/n
, con lo que la f ormula anterior queda:
f(x
j
) =
n1

k=0
A
k
w
jk
, j = 0, . . . n 1,
Para determinar los coecientes A
k
, por similitud a como lo hacamos con las series
de Fourier, basta tener en cuenta la ortogonalidad de la funciones e
2ijk/n
: en concreto,
para calcular A
m
multiplicamos la anterior igualdad por e
2ijm/n
= w
jm
, obteniendose
f(x
j
)w
jm
=
n1

k=0
A
k
w
j(km)
, j = 0, . . . n 1.
Sumando ahora estas n ecuaciones:
n1

j=0
f(x
j
)w
jm
=
n1

j=0
n1

k=0
A
k
w
j(km)
=
n1

k=0
n1

j=0
A
k
w
j(km)
=
n1

k=0
A
k
n1

j=0
_
w
km
_
j
Ahora, si k ,= m, w
km
es una raz de la unidad distinta de 1, luego
n1

j=0
_
w
km
_
j
= 0,
mientras que para k = m la suma vale 1 + 1 + + 1 = n. Entonces
n1

j=0
f(x
j
)w
jm
= nA
m
y se concluye que
A
m
=
1
n
n1

j=0
f(x
j
)w
jm
=
1
n
n1

j=0
f(x
j
)e
2ijm/n
, m = 0, . . . n 1,
15
de donde se deduce la siguiente denici on:
3.1. Denicion.
Sea f : 0, 1, . . . , n1 I C una aplicacion tal que f(j) = a
j
para todo j = 0, 1, . . . n1.
Se llama transformada discreta de Fourier de f a la funci on

f : 0, 1, . . . , n 1 I C
dada por

f(j) = A
j
, j = 0, 1, . . . n 1, de modo que
a
j
=
n1

k=0
A
k
e
2ijk/n
, j = 0, . . . n 1, (3)
que como acabamos de ver debe ser
A
k
=
1
n
n1

j=0
a
j
e
2ijk/n
, k = 0, . . . n 1. (4)
Puesto que las funciones toman solamente una cantidad nita, n, de valores en unos
puntos prejados, se pueden colocar dichos valores en una lista y denir entonces la trans-
formada discreta de Fourier de una lista de la forma siguiente:
3.2. Denicion.
Sea [a
0
, a
1
, . . . , a
n1
] una lista de n n umeros complejos. Se dene la transformada discreta
de Fourier de dicha lista como otra lista [A
1
, A
2
, . . . , A
n1
] cuyos valores vienen dados por
la f ormula (4). Escribiremos entonces que
TDF([a
0
, a
1
, . . . , a
n1
]) = [A
0
, A
1
, . . . , A
n1
].
De la misma forma se dene la transformada discreta de Fourier inversa, que deno-
taremos TDFI, de la forma TDFI([A
0
, A
1
, . . . , A
n1
]) = [a
0
, a
1
, . . . , a
n1
], donde los a
i
vienen denidos por la f ormula (3).
Claramente, la transformada discreta de Fourier y la transformada inversa son fun-
ciones inversas, es decir, TDF(TDFI(L)) = L y TDFI(TDF(L)) = L para toda lista
L.
3.3. Observaciones.
(1) Si observamos con detenimiento la formula de la transformada discreta de Fourier:
A
k
=
1
n
n1

j=0
a
j
e
2ijk/n
=
1
2
n1

j=0
2
n
f
_
2
n
j
_
e
2ijk/n
se puede ver que no es mas que una suma de Riemann, correspondiente a la partici on
2j/n : j = 0, 1, . . . , n del intervalo [0, 2], de la integral
1
2
_
2
0
f(x)e
ikx
dx,
16
que es exactamente el coeciente c
k
de la serie de Fourier de la funci on f en forma
exponencial compleja.
(2) Las f ormulas de la transformada discreta de Fourier y su inversa son, como puede
comprobarse, bastante similares. De hecho, una misma formula puede servir para
ambas transformaciones, sin m as que tener en cuenta que el conjugado de e
2ijk/n
es
e
2ijk/n
. Concretamente se tiene que
[A
0
, A
1
, . . . , A
n1
] = TDF([a
0
, a
1
, . . . , a
n1
])
[A
0
, A
1
, . . . , A
n1
] =
1
n
TDFI([a
0
, a
1
, . . . , a
n1
]).
3.4. Ejemplo: Si consideramos la lista l = [0, 6, 5, 1], es f acil comprobar, con ayuda de
Maple por ejemplo, que TDFI(l) = [2, 5 5i, 12, 5 + 5i] = l

.
Si ahora aplicamos la funci on inversa, obtendremos evidentemente que TDF(l

) = l.
Por otra parte, si en la lista l

tomamos conjugados y aplicamos TDFI obtendremos:


TDFI([2, 5 + 5i, 12, 5 5i]) = [0, 24, 20, 4]. Dividiendo por 4 en esta lista se llega de
nuevo a la lista l (no es necesario volver a tomar conjugados porque los elementos de l son
n umeros reales). De esta forma se comprueba lo que hemos comentado en la observacion
3.3 (2).
4. Transformada r apida de Fourier
Vamos a entrar ya en el desarrollo del algoritmo de Cooley y Tukey de la transformada
r apida de Fourier. En realidad, lo que nosotros vamos a ver a continuaci on es el algoritmo
de la transformada r apida inversa, pero como vimos en la secci on de la transformada
discreta de Fourier, el paso de uno a otro es sencillo. Por otra parte, la nomenclatura al
respecto no es estandar, y lo que nosotros hemos llamado transformada inversa es para
muchos autores la transformada discreta de Fourier (por ejemplo, en las referencias [2],
[8], [10] y [19] de la bibliografa), mientras que algunos otros colocan el factor
1
n
en la
transformada inversa pero la exponencial con signo negativo en la directa (ver [3], [12],
[14], [16] y [17]).
Antes de describir el algoritmo, veremos un ejemplo ilustrativo, como es el de la mul-
tiplicacion r apida de polinomios
4.1. Multiplicacion de polinomios.
El producto de polinomios de grado alto no es precisamente un problema sencillo desde
el punto de vista computacional. En teora se puede hacer de la forma
_
n

i=0
a
i
x
i
_
_
_
m

j=0
b
j
x
j
_
_
=
n+m

k=0
c
k
x
k
,
con c
k
=

i+j=k
a
i
b
j
. Pero si contamos el n umero total de productos numericos (que es lo
mas costoso del calculo) que hay que efectuar resulta, en el caso m = n,
1 +2 +3 + +n+(n+1) +n+ +2 +1 =
(n + 1)(n + 2)
2
+
(n + 1)n
2
= (n+1)
2
n
2
.
17
Vamos a intentar hacer esta multiplicacion con un n umero menor de productos numeri-
cos, lo que llevar a consigo un coste menor. La idea b asica del razonamiento consiste en
multiplicar, no los coecientes de los polinomios, sino sus valores en una cantidad nita de
puntos. Esta ultima operacion puede llevarse a cabo con solo un producto por cada punto.
El proceso a seguir sera pues el siguiente: en primer lugar evaluar los polinomios (de
grados n y m) en n + m+ 1 puntos, despues hacer los n +m + 1 productos y nalmente
determinar el unico polinomio de grado menor o igual que n+m que pase por esos puntos.
Y todo esto se puede hacer con un coste menor!
Observemos que un polinomio de grado n 1 se puede almacenar:
Por medio de sus n coecientes.
Por sus races, indicando multiplicidad, junto con su coeciente principal.
Por sus valores en n puntos concretos, por ejemplo en las n races n-esimas complejas
de la unidad.
4.2. Ejemplo: El polinomio P(x) = x
3
5x
2
+ 6x podemos guardarlo en forma de lista
de alguna de las maneras siguientes:
Coecientes: [0, 6, 5, 1].
Races: [0, 2, 3, 1] (el 1 nal es el coeciente principal).
Valores en 1, i, 1, i: [2, 5 + 5i, 12, 5 5i] (observemos que, seg un se vio en el
ejemplo 3.4, esta lista es la transformada discreta de Fourier inversa de la lista de los
coecientes).
Habitualmente, los polinomios se dan por medio de los coecientes, pero a nosotros
nos interesan sus valores en unos determinados puntos, por lo que necesitamos una forma
eciente de pasar de una representacion a otra.
4.3. Evaluaci on de polinomios.
Dado un polinomio de grado n 1 con coecientes [a
0
, a
1
, . . . , a
n1
],
P(x) = a
0
+a
1
x +a
2
x
2
+. . . +a
n1
x
n1
,
consideremos las races n-esimas de la unidad w
j
= e
2ij/n
, j = 0, 1, . . . , n 1. La
evaluaci on de P en los w
j
sera
P(w
j
) =
n1

k=0
a
k
w
k
j
=
n1

k=0
a
k
e
2ijk/n
que como se puede observar consiste en aplicar la transformada de Fourier discreta inversa
a la lista [a
0
, a
1
, . . . , a
n1
].
Para evaluar un polinomio se puede hacer directamente, o bien mediante el esquema de
Horner, pero en ambos casos el coste es demasiado elevado (al menos O(n
2
)). Vamos a ver
que se puede conseguir, mediante un algoritmo del tipo divide y vencer as, la evaluacion
del polinomio en las races n-esimas complejas de la unidad con un coste de nlog n.
18
Hag amoslo primero en un caso particular para hacernos una idea de la tecnica general:
tomemos n = 4, es decir un polinomio de grado 3,
P(x) = a
0
+a
1
x +a
2
x
2
+a
3
x
3
,
y vamos a evaluarlo en las races cuartas de la unidad: 1, i, i
2
= 1, i
3
= i.
P(i
j
) = a
0
+a
1
i
j
+a
2
i
2j
+a
3
i
3j
= (a
0
+a
2
i
2j
) + (a
1
i
j
+a
3
i
3j
)
= (a
0
+a
2
i
2j
) +i
j
(a
1
+a
3
i
2j
), j = 0, 1, . . . , 3.
Si nos jamos, a
0
+ a
2
i
2j
es la evaluacion del polinomio de coecientes a
0
y a
2
(de
grado 1) en i
2j
, que es una raz cuadrada de la unidad (de las que s olo hay 2). Y lo mismo
habra que hacer con el polinomio de coecientes a
1
y a
3
. Puesto que las races cuadradas
de la unidad son 1 e i
2
= 1, hay que calcular
a
0
+a
2
a
0
+a
2
i
2
a
1
+a
3
a
1
+a
3
i
2
y despues multiplicar los sumandos impares por i
j
y sumarles los pares, es decir:
j = 0 P(i
0
) = (a
0
+a
2
) + (a
1
+a
3
)
j = 1 P(i
1
) = (a
0
+a
2
i
2
) +i(a
1
+a
3
i
2
)
j = 2 P(i
2
) = (a
0
+a
2
i
4
) +i
2
(a
1
+a
3
i
4
) = (a
0
+a
2
) +i
2
(a
1
+a
3
)
j = 3 P(i
3
) = (a
0
+a
2
i
6
) +i
3
(a
1
+a
3
i
6
) = (a
0
+a
2
i
2
) +i
3
(a
1
+a
3
i
2
).
El n umero total de productos a efectuar es ahora de 8, frente a 16 que se obtendran
por otros procedimientos. Incluso podemos ahorrarnos la mitad de los productos si nos
damos cuenta de que i
2
= 1 y que i
3
= i, con lo que para j = 2 y j = 3 no es necesario
hacer ning un producto nuevo. Esta tecnica se puede llevar a cabo siempre que n sea una
potencia de 2.
Teniendo en cuenta que hacer la transformada discreta de Fourier inversa es equivalente
a evaluar un polinomio en las races n-esimas complejas de la unidad, lo que vamos a obtener
no es ni mas ni menos que un algoritmo para evaluar de manera r apida un polinomio en
las races n-esimas complejas de la unidad.
4.4. Caso particular para potencias de 2.
Por ahora supondremos siempre que n es potencia de 2. El caso general del algoritmo
lo veremos mas adelante. Sea pues n = 2
r
, y sea f un polinomio de grado n 1, f(x) =
n1

k=0
a
k
x
k
. Sus valores en las n races n-esimas complejas de la unidad, w
j
= e
2ij/n
,
j = 0 . . . n 1, son
f(w
j
) =
n1

k=0
a
k
w
k
j
= a
0
+a
1
w
j
+a
2
(w
j
)
2
+ +a
n1
(w
j
)
n1
19
para j = 0, 1, . . . , n 1. Separemos la suma en dos sumandos, colocando por un lado los
terminos de subndice par y por otro los de subndice impar:
f(w
j
) =
n/21

m=0
a
2m
w
2m
j
+
n/21

m=0
a
2m+1
w
2m+1
j
=
n/21

m=0
a
2m
(w
2
j
)
m
+w
j
n/21

m=0
a
2m+1
(w
2
j
)
m
.
Observemos que:
Los coecientes de la primera suma son [a
0
, a
2
, . . . , a
n2
].
Los coecientes de la segunda suma son [a
1
, a
3
, . . . , a
n1
].
Por ser n potencia de 2, w
2
j
, j = 0, 1, . . . n/2 1, son precisamente las races de orden
n/2 de la unidad.
Las potencias de ambas sumas son las mismas, y se trata de la potencia j-esima de las
races complejas de la unidad de orden n/2 = 2
r1
.
El problema se reduce pues a la evaluaci on de dos polinomios, de grado n/2 1, en las
races n/2-esimas de la unidad.
4.5. Observacion. Hay que tener en cuenta un peque no detalle: pongamos
f(w
j
) = Q
1
(j) +w
j
Q
2
(j)
donde Q
1
y Q
2
son las dos sumas en que ha quedado descompuesta la evaluacion f(w
j
),
que como hemos visto son sendos polinomios de grado n/2 1. Puesto que solo hay
n/2 races n/2-esimas de la unidad, con la evaluacion de dichos polinomios obtendremos
solamente los valores f(w
j
) para j = 0, 1, . . . , n/2 1. Para la obtenci on de f(w
j
) con
n/2 j n 1 hay que tener en cuenta lo siguiente:
Q
1
(j) =
n/21

m=0
a
2m
(w
2
j
)
m
=
n/21

m=0
a
2m
_
(w
jn/2
)
2
_
m
ya que (w
jn/2
)
2m
= e
2i(jn/2)2m/n
= e
2ij2m/n
e
2im
= (w
j
)
2m
1 = (w
j
)
2m
. Por lo
tanto Q
1
(j n/2) = Q
1
(j).
An alogamente se prueba que Q
2
(j n/2) = Q
2
(j) si n/2 j n 1, con lo que se
obtiene que
f(w
j
) = Q
1
(j n/2) +w
j
Q
2
(j n/2)
para j = n/2, . . . , n1. Si ademas tenemos en cuenta que w
j
= w
j+n/2
, se concluye que
f(w
j+n/2
) = Q
1
(j) w
j
Q
2
(j)
para todo j = 0, 1, . . . , n/2 1.
Resumiendo, para obtener la evaluaci on del polinomio f, de grado n 1, en las races
n-esimas de la unidad, w
j
, haremos
f(w
j
) = Q
1
(j) +w
j
Q
2
(j), f(w
j+n/2
) = Q
1
(j) w
j
Q
2
(j)
20
para todo j = 0, 1, . . . , n/2 1, siendo Q
1
(j) y Q
2
(j) el resultado de evaluar sendos
polinomios de grado n/2 1 en las races n/2-esimas de la unidad, w
2
j
, concretamente:
Q
1
(j) =
n/21

m=0
a
2m
(w
2
j
)
m
, Q
2
(j) =
n/21

m=0
a
2m+1
(w
2
j
)
m
.
En esto consiste el algoritmo de Cooley-Tukey, que pasamos ya a describir:
4.6. Algoritmo IFFT para la evaluaci on rapida de polinomios.
entrada:
n n umero entero, potencia de 2.
a lista de n n umeros complejos, a := [a[0], . . . , a[n 1]]
si n = 1, entonces A[0] := a[0]
en otro caso
listapares := [a[0], a[2], . . . , a[n 2]]
listaimpares := [a[1], a[3], . . . , a[n 1]]
u := IFFT(n/2, listapares)
v := IFFT(n/2, listaimpares)
para j desde 0 hasta n/2 1 hacer
A[j] := u[j] + exp(2ij/n) v[j]
A[j +n/2] := u[j] exp(2ij/n) v[j]
salida:
IFFT(n, a) := [A[0], A[1], . . . , A[n 1]].
4.7. Ejemplo: Vamos a aplicar el algoritmo IFFT para n = 4 y la lista [0, 6, 5, 1].
listapares := [0, 5], listaimpares := [6, 1].
Calculamos IFFT(2, [0, 5]):
listapares := [0], listaimpares := [5]
IFFT(1, [0]) := [0], IFFT(1, [5]) := [5],
u := [0], v := [5].
Para j = 0, A[0] := u[0] +e
0
v[0] = 5 y A[1] := u[0] v[0] = 5.
Luego IFFT(2, [0, 5]) := [5, 5]. Y por lo tanto u := [5, 5]
Calculamos ahora IFFT(2, [6, 1]):
listapares := [6], listaimpares := [1]
IFFT(1, [6]) := [6], IFFT(1, [1]) := [1],
u := [6], v := [1].
Para j = 0, A[0] := u[0] +v[0] = 7 y A[1] := u[0] v[0] = 5.
Luego IFFT(2, [6, 1]) := [7, 5]. Y por lo tanto v := [7, 5]
21
Y calculamos nalmente los valores de la lista de salida:
Para j = 0, A[0] := u[0] +v[0] = 5 + 7 = 2 y A[2] := u[0] v[0] = 5 7 = 12.
Para j = 1, A[1] := u[1] +e
2i/4
v[1] = 5 + 5i y A[3] := u[1] e
2i/4
v[1] = 5 5i.
Salida: IFFT := [2, 5 + 5i, 12, 5 5i].
4.8. Coste de la evaluacion rapida.
Puesto que de las operaciones a realizar para aplicar al algoritmo de Cooley y Tukey la
mas costosa es el producto de n umeros complejos, vamos a medir la complejidad en funcion
del n umero de dichos productos.
Sea por tanto y(k) el n umero de multiplicaciones complejas necesarias para calcular
IFFT sobre una lista de tama no n = 2
k
. Entonces, el c alculo de IFFT(n/2, listapares)
supondr a y(k 1) multiplicaciones complejas, y otras tantas seran necesarias para obtener
IFFT(n/2, listaimpares). Adem as, el algoritmo consta de un bucle para llegar a la lista
de salida, para el cual se precisan n/2 = 2
k1
multiplicaciones. Es decir
y(k) = 2y(k 1) + 2
k1
con la condicion inicial y(0) = 0, pues cuando n = 1 no es necesario multiplicar nada.
Resolvemos la ecuacion en diferencias: puesto que es lineal de orden 1, resolvemos
primero la homogenea y(k) = 2y(k 1), cuya soluci on general es y(k) = 2
k
c, con c
constante. Aplicando el metodo de variaci on de las constantes, buscamos una sucesion
c(k) tal que y(k) = 2
k
c(k) sea solucion de la ecuaci on completa. Se obtiene
2
k
c(k) = 2 2
k1
c(k 1) + 2
k1
c(k) = c(k 1) +
1
2
c(k) = c(0) +
_
c(1) c(0)
_
+ +
_
c(n) c(n 1)
_
= c(0) +
k
2
.
Imponiendo la condici on inicial se tiene que y(k) = k2
k1
. Y poniendolo en funci on de
n = 2
k
, el coste resulta ser igual a
n
2
log
2
n.
4.9. Proceso inverso.
El algoritmo IFFT permite el paso de la representacion de un polinomio por medio de sus
coecientes a la representacion por sus valores en las races n-esimas de la unidad (cuando
n es potencia de 2).
Veamos ahora como realizar el proceso inverso, es decir obtener los coecientes a partir
de los valores en las races n-esimas de la unidad.
O sea, dados f(w
j
) = A
j
para j = 0, 1, . . . n1, se trata de buscar a
k
, k = 0, 1, . . . n1
de modo que
A
j
=
n1

k=0
a
k
e
2ijk/n
.
22
Es decir, hay que hacer la transformada discreta de Fourier de la lista [A
0
, A
1
, . . . , A
n1
].
Por lo tanto ser a
a
k
=
1
n
n1

j=0
A
j
e
2ijk/n
, k = 0, . . . n 1.
para todo k = 0, 1, . . . n 1.
Si tenemos en cuenta la obervaci on 3.3 (2), para calcular [a
0
, a
1
, . . . , a
n1
] basta aplicar
el algoritmo IFFT a la lista [A
0
, A
1
, . . . , A
n1
], y en los elementos de la lista obtenida
hacer conjugados y dividir por n.
4.10. Observacion. No vamos a detallar el algoritmo de la transformada r apida de
Fourier (FFT), puesto que como hemos visto se puede obtener de manera casi inmediata
aplicando el algoritmo IFFT.
Pero hagamos notar que en ocasiones el paso a conjugados no es una operacion trivial
(Maple, por ejemplo, se puede complicar si no tiene dado el n umero complejo en forma
bin omica). Por tanto, puede ser preferible denir un nuevo algoritmo FFT. En tal caso, la
descripcion de dicho algoritmo sera exactamente igual a la de IFFT, a nadiendo un signo
negativo en el exponente de las exponenciales complejas, y dividiendo por 2 los elementos
de la lista de salida para n > 1.
Pregunta para el lector: por que se divide al nal por 2 y no por n?
4.11. Producto de polinomios.
Estamos ya en condiciones de obtener la multiplicaci on de polinomios de manera rapida,
aplicando el algoritmo de Cooley-Tukey. Puesto que solamente hemos visto este algoritmo
en el caso de que n sea potencia de 2, para poder aplicarlo a cualquier polinomio habr a
que usar lo que se conoce como tecnica de relleno, que consiste simplemente en a nadir los
ceros que sean necesarios a los coecientes del polinomio hasta llegar a un orden n1 con
n potencia de 2.
Sean pues f y g dos polinomios, de grado n y m respectivamente, dados por las listas
de sus coecientes. Los pasos a seguir para obtener la lista de los coecientes de fg son
los siguientes:
1. Se considera el menor n umero entero N, potencia de 2 y mayor o igual que n +m+1.
2. Se a naden ceros a las listas de coecientes de f y de g hasta que tengan tama no N.
3. Se aplica el algoritmo IFFT a cada una de las listas anteriores, obteniendose las eva-
luaciones de f y g en las races N-esimas de la unidad.
4. Se hacen los productos termino a termino de las dos listas obtenidas, es decir los
productos f(w)g(w) para w raz N-esima de la unidad.
5. Se obtienen los coecientes de fg a partir de los valores en sus races N-esimas de la
unidad.
El coste total de todo el proceso, medido en n umero de multiplicaciones complejas,
es de O(N log
2
N), ya que en los pasos 3 y 5 hay que aplicar un total de tres veces el
algoritmo IFFT (u otro similar), con coste
N
2
log
2
N, y en el paso 4 solamente hay que
hacer N multiplicaciones complejas.
23
4.12. Observaciones.
(1) La implementaci on del algoritmo de la multiplicaci on r apida de polinomios, o del
IFFT, en determinados lenguajes de programaci on suele comenzar con la reordenaci on
de la lista de los coecientes de entrada. Para ello se suele usar el metodo llamado del
bit inverso (consultar [6] por ejemplo). Pero en Maple no es necesario hacer nada de
eso, pues el acceso a los elementos de una lista l se puede hacer con la instrucci on l[i],
y no es mas f acil acceder al primer elemento que a cualquier otro.
(2) Si los coecientes de los polinomios f y g de entrada son reales (cosa bastante fre-
cuente), se puede aplicar el algoritmo IFFT simultaneamente a las listas de sus res-
pectivos coecientes, de la siguiente forma: sean [x
0
, x
1
, . . . , x
n1
], [y
0
, y
1
, . . . , y
n1
]
con x
j
, y
j
IR, y sea z
j
= x
j
+iy
j
para j = 0, 1, . . . , n 1. Supongamos que
[Z
0
, Z
1
, . . . , Z
n1
] = IFFT(n, [z
0
, z
1
, . . . , z
n1
]),
[X
0
, X
1
, . . . , X
n1
] = IFFT(n, [x
0
, x
1
, . . . , x
n1
]),
[Y
0
, Y
1
, . . . , Y
n1
] = IFFT(n, [y
0
, y
1
, . . . , y
n1
]).
Entonces se verica que
X
k
=
1
2
_
Z
k
+Z
nk
_
Y
k
=
1
2i
_
Z
k
Z
nk
_
para k = 0, 1, . . . , n 1, siendo Z
n
= Z
0
. De todos modos, ya hemos avisado de que
en Maple el c alculo de conjugados no siempre es trivial, por lo que este intento de
simplicacion tal vez no sea ventajoso.
4.13. Caso general.
Supongamos que tenemos una lista cuya longitud no es una potencia de 2 (o una
funci on discretizada en una cantidad de puntos no potencia de 2), y que queremos obtener
la transformada discreta de Fourier, o la transformada inversa, de dicha lista. Si la tecnica
del relleno es v alida (como hemos visto que se puede hacer para el producto de polinomios),
se puede aplicar el algoritmo descrito en la seccion anterior.
Pero en algunas ocasiones no es aceptable a nadir ceros. Por ejemplo, si lo que queremos
es simplemente evaluar el polinomio en la races n-esimas de la unidad, y n no es potencia
de 2, al a nadir ceros hasta obtener N > n, con N potencia de 2, y aplicar el IFFT,
conseguiramos la evaluacion del polinomio (eso s de manera r apida) en las races N-
esimas de la unidad, pero como N ,= n, las races no son las mismas.
Vamos a ver entonces como se puede conseguir un algoritmo IFFT para una lista con
longitud arbitraria (o lo que es lo mismo, para evaluar un polinomio de grado arbitrario,
n 1, en las races n-esimas de la unidad).
Cuando n es potencia de 2, el procedimiento consiste en ir dividiendo la lista en dos
partes y aplicar el algoritmo a cada una de ellas. Pues aqu, lo que podemos hacer es
descomponer el n umero n de elementos de la lista en producto de dos n umeros, n = r
1
r
2
,
y descomponer la lista en r
1
listas de r
2
elementos (o al reves), y plantear un algoritmo
recursivo con la misma idea del anterior.
24
Evidentemente, si n es un n umero primo, el metodo no sirve pues no se puede descom-
poner. En tal caso, no quedar a mas remedio que hacer la evaluaci on directamente (o con
ayuda del esquema de Horner).
Sea pues f un polinomio de grado n 1, con n = r
1
r
2
. Entonces todo entero s,
0 s n1, se puede escribir de manera unica de la forma s = tr
1
+k con 0 t r
2
1
y 0 k r
1
1. Sea w
n
= e
2i/n
. Las races n-esimas complejas de la unidad seran
entonces w
j
n
, para j = 0, 1, . . . , n 1. La evaluacion en ellas de f sera:
f(w
j
n
) =
n1

s=0
a
s
(w
j
n
)
s
=
r
1
1

k=0
r
2
1

t=0
a
tr
1
+k
w
jtr
1
+jk
n
=
r
1
1

k=0
_
r
2
1

t=0
a
tr
1
+k
w
jtr
1
n
_
w
jk
n
.
Ahora bien, w
jtr
1
n
= e
2ijtr
1
/n
= e
2ijt/r
2
, que es una raz r
2
-esima de la unidad, y que
podemos escribir w
jt
r
2
. Tenemos as que
f(w
j
n
) =
r
1
1

k=0
_
r
2
1

t=0
a
tr
1
+k
w
jt
r
2
_
w
jk
n
=
r
1
1

k=0
c
k
(j)w
jk
n
donde c
k
(j) =
r
2
1

t=0
a
tr
1
+k
w
jt
r
2
para 0 k r
1
1 y 0 j n 1, que es la evaluaci on
de un polinomio de grado r
2
1 en las races r
2
-esimas de la unidad, por lo que se puede
calcular aplicando el mismo procedimiento de manera recursiva. Ademas, para cada k jo,
se tiene que c
k
(j + r
2
) = c
k
(j). Luego basta calcular c
k
(j) para j = 0, 1, . . . , r
2
1 y se
tendr a para todo j = 0, 1, . . . , n 1.
Veamos ya como es el algoritmo de Cooley-Tukey para una lista con una cantidad
arbitraria de elementos:
4.14. Algoritmo IFFT (caso general).
entrada:
n n umero entero
a lista de n n umeros complejos, a := [a[0], . . . , a[n 1]]
si n es primo entonces
para j desde 0 hasta n 1 hacer
A[j] :=
n1

k=0
a[k]w
jk
n
en otro caso
descomponer n = r
1
r
2
(# luego veremos como hacerlo)
para k desde 0 hasta r
1
1 hacer
c
k
:= IFFT(r
2
, [a
k
, a
r
1
+k
, . . . , a
(r
2
1)r
1
+k
])
para j desde 0 hasta n 1 hacer
25
A[j] :=
r
1
1

k=0
c
k
[j mod r
2
]w
kj
n
salida:
IFFT(n, a) := [A[0], A[1], . . . , A[n 1]].
4.15. Complejidad.
Vamos a estudiar la complejidad del algoritmo general de Cooley-Tukey, y al igual que
lo hemos hecho antes, lo haremos contando el n umero de multiplicaciones complejas que
requiere para n datos de entrada.
Llamemos g(n) a dicho n umero. Si descomponemos n = r
1
r
2
, para cada k jo
calculamos los r
2
valores de c
k
(j), y como aplicamos el mismo algoritmo para calcular
cada c
k
, y k toma r
1
valores distintos, ser an necesarias r
1
g(r
2
) multiplicaciones. Una vez
obtenidos los c
k
(j), el calculo de cada f(w
j
n
) requiere r
1
1 productos m as. Como hay
que calcular n = r
1
r
2
valores, seran r
1
r
2
(r
1
1) productos. Es decir
g(n) = r
1
g(r
2
) +r
2
1
r
2
r
1
r
2
.
Como se observa, la complejidad depende de la factorizaci on n = r
1
r
2
elegida, de modo
que se puede buscar la factorizacion que minimice el valor:
g(n) = min
r
1
r
2
=n
r
1
g(r
2
) +r
2
1
r
2
r
1
r
2
.
Si p es primo, la unica factorizaci on es p = p 1, y se obtiene g(n) = p(p 1), que es lo
mismo que se obtiene por el metodo directo. En general, se factoriza y se usa la f ormula
recurrente hasta llegar a un primo.
Habitualmente, el estudio formal se realiza escribiendo g(n) = nh(n) donde
h(n) =
_
min
d
_
h
_
n
d
_
+d
_
1 si n no es primo
n 1 si n es primo
donde ahora el mnimo se toma sobre los divisores de n, distintos de n y de 1.
4.16. Ejemplo: Para n = 15 la funci on h vale
h(15) = min
d
h(15/d) +d 1 = minh(5) + 3, h(3) + 5 1
= min7, 7 1 = 6
Y por lo tanto g(n) = 15 6 = 90.
En general se verica (aunque no es f acil de probar) que si n = p

1
1
p

1
1
p

s
s
es la
descomposicion en factores primos de n, entonces
h(n) =
1
(p
1
1) +
2
(p
2
1) + +
s
(p
s
1)
y el mnimo se alcanza tomando un divisor d primo.
26
4.17. Teorema. La mejor eleccion de la factorizaci on n = r
1
r
2
para que el algoritmo
IFFT tenga complejidad mnima es tomar r
1
un divisor primo de n.
En tal caso, el n umero de multiplicaciones complejas es
g(n) = n
_

1
(p
1
1) +
2
(p
2
1) + +
s
(p
s
1)
_
,
siendo n = p

1
1
p

1
1
p

s
s
la descomposicion en factores primos de n.
En el caso particular de que sea n = 2
r
, entonces se tiene que h(n) = r(2 1) = r =
log
2
n, de donde g(n) = nlog
2
n. (Observemos que en el algoritmo general no es posible
evitar la mitad de las multiplicaciones complejas del bucle nal, por lo cual aplicando este
nos ha salido un mayor n umero de operaciones que cuando aplic abamos el algoritmo en el
caso particular para potencias de 2.)
La siguiente tabla muestra la complejidad del algoritmo para los primeros valores de n,
junto con los valores de n
2
, que era la complejidad de la transformada discreta sin utilizar
el algoritmo de la transformada r apida.
n g(n) n
2
2 2 4
4 8 16
6 18 36
8 24 64
10 50 100
16 64 256
20 120 400
25 200 625
32 160 1 024
50 450 2 500
100 1 000 10 000
256 2 048 65 536
500 7 000 250 000
512 4 608 262 144
1 000 15 000 1 000 000
1 024 10 240 1 048 576
2 000 32 000 4 000 000
5 000 95 000 25 000 000
10 000 200 000 100 000 000
1 000 000 30 000 000 1 000 000 000 000
5. La transformada r apida de Fourier con aritmetica modular
27
Hacer transformadas de Fourier con aritmetica exacta puede dar lugar a expresiones
muy grandes, difcilmente manejables, y muy complicadas para ser simplicadas. En
Maple, por ejemplo, es normal tener problemas al aplicar el algoritmo de Cooley y Tukey
para multiplicar polinomios de grados del orden de 50 o superiores, especialmente a la
hora de simplicar el resultado nal, cosa que es preciso hacer si queremos saber cual es
en realidad el resultado.
Una posible solucion es trabajar con aritmetica aproximada, aunque tampoco es muy
razonable si queremos por ejemplo multiplicar polinomios con coecientes enteros.
Otra soluci on, que puede ser m as apropiada para el producto de polinomios con coe-
cientes enteros, es la de sustituir el cuerpo I C de los n umeros complejos por un cuerpo
nito.
Supongamos por ejemplo que tenemos que multiplicar dos polinomios de segundo
grado:
P(x) = a
0
+a
1
x +a
2
x
2
, Q(x) = b
0
+b
1
x +b
2
x
2
(su producto ser a un polinomio de grado 4). Consideramos entonces las listas de sus
coecientes [a
0
, a
1
, a
2
, 0, 0] y [b
0
, b
1
, b
2
, 0, 0]. Si estamos seguros de que todos los coecientes
del producto van a estar entre 0 y 30, podemos trabajar en el cuerpo ZZ
31
y dejar que 2
juegue el papel de raz quinta de la unidad.
Se obtienen entonces las evaluaciones de ambos polinomios en las potencias de 2:
2
0
= 1, 2
1
= 1, 2
2
= 4, 2
3
= 8 y 2
4
= 16, que son todos ellos races quintas de 1 en ZZ
31
.
Sea A
j
= P(2
j
) y B
j
= Q(2
j
) para j = 0, 1 . . . 4.
A
j
=
_
4

k=0
a
k
2
jk
_
mod 31, B
j
=
_
4

k=0
b
k
2
jk
_
mod 31.
Despues se multiplican termino a termino los valores obtenidos y se aplica la transformada
discreta para obtener los coecientes c
k
del producto
c
k
=
_
_
1
5
4

j=0
A
j
B
j
2
jk
_
_
mod 31,
teniendo en cuenta que 2
k
= 2
5k
.
En realidad, el ejemplo nos sirve para saber como funciona esta tecnica, pero no es
muy signicativo ya que con listas de 5 puntos, que es un n umero primo, no merece la
pena usar el algoritmo de Cooley-Tukey. Veamos c omo podemos hacerlo en general.
5.1. Denicion.
Un elemento w de un cuerpo F se dice que es una raz n-esima primitiva de la unidad si
w
n
= 1 y w
k
,= 1 para todo k = 1, 2, . . . , n 1.
Si n es una raz n-esima primitiva de la unidad, entonces 1, w, w
2
, . . . , w
n1
son n
races n-esimas de la unidad distintas, y ademas, si n es par se verica que w
2
es una raz
n/2-esima primitiva de la unidad y que w
n/2
= 1, de donde se deduce que w
n/2+j
= w
j
para j = 0, 1, . . . , n/2 1.
28
Por lo tanto, en el algoritmo de la transformada r apida de Fourier se puede sustituir
la raz n-esima compleja de la unidad e
2i/n
por w.
Si adem as trabajamos en un cuerpo ZZ
p
con p primo, tenemos la ventaja de que al ser
un cuerpo nito, la cantidad de elementos a utilizar es limitada, y por muy complicadas
que sean las operaciones a realizar siempre el resultado ha de ser uno de los elementos
del cuerpo. Por otra parte, Maple tiene capacidades mas que sucientes para trabajar
con aritmetica modular, por lo que no habra que complicar apenas los algoritmos o los
procedimientos que hemos usado para trabajar en I C.
Si tenemos el cuerpo ZZ
p
en el que hemos de trabajar y la raz n-esima primitiva de la
unidad, w, el algoritmo, para el caso de que n sea potencia de 2, sera
5.2. Algoritmo IFFT (con aritmetica modular, para potencias de 2).
entrada:
n n umero entero, potencia de 2.
a lista de n n umeros complejos, a := [a[0], . . . , a[n 1]].
p n umero entero (primo).
w n umero entero (raz n-esima primitiva de la unidad en ZZ
p
).
si n = 1, entonces A[0] := a[0]
en otro caso
listapares := [a[0], a[2], . . . , a[n 2]]
listaimpares := [a[1], a[3], . . . , a[n 1]]
u := IFFT(n/2, listapares, p, w
2
)
v := IFFT(n/2, listaimpares, p, w
2
)
para j desde 0 hasta n/2 1 hacer
A[j] := u[j] +w
j
v[j] mod p
A[j +n/2] := u[j] w
j
v[j] mod p
salida:
IFFT(n, a, p, w) := [A[0], A[1], . . . , A[n 1]].
Lo que s puede signicar un problema es el encontrar el cuerpo donde trabajar, y una
raz primitiva w de ese cuerpo. Nos puede servir de utilidad para ello el siguiente resultado,
que se puede encontrar en [8].
5.3. Teorema. El cuerpo nito ZZ
p
tiene una raz n-esima primitiva de 1 si y solo si p1
es m ultiplo de n.
Por ejemplo, 41 es un n umero primo, por lo que ZZ
41
es un cuerpo y en ZZ
41
existen
races octavas primitivas de la unidad, ya que 40 es m ultiplo de 8. Para obtener un raz
primitiva de orden 8, podemos ayudarnos de Maple, pidiendole, por ejemplo, que calcule
las potencias s
8
(modulo 41) para 0 s 20. Para aqellos s que veriquen la ecuacion
s
8
= 1, se pide la secuencia s
j
para j = 1..7, y nos quedamos con el primer s tal que en
29
dicha secuencia no aparezca el 1. En este caso se puede comprobar que 14 es una raz
octava primitiva de 1 en ZZ
41
.
Veamos con un ejemplo concreto como se pueden multiplicar dos polinomios con ayuda
de la aritmetica modular.
5.4. Ejemplo: Sean P(x) = 3x
3
+ x
2
+ 4x + 1 y Q(x) = x
3
+ 2x
2
+ 5. Puesto que
los grados de P y Q suman 6, podemos tomar n = 8 y trabajar con races octavas de la
unidad. Observemos que la suma de productos entre coecientes de P y Q nunca pasa de
40, por lo que podemos considerar P y Q polinomios sobre ZZ
41
, y el producto ser a tambien
un polinomio en ZZ
41
. No hay por tanto ning un problema con trabajar en ZZ
41
. Ademas
ya hemos comprobado que 14 es un raz primitiva de orden 8 en ZZ
41
. Tomemos pues las
listas
a := [1, 4, 1, 3, 0, 0, 0, 0] b := [5, 0, 2, 1, 0, 0, 0, 0].
Evaluamos los polinomios en las races de la unidad 1, 14, 14
2
, . . . , 14
7
(en ZZ
41
),
obteniendose respectivamente
A := [9, 39, 32, 40, 36, 27, 9, 21] B := [8, 25, 12, 37, 6, 31, 35, 9].
Multiplicando las listas A y B termino a termino, en ZZ
41
, resulta
AB := [31, 32, 15, 14, 11, 17, 28, 25].
Finalmente hacemos la transformada discreta de Fourier de la lista AB y se obtiene
[5, 20, 7, 24, 6, 7, 3, 0], lo que signica que el producto de los polinomios dados es
P(x)Q(x) = 3x
6
+ 7x
5
+ 6x
4
+ 24x
3
+ 7x
2
+ 20x + 5.
5.5. Observaciones.
(1) Si los coecientes de los polinomios dados son enteros pero no todos positivos, tambien
se puede hacer su producto utilizando el algoritmo de la transformada r apida de Fourier
con aritmetica modular. Basta tomar un primo p sucientemente grande que nos
permita asegurar que los elementos mayores que (p 1)/2 corresponden a coecientes
negativos, por lo que habra que restarles p en la solucion nal.
(2) Para aplicar el algoritmo de la transformada r apida de Fourier con aritmetica modular
no es estrictamente necesario que p sea primo, y por lo tanto ZZ
p
un cuerpo. Se puede
trabajar con un anillo ZZ
m
con unas ciertas condiciones (en [2] se pueden encontrar
esas codiciones, as como una forma de encontrar un m que las cumpla y una raz de
la unidad adecuada en ZZ
m
).
5.6. Multiplicacion de n umeros grandes.
Para nalizar, hagamos un comentario sobre otra de las aplicaciones de la transformada
r apida de Fourier, que esta ademas bastante relacionada con la multiplicacion r apida de
polinomios. Se trata de la aritmetica de multiprecision, y en particular de la multiplicaci on
de n umeros enteros grandes.
30
La idea del metodo en cuestion consiste en representar un n umero entero dado (en
una cierta base b) por medio de un polinomio p de manera que p(b) sea precisamente el
n umero dado. De esta forma, para multiplicar dos n umeros se multiplican los polinomios
correspondientes (con ayuda de la transformada r apida de Fourier) y despues se obtiene
el valor del polinomio producto en b.

Ese sera exactamente el producto de los n umeros
dados.
Para conocer mas detalles sobre este metodo se puede consultar [2].
31
BIBLIOGRAF

IA
[1] Apostol, T.: Analisis Matem atico (segunda edici on). Reverte, 1989.
[2] Brassard, G.; Bratley, P.: Algorithms. Theory and Practice. Prentice-Hall, 1988.
[3] Brigham, E.O.: The Fast Fourier Transform and its applications. Prentice-Hall,
1988.
[4] Cartwright, M.: Fourier Methods for mathematicians, scientists and engineers. El-
lis Horwood, 1990.
[5] Cooley, J.W.; Tukey J.W.: An Algorithm for the Machine Calculation of Complex
Fourier Series, Math. Comp., 19 (1965), pp. 297-301.
[6] Cormen, T.H.; Leiserson, C.E.; Rivest, R.L.: Introduction to Algorithms. The
MIT Press, 1990.
[7] Gasquet, C.; Witomski, P.: Fourier Analysis and Applications. Filtering, Numer-
ical Computation, Wavelets. Springer Verlag, 1999.
[8] Geddes, K.O.; Czapor, S.R.; Labahn, G.: Algorithms for Computer Algebra.
Kluwer Academic Publishers, 1992.
[9] Guzm an, M.: Impactos del an alisis arm onico. Discurso de ingreso en la Real Academia
de Ciencias Exactas, Fsicas y Naturales. Madrid, 1983.
[10] Jerri, A.J.: Integral and Discrete Transforms with applications and error analysis.
Marcel Dekker, 1992.
[11] Knuth, D.E.: The Art of Computer Programming. Vol 2: Seminumerical Algorithms
(third edition). Addison-Wesley, 1998.
[12] Kronsj, L.: Algorithms. Their complexity and eciency (second edition). John Wiley
and Sons, 1987.
[13] Oppenheim, A.V.; Willsky, A.S.: Sistemas y se nales. Prentice-Hall, 1994.
[14] Priemer, S.: Introductory Signal Analysis. World Scientic, 1991.
[15] Smith, W.W.; Smith, J.M.: Handbook of Real-Time Fast Fourier Transforms. Al-
gorithms to Product Testing. IEEE Press, 1995.
[16] Soliman, S.S.; Srinath, M.D.: Se nales y sistemas continuos y discretos (segunda
edici on). Prentice-Hall, 1999.
[17] Stearns, S.D.; Hush, D.R.: Digital Signal Analysis. Prentice-Hall, 1990.
[18] Strang, G.: Linear Algebra and its applications. Harcourt Brace Jovanovich, 1988.
[19] Wilf, H.S.: Algorithms and Complexity. Prentice-Hall, 1986.
[20] Zippel, R.: Eective Polynomial Computation. Kluwer Academic Publishers, 1993.
[21] Zygmund, A.: Trigonometric Series. Second Edition (Vol. I & II Combined). Cam-
bridge University Press, 1990.
32

También podría gustarte