Transformada de Fourier#
En general, una transformada integral es una transformación \(T\) que convierte una función \(f(t)\) en otra función \(F(u)\) definida en otro dominio. La transformación tiene la forma general
La función \(K(u,t)\) se conoce como núcleo de la transformación y determina el tipo de transformada.
El uso de transformadas integrales puede ayudar a resolver diferentes problemas de naturaleza matemática que son difíciles de resolver en su dominio original. Mediante la transformada el problema se lleva a otro dominio en el que puede resultar más fácil de resolver.
Transformadas integrales hay muchas, en este caso el análisis se va a centrar en dos de las que tienen mayores aplicaciones prácticas en la física y distintas ramas de la ingeniería:
Transformada de Fourier
Transformada de Laplace
Definición de la transformada de Fourier#
La transformada de Fourier, propuesta por el matemático y físico francés Joseph Fourier (1768-1830), transforma señales entre el dominio del tiempo (o el espacio) y el dominio de la frecuencia. Se trata de una transformación que tiene muchas aplicaciones en la física y la ingeniería. Es reversible, siendo capaz de transformarse en cualquiera de los dominios al otro.
Transformada de Fourier:
Dada \(f(t)\) localmente integrable y absolutamente integrable en \(R\), se define su transformada de Fourier como:
y se llama transformada inversa o anti-transformada de Fourier de la función \(F(w)\) a la función:
Estas expresiones permiten calcular el dominio de la frecuencia \(F(w)\) a partir del dominio del tiempo \(f(t)\), y viceversa.
Cálculo de transformadas de Fourier con Python#
El cálculo de esta transformada puede también hacerse con ayuda del paquete SymPy de Python. Este paquete cuenta con una función que permite calcular la transformada de Fourier directamente. Se trata de la función fourier_transform()
, lo único que se debe advertir es que está función calcula la transformada de la siguiente manera:
Para lo que recibe los siguientes argumentos:
Función a transformar \(f(x)\)
Variable respecto a la que se calcula la transformada \(x\)
Variable de la frecuencia \(k\)
Teniendo en cuenta la pequeña diferencia en la definición, para calcular \(F(f(t))(w)\) habría que utilizar como tercer argumento de la función \(\frac{w}{2\pi}\). En definitiva, para calcular la transformada de Fourier de \(f(t)\) habría que utilizar la instrucción
fourier_transform(f, t, w/(2*sp.pi))
Para hacer uso de esa función habría que cargar previamente el paquete
import sympy as sp
A continuación se muestran las transformadas de Fourier de algunas funciones habituales en modelos físicos.
Ejemplo: transformada de Fourier de la función pulso rectangular
Esta función puede definirse a partir de la función de Heaviside que se encuentra ya definida dentro del paquete SymPy:
En concreto
Con ayuda de SymPy puede definirse y representarse gráficamente la función pulso rectangular:
t = sp.Symbol('t')
f = sp.Heaviside(t+1) * sp.Heaviside(1-t)
sp.plot(f,(t,-2,2));

Otra opción para representar gráficamente expresiones funcionales simbólicas, es convertirlas previamente a funciones numéricas y utilizar las funciones del paquete Matplotlib.
import numpy as np
import matplotlib.pyplot as plt
fnum = sp.lambdify(t,f)
tt = np.linspace(-4,4)
plt.figure(figsize=(6,4))
plt.plot(tt, fnum(tt))
plt.xlabel('t')
plt.title('Pulso rectangular')
plt.show()

La transformada de Fourier podría calcularse y representarse gráficamente de forma muy fácil con ayuda de Python
t, w = sp.symbols('t,w')
Tf = sp.fourier_transform(f, t, w/(2*sp.pi))
Tf
sp.plot(Tf,(w,-10,10), title='Transformada de Fourier del pulso rectangular');

Ejemplo: transformada de Fourier de la función pulso triangular
La función pulso triangular puede definirse con ayuda de la función Piecewise()
del paquete SymPy que define “funciones a trozos”
a = 2
f = sp.Piecewise( (0, ((t<-a)|(t>a)) ),
(1+t/a, ((t>=-a)&(t<0)) ),
(1-t/a, ((t>=0)&(t<=a)) ))
f
sp.plot(f, (t,-5,5), title='Pulso triangular');

Tf = sp.fourier_transform(f, t, w/(2*sp.pi)).simplify()
Tf
La transformada de Fourier de la función pulso triangular es
sp.plot(Tf, (w,-10,10), title='Pulso triangular');

Ejemplo:
Transformada de Fourier de la función \(f(t)=e^{-|t|}\)
f = sp.exp(-sp.Abs(t))
sp.plot(f, (t,-5,5), title='f(t)')
Tf = sp.fourier_transform(f, t, w/(2*sp.pi)).simplify()
print('Transformada de Fourier:', Tf)
sp.plot(Tf, (w,-10,10), title='Transformada de Fourier');

Transformada de Fourier: 2/(w**2 + 1)

Ejemplo:
Transformada de Fourier de la función
f = sp.Piecewise( (sp.sin(t), (sp.Abs(t)<=sp.pi) ),
(0, True))
sp.plot(f, (t,-5,5), title='f(t)')
sp.fourier_transform(f, t, w/(2*sp.pi)).simplify()

Se puede calcular la transformada realizando directamente la integral siguiente:
Tf = sp.integrate(sp.sin(t)*sp.exp(-sp.I*w*t), (t, -sp.pi, sp.pi)).simplify()
Tf
Ejemplo:
Transformada de Fourier de la función
f = sp.Piecewise( (1, ((-3<=t)&(t<=-1)) ),
(1, ((1<=t)&(t<=3)) ),
(0, True))
sp.plot(f, (t,-5,5), title='f(t)')
Tf = sp.fourier_transform(f, t, w/(2*sp.pi)).simplify()
print('Transformada de Fourier:', Tf)
sp.plot(Tf, (w,-10,10), title='Transformada de Fourier');

Transformada de Fourier: Piecewise((I*(-exp(6*I*w) + exp(4*I*w) - exp(2*I*w) + 1)*exp(-3*I*w)/w, Ne(w, 0)), (4, True))
