Transformada de Fourier
La transformada de Fourier, denominada así por Joseph Fourier, es una transformación matemática empleada para transformar señales entre el dominio del tiempo (o espacial) y el dominio de la frecuencia, que tiene muchas aplicaciones en la física y la ingeniería.
La transformada de Fourier es la generalizacion de la serie de Fourier para señales no periodicas, osea señales de energia finita, la representacion en frecuencia (Espectro de frecuencia) sera continuo osea que las exponenciales complejas estaran infinitesimalmente cercanas en frecuencia.
Para obtener la Transformada de Fourier a partir de las series de Fourier, se define que una señal aperiodica es una señal periodica pero con periodo tendiendo a infinito
En las series de Fourier se puede ver que si se aumenta el periodo
Demostracion de la Tranformada de Fourier para señales Aperiodicas

Definiendo la envolvente
combinando
Por lo tanto
Donde
Ejemplos de Tranformadas de Fourier
# Importar librerias basicas
import numpy as np
import matplotlib.pyplot as plt
import sympy as sym
%matplotlib inline
plt.style.use('bmh') # estilo de las graficas
from IPython.display import Latex # para visualizar ecuaciones en jupyter
sym.init_printing()
t, w = sym.symbols('t omega', real=True)
def fourier_transform(x):
return sym.transforms._fourier_transform(x, t, w, 1, -1, 'Fourier')
T. Fourier Impulso de Dirac
La transformación
Utilizando el Modulo sympy
se puede evaluar la integral o calcular la transformada de fourier de delta
t, w = sym.symbols('t omega', real=True)
X = sym.integrate(sym.DiracDelta(t)*sym.exp(-sym.I*w*t), (t, -sym.oo, sym.oo))
t, w = sym.symbols('t omega', real=True)
X = sym.integrate(sym.DiracDelta(t)*sym.exp(-sym.I*w*t), (t, -sym.oo, sym.oo))
X
X = fourier_transform(sym.DiracDelta(t))
X = fourier_transform(sym.DiracDelta(t))
X
Lo que me indica que el espectro de frecuencia de un impulso de Dirac esta en todas las frecuencias con un valor de 1.
T. Fourier Exponencial decreciente
para
a = sym.exp(-t)*sym.Heaviside(t)
sym.plot(a, (t, -1, 6), xlabel=r'$t$', ylabel=r'$x(t)$');

XW = fourier_transform(sym.exp(-t)*sym.Heaviside(t))
XW
sym.plot(sym.Abs(XW), (w, -30, 30), xlabel=r'$\omega$', ylabel=r'$|X(j\omega)|$');

sym.plot(sym.arg(XW), (w, -30, 30), xlabel=r'$\omega$', ylabel=r'$\angle X(j\omega)$');

T. Fourier de un Pulso Rectangular
La transformación de Fourier
El resultado se abrevia comúnmente en términos de función sinc
Tenga en cuenta que el valor en
- Su valor máximo es uno en
- Su amplitud decae con
- Sus ceros se encuentran en
para
class rect(sym.Function):
@classmethod
def eval(cls, arg):
return sym.Heaviside(arg + sym.S.Half) - sym.Heaviside(arg - sym.S.Half)
print("Ancho del pulso desde cero = 0.5")
display(Latex('$x(t) = \mu (t+0.5) - \mu (t-0.5)$'))
sym.plot(rect(t), (t, -3, 3), xlabel=r'$t$', ylabel=r'$x(t)$');
Ancho del pulso desde cero = 0.5

print('La transformada de Fourier de x(t) sera:')
XW = fourier_transform(rect(t))
XW
La transformada de Fourier de x(t) sera:
Como la trasnformada de Fourier es solo Real entonces no es necesario graficar la Magnitud y la Fase por separado
sym.plot(XW, (w, -30, 30), xlabel=r'$\omega$', ylabel=r'sinc($\omega / 2$)');

El espectro de frecuencia de La señal pulso rectangular es va desde
De forma General la transformada de Fourier de un Pulso Rectangular en el tiempo que este centrada en cero y el valor del ancho desde cero sea
T. Inversa de Fourier de una señal Sinc(x)
def inverse_fourier_transform(X):
return sym.transforms._fourier_transform(X, w, t, 1/(2*sym.pi), 1, 'Inverse Fourier')
t, w = sym.symbols('t omega')
display(Latex(r'$X(j \omega) = \frac{2 \sin (\frac{\omega}{2})}{\omega}$'))
XW = sym.sinc(w/2)
sym.plot(XW, (w, -30, 30), xlabel=r'$\omega$', ylabel=r'sinc($\omega / 2$)');

x = inverse_fourier_transform(XW)
x
sym.plot(x, (t,-1,1), ylabel=r'$x(t)$');

