5.1 TRANSFORMADA DE FOURIER EN TIEMPO CONTINUO

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 (T)

En las series de Fourier se puede ver que si se aumenta el periodo (T) las componentes se hacen mas cercanas en frecuencia, basandonos en la relacion del periodo y la frecuencia angular ω=2πT, si se aumenta T la frecuencia se vuleve mas pequeña, entonces las componentes de frecuencia se hacen mas cercanas.

Demostracion de la Tranformada de Fourier para señales Aperiodicas

periodica-aperiodica

x~(t)=k=+akejkω0t ak=1TT1T1x~(t)ejkω0tdt

x(t)=x~(t):t[T1,T1] ak=1TT1T1x(t)ejkω0tdt=1Tx(t)ejkω0tdt

Definiendo la envolvente X(jω)=Tak entonces

X(jω)=x(t)ejωtdt  ak=X(jkω0)T

combinando

x~(t)=k=+X(jkω0)Tejkω0t ω0=2πT x~(t)=12πk=+X(jkω0)ejkω0tω0 Si :T: entonces :x~(t)x(t): entonces ω00

Por lo tanto x~(t) converge en una integral obteniendo la Transformada Inversa de Fourier, x(t)=F1X(jω):

x(t)=12πX(jω),ejωt;dω  Transformada de Fourier X(jω)=Fx(t) X(jω)=+x(t),ejωt;dt

Donde X(jω) es el Espectro de Frecuencia de x(t)

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 Fδ(t) del impulso de Dirac se deriva al introducir δ(t) en La definición de la transformada de Fourier y la explotación de la propiedad de integracion de la función delta de Dirac.

Fδ(t)=δ(t),ejωtdt=1  

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

1

X = fourier_transform(sym.DiracDelta(t))
X = fourier_transform(sym.DiracDelta(t))
X

1

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

x(t)=eatμ(t)

para a=1

a = sym.exp(-t)*sym.Heaviside(t)
sym.plot(a, (t, -1, 6), xlabel=r'$t$', ylabel=r'$x(t)$');

png

XW = fourier_transform(sym.exp(-t)*sym.Heaviside(t))
XW

1iω+1

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

png

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

png

T. Fourier de un Pulso Rectangular

La transformación de Fourier Frect(t) de la señal rectangular se obtiene mediante la evaluación explícita de la definición. Frect(t)=rect(t),ejωt;dt=1212ejωt;dt=sin(ω2)ω2

El resultado se abrevia comúnmente en términos de función sinc

sinc(x)={sin(x)xfor x0 1for x=0

Tenga en cuenta que el valor en x=0 se ha obtenido aplicando la regla de L’Hôpital a sin(x)x. La función sinc es una función importante en el procesamiento de señales (digitales) y la ingeniería de comunicaciones. Muestra las siguientes propiedades:

 

  1. Su valor máximo es uno en x=0
  2. Su amplitud decae con 1|x|
  3. Sus ceros se encuentran en x0=nπ para nZ0
  4. sinc(t);dt=π
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

x(t)=μ(t+0.5)μ(t0.5)

png

print('La transformada de Fourier de x(t) sera:')
XW = fourier_transform(rect(t))
XW
La transformada de Fourier de x(t) sera:

2sin(ω2)ω

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$)');

png

El espectro de frecuencia de La señal pulso rectangular es va desde Hasta + lo que indica que presenta fenomeno de Gibbs

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 T1 sera: X(jω)=2sin(ωT1)ω

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(jω)=2sin(ω2)ω

png

x = inverse_fourier_transform(XW)
x
{1for|1t2|4>10otherwise
sym.plot(x, (t,-1,1), ylabel=r'$x(t)$');

png

Convergencia

Para que exista la transformada de fourier se debe cumplir que:

  1. x(t) sea absolutamente integrable |x(t)|;dt<
  2. x(t) debe tener un numero finito de intervalos en cualquier intervalo finito de la señal
  3. x(t) 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 X(jω)=Fx(t), donde X(jω) es la representacion en frecuencia de x(t).

Supongamos que el espectro de x(t) consiste en un solo impulso de area = 2π en ω=ω0 X(jω)=2πδ(ωω0) x(t)=12π(2πδ(ωω0))ejωtdω x(t)=ejω0t De forma general si suponemos: X(jω)=k=2π:ak:δ(ωω0) 

x(t)=12π(k=2π:ak:δ(ωω0))ejωtdω  x(t)=k=akejkω0t:≡:Serie de Fourier

La Transformada de Fourier de una señal periodica con coeficiente de series de Fourier =ak se puede entender como un tren de impulsos que ocurren a las frecuencias relacionadas armonicamente y para las cuales el area del impulso es la K-esima frecuencia armonica Kω0 es 2π veces el K- esimo coeficiente de la serie de Fourier ak.

Entonces en Resumen la transformada de Fourier de una señal periodica es calcular las series de Fourier y multiplicar cada coeficiente por 2π.

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

png

X_mu = sym.exp(-sym.I * mu * sym.pi * T/Tp) * T * sym.sinc(mu * sym.pi * T/Tp)
X_mu

2e2iπμ5sinc(2πμ5)

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)|$');

png

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 x(t)=sin(ω0t)
  • Transformada de Fourier de x(t)=cos(ω0t)
  • Si x(t)=k=δ(tKT)

Propiedades de la Tranformada de Fourier

Linealidad

x(t)fX(jω)y(t)fY(jω)ax(t)+by(t)faX(jω)+bY(jω)

Desplazamiento en el Tiempo

x(tto)fejωt0X(jω) Cambia la fase pero no la magnitud

