Interpolación trigonométrica usando la Transformada Discreta de Fourier

Introducción


La Transformada Discreta de Fourier (TDF) transforma una sucesión de n números complejos 
{x0,x1,,xN1}
en otra sucesión de números complejos
{X0,X1,,XN1}
por medio de la fórmula
Xk=1Nn=0N1xneik2πNn(k=0,1,,N1)(1)=1Nn=0N1xj[cos(k2πNn)isin(k2πNn)]
La segunda expresión se obtuve usando la fórmula de Euler eit=cost+isint.

Veamos un ejemplo sencillo. Consideremos la siguiente sucesión de números complejos:
x={1,2i,i,1+2i}

Al aplicar la TDF (1) tenemos:
(2)X0=14[1ei2π00/4+(2i)ei2π01/4+(i)ei2π02/4+(1+2i)ei2π03/4]=14(2)=12X1=14[1ei2π10/4+(2i)ei2π11/4+(i)ei2π12/4+(1+2i)ei2π13/4]=14(22i)=1212iX2=14[1ei2π20/4+(2i)ei2π21/4+(i)ei2π22/4+(1+2i)ei2π23/4]=14(2i)=12iX3=14[1ei2π30/4+(2i)ei2π31/4+(i)ei2π32/4+(1+2i)ei2π33/4]=14(4+4i)=1+i

De esta forma, obtenemos la sucesión
X={12,1212i,12i,1+i}.
Esto lo podemos escribir de forma abreviada como
F(x)=X.

Muy bien, a partir de una sucesión de números complejos dada x hemos obtenido otra sucesión de números complejos X. Pero, ¿esto de qué nos sirve? Desafortunadamente, el ejemplo anterior no da pistas suficientes para poder responder esta pregunta. Lo que necesitamos aquí es dar contexto a los datos, es decir, necesitamos mencionar de dónde proviene la sucesión x para poder dar significado a la sucesión X obtenida por medio de la TDF. Para este propósito, analicemos el problema de aproximar una función real definida en un intervalo [a,b] usando lo que se conoce como interpolación trigonométrica.

Aproximación de funciones reales con funciones trigonométricas


Consideremos el siguiente problema: Sea f:[0,2π]R una función definida por
(3)f(x)=2xx2π.



Dados n valores de la función f, ¿es posible aproximar f por medio de un polinomio trigonométrico definido en el mismo intervalo [0,2π]?

Por supuesto, la respuesta es afirmativa. De hecho, este problema se puede resolver usando diferentes métodos de interpolación. En particular, usaremos la TDF para calcular un polinomio trigonométrico cuyos valores coincidirán en su mayoría con los valores de f.

Nuestro objetivo aquí es aproximar la función f usando funciones trigonométricas sen y cos. Para ello usaremos la interpolación trigonométrica en el plano complejo, conocida también como suma de Fourier, para determinar p(x) tal que
(4)f(x)p(x)=c0+c1eix+c2e2ix++cn1e(n1)ix=k=0N1ckeikx.
Los valores ck se denominan coeficientes de Fourier. 

Ahora, dado que nuestra función (3) es real, solo necesitamos usar la parte real de p(x), es decir
(5)f(x)p(x)=c0+c1cosx+c2cos2x++cn1cos(n1)x.
donde cj son constantes reales y el símbolo significa que la función f(x) y la suma p(x) coinciden en los puntos:
f(xj)=p(xj)j=0,1,2,n1.

Para simplificar aún más el problema dividiremos el intervalo 0x2π en partes iguales, es decir, usaremos la partición
x0=0,x1=2πN,x2=4πN,,xj=2jπN,,xN1=2(N1)πN.
De esta forma, si conocemos N valores de la función f
x={f0(x0),f1(x1),,fN1(xN1)},
entonces tenemos que calcular los coeficientes de Fourier
X={c0,c1,,cN1}.
Es aquí donde entra en acción la magia de la Transformada Discreta de Fourier. 