Convergencia
Para que exista la transformada de fourier se debe cumplir que:
sea absolutamente integrable debe tener un numero finito de intervalos en cualquier intervalo finito de la señal debe tener un numero finito de discontinuidades en cualquier intervalo finito de la señal
Transformada de Fourier para Señales Periodicas
Para obtener la transformada de Fourier para una señal periodica y obtener un resultado general
se supone
Supongamos que el espectro de
La Transformada de Fourier de una señal periodica con coeficiente de series de Fourier
Entonces en Resumen la transformada de Fourier de una señal periodica es calcular las series de Fourier y multiplicar cada coeficiente por
Ejemplo
mu = sym.symbols('mu', integer=True)
t = sym.symbols('t', real=True)
T = 2
Tp = 5
def pulse_train(T, Tp):
n = sym.symbols('n', integer=True)
x0 = sym.Piecewise((0, t < 0), (1, t < T), (0, True))
return sym.summation(x0.subs(t, t+n*Tp), (n, -10, 10))
print(f"Periodo = {Tp}")
print(f"Ancho del pulso = {T}")
import warnings
warnings.filterwarnings("ignore", module="sympy.plot")
sym.plot(pulse_train(T, Tp), (t, -5, 20), xlabel='$t$', ylabel='$x(t)$', adaptive=False);
Periodo = 5
Ancho del pulso = 2

X_mu = sym.exp(-sym.I * mu * sym.pi * T/Tp) * T * sym.sinc(mu * sym.pi * T/Tp)
X_mu
Xn = sym.lambdify(mu, sym.Abs(X_mu), 'numpy')
n = np.arange(-15, 15)
plt.stem(n*2*np.pi/Tp, Xn(n))
plt.xlabel('$\omega$')
plt.ylabel('$|X(j \omega)|$');

Preguntas:
- Cambie la relación T / Tp del código. ¿Cómo cambia el espectro del tren de pulsos?
- ¿Puedes deducir la periodicidad(Tp) de la señal observando su espectro?
- Calcule la potencia promedio del tren de pulsos en el dominio de la frecuencia aplicando el teorema de Parseval.
Ejercicios
- Transformada de Fourier de
- Transformada de Fourier de
- Si
Propiedades de la Tranformada de Fourier
Linealidad
Desplazamiento en el Tiempo
Conjugacion y Simetria Conjugada
Si
Diferenciacion e Integracion
Ejemplo:
- La función delta de dirac
es igual a la primera deriva de la función paso , o en caso contrario la función paso es igual a la integral del delta de dirac, entonces si conozco la transformada de Fourier de la señal delta de dirac puedo hallar la transformada de Fourier de la señal paso.
- La función rampa
se puede expresar como la integral de la función paso
Aplicando el teorema de la integracion podemos obtener la transformada de Fourier de la función Paso
Escalamiento de Tiempo y Frecuencia
Ejemplo
t, w = sym.symbols('t omega')
a = sym.symbols('a', positive=True)
x = sym.Heaviside(t + sym.S.Half/a) - sym.Heaviside(t - sym.S.Half/a)
X = fourier_transform(x)
print(f'X(jw) =')
X
X(jw) =
values = {a: 1/2}
print(f'a = 0.5')
sym.plot(x.subs(values), (t, -4,4), xlabel=r'$t$', ylabel=r'$\mathrm{\mu}(a t)$');
sym.plot(X.subs(values), (w, -20, 20), xlabel=r'$\omega$', ylabel=r'$\mathcal{F} \{ \mathrm{μ}(a t) \}$');
a = 0.5


values = {a: 2}
print(f'a = 2')
sym.plot(x.subs(values), (t, -4, 4), xlabel=r'$t$', ylabel=r'$\mathrm{\mu}(a t)$');
sym.plot(X.subs(values), (w, -30, 30), xlabel=r'$\omega$', ylabel=r'$\mathcal{F} \{ \mathrm{μ}(a t) \}$');
a = 2


Dualidad


Se puede comprobar si tenemos un pulso en la frecuencia y calculamos la transformada inversa de Fourier, y lo comparamos con el ejercicio desarrollado anteriormente sobre la transformada de Fourier de un pulso en el tiempo.
print("Ancho del pulso desde cero = 0.5 rads/seg")
display(Latex('$X(j \omega) = \mu (\omega +0.5) - \mu ( \omega -0.5)$'))
XW = rect(w)
sym.plot(XW, (w, -3, 3), xlabel=r'$\omega$', ylabel=r'$X(j \omega) $');
Ancho del pulso desde cero = 0.5 rads/seg

x = inverse_fourier_transform(XW)
x
sym.plot(x, (t,-30,30), ylabel=r'$x(t)$');