Conjugacion y Simetria Conjugada

x(t)fX(jω)

Si x(t)Re: entonces :X(jω)=X(jω)

Diferenciacion e Integracion

dx(t)dtfjωX(jω) tx(τ)dτfs(1jω)X(jω)+πX(0)δ(ω)

Ejemplo:

  • La función delta de dirac δ(t) es igual a la primera deriva de la función paso μ(t), 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.

Fδ(t)=1 dμ(t)dt=δ(t):→ Fμ(t)=1jω+πδ(ω)

  • La función rampa r(t) se puede expresar como la integral de la función paso μ(t)

r(t)=tμ(τ);dτ

Aplicando el teorema de la integracion podemos obtener la transformada de Fourier de la función Paso

R(jω)=1jωsinc(ω2)+πsinc(0)δ(ω)

Escalamiento de Tiempo y Frecuencia

x(αt)f1|α|X(jωα)

x(t)fX(jω)

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) =

2sin(ω2a)ω

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

png

png

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

png

png

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(jω)=μ(ω+0.5)μ(ω0.5)

png

x = inverse_fourier_transform(XW)
x

sin(t2)πt

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

png

En general, para cualquier par de transformadas, hay un par dual con las variables de tiempo y frecuencia intercambiadas.

Derivacion en la Frecuencia

jtx(t)fdX(jω)dω

Integracion en la Frecuencia

1jtx(t)+πx(0)δ(t)fωx(η)δ(η)

Desplazamiento en la Frecuencia

Es el concepto que se utiliza en Modulacion, ver la propiedad mas adelante ejω0tx(t)fX(j(ωω0))

Relacion de Parseval

|x(t)|2;dt=12π|X(jω)|2;dω

Ejemplo

La energía de la señal pulso rectangular rect(t) se calcula en el tiempo y el dominio espectral mediante la evaluación de las integrales respectivas. Primero se evalúa el dominio del tiempo

Et=|rect(t)|2;dt=12121;dt

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

Ef=12π|sinc(ω2)|2;dω Codigo en python para evaluar la integral:

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

y(t)=x(t)h(t)fY(jω)=X(jω)H(jω)

F{x(t)h(t)}=(x(τ)h(tτ)dτ)ejωtdt=(h(tτ)ejωtdt)x(τ)dτ=H(jω)x(τ)ejωτdτ=H(jω)X(jω)

Propiedad_Convolucion

Multiplicacion

x(t)h(t)f12π[X(jω)H(jω)]

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

F1{12πX(jω)Y(jω)} =12π(12πX(jν)Y(j(ων))dν)ejωtdω=12π(12πY(j(ων))ejωtdω)X(jν)dν=y(t)12πX(jν)ejνtdν=y(t)x(t)

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(t)=rect(t)

png

x(t)=cos(ω0t)

png

x(t)=rect(t)cos(ω0t)

png

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

$sinc(ωω02a)+sinc(ω+ω02a)2|a|$

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)$');

W(jω)

png

X(jω)=δ(ω+ω0)+δ(ωω0)

Y(jω)=X(jω)W(jω)

png

Modulacion con Sinusoidal

ejω0tx(t)fX(j(ωω0))

Resumen Propiedades

x(t)X(jω)=Fx(t)
Dualidadx1(t) x2(jt)x2(jω) 2π,x1(ω)
LinealidadA,x1(t)+B,x2(t)A,X1(jω)+B,X2(jω)
Conjugacionx(t)=x(t)X(jω)=X(jω)
Escalamientox(at)1|a|X(jωa)
Convolucionx(t)h(t)X(jω)H(jω)
Desplazamiento en el tiempox(tτ)ejωτX(jω)
Diferenciacionddtx(t)jωX(jω)
Integraciontx(t);dt1jωX(jω)+πX(0)δ(ω)
Multiplicacionx(t)h(t)12πX(jω)H(jω)
Modulacionejω0tx(t)X(j(ωω0))

where A,BC, aR0 and τ,ω0R.

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.

n=0Nαndn:y(t)dtn=m=0Mβmdm:x(t)dtm

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.

F{n=0Nαndny(t)dtn}=F{m=0Mβmdmx(t)dtm} n=0NαnF{dny(t)dtn}=m=0MβmF{dmx(t)dtm} n=0Nαn(jω)nY(jω)=m=0Mβm(jω)mX(jω) Y(jω)n=0Nαn(jω)n=X(jω)m=0Mβm(jω)m Y(jω)X(jω)=m=0Mβm(jω)mn=0Nαn(jω)n

Del Teorema de convolucion de Fourirer sabemos que

F{y(t)=x(t)h(t)}=X(jω)H(jω)Y(jω)=H(jω)X(jω)H(jω)=Y(jω)X(jω) H(jω)=Y(jω)X(jω)=m=0Mβm(jω)mn=0Nαn(jω)nRespuesta en Frecuencia del sistema F1{H(jω)}=h(t)Respuesta al impulso

Ejemplo:

  • La siguiente ecuación diferencial de coeficientes constantes se obtiene de un sistema fisico d:y(t)dt+ay(t)=x(t)a>0 Calcular la Respuesta en frecuencia y la respuesta al impulso

Respuesta: H(jω)=1jω+a h(t)=eatμ(t)

Ejercicio:

  • Calcular la Respuesta en frecuencia y la respuesta al impulso del siguiente sistema reresentado por ecuaciones diferenciales de coeficientes constantes

d2:y(t)dt2+4d:y(t)dt+3y(t)=d:x(t)dt+2x(t)

  • Si x(t)=et calcular y(t)

REFERENCIAS

Phd. Jose R. Zapata

Siguiente