Por ejemplo, para N=4, tenemos como datos iniciales
(6)x={f0(0),f1(π2),f2(π),f3(3π2)}={0,3π4,π,3π4}.



Como en este caso estamos considerando valores reales, usaremos la parte real de la TDF definida en (1), es decir
(7)c0=14[0cos(2π/400)+(3π/4)cos(2π/401)+(π)cos(2π/402)+(3π/4)cos(2π/403)]=5π8c1=14[0cos(2π/410)+(3π/4)cos(2π/411)+(π)cos(2π/412)+(3π/4)cos(2π/413)]=π4c2=14[0cos(2π/420)+(3π/4)cos(2π/421)+(π)cos(2π/422)+(3π/4)cos(2π/423)]=π8c3=14[0cos(2π/430)+(3π/4)cos(2π/431)+(π)cos(2π/432)+(3π/4)cos(2π/433)]=π4
Por lo tanto, la interpolación trigonométrica está dada por el polinomio
(8)p(x)=5π8π4cosxπ8cos2xπ4cos3x.
Esto se puede apreciar en la siguiente imagen.



Observación: El proceso de encontrar los coeficientes de Fourier a partir de una señal (6) se denomina Trasformada Discreta de Fourier. Mientras que el proceso inverso de reconstruir una señal a partir de sus coeficientes de Fourier usando la suma (4) es conocido como la Inversa de la Transformada Discreta de Fourier.


Analicemos ahora el mismo problema de aproximar la función pero considerando más datos, por ejemplo para N=16. Debido a que el número de operaciones será muy grande, usaremos GeoGebra o JavaScript para realizar los cálculos que manualmente tomarían demasiado tiempo. En el siguiente applet puedes explorar la aproximación para diferentes valores de N.


Como habrás notado en el applet anterior mientras más grande sea el valor de N mayor será la oscilación de la función p(x)

Las gráficas resultantes señalan una dificultad significativa con la TDF definida en (1). Si bien los polinomios trigonométricos coinciden correctamente con los valores de la función dada, su comportamiento oscilatorio pronunciado los hace completamente inadecuados para la interpolación lejos de los puntos donde coinciden ambas funciones.

Sin embargo, esta dificultad se puede rectificar de la siguiente manera. El problema es que no estamos tomando atención a las frecuencias que están representadas en la suma de Fourier (4). Mientras que la primera mitad de los sumandos en (4) representan frecuencias relativamente bajas, la segunda mitad no, y puede ser reemplazada por una frecuencia más baja equivalente y, por lo tanto, con exponenciales menos oscilatorios. A saber, si 0<k12N entonces 
eikxyei(Nk)x
tienen los mismos valores, pero el primero tiene una frecuencia más baja comparado con el segundo. De esta forma, para nuestros propósitos, reemplazaremos la segunda mitad de los sumandos en (4) por su alternativa versión con baja frecuencia. Si N=2m+1 es impar, entonces definimos
(9)p^(x)=cmeimx++c1eix+c0+c1eix++cmeimx=k=mmckeikx
como la interpolación de baja frecuencia. Si, por otra parte N=2m es par, entonces
(10)p^(x)=cmeimx++c1eix+c0+c1eix++cmei(m1)x=k=mm1ckeikx.
En este caso, usaremos la Transformada Discreta de Fourier de bajas frecuencias para el caso par N=2m definida como
Xk=1Nn=0N1xneik2πNn,(k=N/2,,N/21)(11)=1Nn=0N1xn[cos(2πnkn)isin(2πnkn)]

Al aplicar la parte real de (11) a los valores 
x={0,3π4,π,3π4},
obtenemos los coeficientes
X={π8,π4,5π8,π4}.
De esta manera, podemos reemplazar (8) con el polinomio trigonométrico
p^(x)=π8cos(2x)π4cos(1x)+5π8cos(0x)π4cos(x)
En el siguiente applet podemos apreciar que se trata de una mejor aproximación de la función f para valores pares de n.