En general, para cualquier par de transformadas, hay un par dual con las variables de tiempo y frecuencia intercambiadas.
Derivacion en la Frecuencia
Integracion en la Frecuencia
Desplazamiento en la Frecuencia
Es el concepto que se utiliza en Modulacion, ver la propiedad mas adelante
Relacion de Parseval
Ejemplo
La energía de la señal pulso rectangular
Codigo en python para evaluar la integral:
E_t = sym.integrate(1, (t, -sym.S.Half, sym.S.Half))
E_t = sym.integrate(1, (t, -sym.S.Half, sym.S.Half))
print('Energia en el Tiempo E_t = {E_t}')
Energia en el Tiempo E_t = {E_t}
La energía en el dominio espectral se calcula evaluando
E_f = 1/(2*sym.pi) * sym.integrate(sym.sinc(w/2)**2, (w, -sym.oo, sym.oo))
E_f = 1/(2*sym.pi) * sym.integrate(sym.sinc(w/2)**2, (w, -sym.oo, sym.oo))
print('Energia en la frecuencia E_f = {E_f}')
Energia en la frecuencia E_f = {E_f}
Convolucion

Multiplicacion
El teorema de multiplicación se puede probar de manera similar al teorema de convolución calculando la transformada inversa de Fourier de los espectros convolucionados
Alternativamente, la dualidad de la transformada de Fourier se puede aplicar al teorema de convolución. Las aplicaciones del teorema de multiplicación incluyen la modulación y cuando se aplica una ventana a una señal. El primero conduce al teorema de modulación introducido más tarde, el segundo se puede ilustrar con el siguiente ejemplo.
def convolve(x, y, var):
tau = sym.symbols('tau')
return sym.integrate(x.subs(var, tau) * y.subs(var, var - tau), (tau, -sym.oo, sym.oo))
t, w = sym.symbols('t omega')
w0, a = sym.symbols('omega0 a')
class rect(sym.Function):
@classmethod
def eval(cls, arg):
return sym.Heaviside(arg + sym.S.Half) - sym.Heaviside(arg - sym.S.Half)
values = {w0: 10, a: 1/2}
y1 = rect(a*t)
y2 = sym.cos(w0*t)
display(Latex('$w(t) = rect(t)$'))
sym.plot(y1.subs(values), (t, -5, 5), xlabel=r'$t$', ylabel=r'$rect(t)$');
display(Latex('$x(t) = cos(\omega _0 t)$'))
sym.plot(y2.subs(values), (t, -5, 5), xlabel=r'$t$', ylabel=r'$cos(w_0t)$');
display(Latex('$x(t) = rect(t) \cdot cos(\omega _0 t)$'))
y = rect(a*t) * sym.cos(w0*t)
sym.plot(y.subs(values), (t, -5, 5), xlabel=r'$t$', ylabel=r'$y(t)$');



W = 1/abs(a) * sym.sinc(w/(2*a))
X = sym.pi*(sym.DiracDelta(w + w0) + sym.DiracDelta(w - w0))
Y = 1/(2*sym.pi) * convolve(W, X, w)
Y
values = {w0: 10, a: 1/2}
display(Latex('$W(j \omega)$'))
sym.plot(W.subs(values), (w, -20, 20), xlabel=r'$\omega$', ylabel=r'$W(j \omega)$');
display(Latex('$X(j \omega) = \delta(\omega + \omega_0) + \delta(\omega - \omega_0)$'))
display(Latex('$Y(j \omega) = X(j \omega) * W(j \omega)$'))
sym.plot(Y.subs(values), (w, -20, 20), xlabel=r'$\omega$', ylabel=r'$Y(j \omega)$');


Modulacion con Sinusoidal
Resumen Propiedades
| ||
---|---|---|
Dualidad | ||
Linealidad | ||
Conjugacion | ||
Escalamiento | ||
Convolucion | ||
Desplazamiento en el tiempo | ||
Diferenciacion | ||
Integracion | ||
Multiplicacion | ||
Modulacion |
where
Sistemas Caracterizados por ecuaciones Diferenciales con Coeficientes Constantes
En los sistemas LTI la relación de entrada salida se puede expresar mediante una ecuación diferencial lineal de coeficientes constantes.
Conociento la ecuación Matematica qeu modela el sistema se puede obtener la respuesta del sistema ante cualquier entrada, ya que se puede obtener la respuesta al impulso.
Del Teorema de convolucion de Fourirer sabemos que
Ejemplo:
- La siguiente ecuación diferencial de coeficientes constantes se obtiene de un sistema fisico
Calcular la Respuesta en frecuencia y la respuesta al impulso
Respuesta:
Ejercicio:
- Calcular la Respuesta en frecuencia y la respuesta al impulso del siguiente sistema reresentado por ecuaciones diferenciales de coeficientes constantes
- Si
calcular
REFERENCIAS
- https://nbviewer.jupyter.org/github/spatialaudio/signals-and-systems-lecture/blob/master/fourier_transform/definition.ipynb
- https://nbviewer.jupyter.org/github/spatialaudio/signals-and-systems-lecture/blob/master/fourier_transform/theorems.ipynb
- https://nbviewer.jupyter.org/github/spatialaudio/signals-and-systems-lecture/blob/master/fourier_transform/table_theorems_transforms.ipynb
Phd. Jose R. Zapata