Lo mismo podemos hacer para valores impares de n. Usa el siguiente applet para explorar distintos valores.


Listo, hemos aproximado una función real definida en un intervalo usando la TDF (en su versión con bajas frecuencias). Lo más sorprendente aquí es que en realidad no necesitamos conocer la función f desde el principio. De hecho, solo necesitamos conocer una cantidad finita de datos
x={f0,f1,,fN1},
para reconstruir dicha función. Claro que mientras mayor sea el número de datos, la aproximación será más precisa.


Además, no es necesario restringirnos a aproximar funciones en un solo intervalo [a,b], en realidad podemos extender la aproximación a toda la recta real. En particular, la TDF es una herramienta excelente para aproximar funciones periódicas f(x,t) (también llamadas funciones de onda). Considera una función f(x,t) cuyo parámetro t varía de forma constante como se muestra en la imagen siguiente:



Con la TDF podemos aproximar esta función usando funciones sinusoidales más simples, es decir, funciones sen o cos. En otras palabras, la TDF descompone a una función dada f en términos de funciones sinusoidales más simples. Esto se puede apreciar en el siguiente applet, usa el ratón para bajar el deslizador:


En efecto, f(x,t) está definida como:
sen(x+t)+sen(3x+t)
En el applet anterior, la curva de en medio representa la función sen(x+t) y curva de abajo representa la función sen(3x+t)

Lo mismo podemos hacer para funciones de onda más interesantes. Consideremos, por ejemplo, la onda cuadrada.
Aunque no lo parezca, esta onda también se puede descomponer en funciones sinusoidales.
Sin embargo, en esta ocasión necesitamos muchos términos, técnicamente una cantidad infinita de sumandos para representarla perfectamente. A medida que sumamos más y más ondas sinusoidales, el patrón se acerca cada vez más a la onda cuadrada con la que comenzamos.

Visualmente, notarás que en realidad las primeras ondas sinusoidales son las que marcan la mayor diferencia. Con el control deslizante a la mitad, tenemos la forma general de la onda, pero todo es ondulante. Solo necesitamos el resto de los pequeños para hacer que la ondulación se aplane.

Conclusión

Con los ejemplos aquí mostrados hemos visto que la Transformada Discreta de Fourier nos permite transformar un conjunto finito de datos para aproximar y descomponer funciones periódicas en términos de funciones sinusoidales.

Esto es de gran utilidad en la actualidad debido al desarrollo de medios digitales y a la necesidad por transmitir información de forma eficiente. En los medios digitales modernos (audio, imágenes fijas o video), las señales continuas se muestrean a intervalos de tiempo discretos antes de ser procesadas. La Transformada Discreta de Fourier descompone señales muestra (que se pueden definir como funciones reales o complejas) en sus componentes periódicos fundamentales: senos y cosenos, o, más convenientemente, exponenciales complejos. El hecho crucial, en el que se basa todo el procesamiento moderno de señales, es que los exponenciales complejos muestreados forman una base ortogonal (tema que quizá exploraremos en otra entrada).

Referencias


Nota: Los applets en JavaScript fueron escritos originalmente por Jez Swanson. Todos los applets hechos con GeoGebra se pueden consultar en el libro en línea Interpolation using the Discrete Fourier Transform.

También te recomiendo la siguiente entrada para conocer otras divertidas aplicaciones de la Transformada Discreta de Fourier:




Gracias por llegar al final de este artículo. Si deseas puedes apoyarme en Patreon usando el siguiente enlace:

Become a Patron!

Con tu apoyo podré seguir escribiendo y compartiendo artículos y applets de matemáticas.

Comentarios

Entradas populares

Galileo Galilei y su ley de caída libre

Breve historia del Cálculo

Una historia de la Teoría de Conjuntos