Lo que para señales y sistemas representa un componente importante en el análisis de sistemas LTI, al poder representar los sistemas por bloques en serie y paralelo semejante a lo realizado con la transformada de Laplace:
La convergencia de la transformada de Fourier se garantiza bajo ciertas condiciones. El análisis de Fourier para el estudio de sistemas LTI se restringe a los que sus respuestas al impulso tienen transformada de Fourier. Los detalles se mostrarán en cada ejercicio presentado.
Ejemplo 1. H(ω) desde una ecuación diferencial
Referencia: Oppenheim Ej 4.25 p331
Considere un sistema LTI estable que se caracteriza por la ecuación diferencial,
Para facilitar encontrar h(t) se usan fracciones parciales respecto a jω, de forma semejante a lo realizado para el dominio s con instrucciones de Sympy-Python, Las instrucciones las puede recordar observando el ejercicio 2, donde se adjunta el algoritmo.
Se obtiene una parte real y otra imaginaria al evaluar F(w) en un intervalo que incluya -a y a.
También es posible observar la magnitud y fase de F(w) en una gráfica.
Se observa por ejemplo que el valor de la magnitud |F(0)| = 1/a. También que la fase se encuentra acotada en π/2 y que fase(F(-a)) = -π/4.
Usando el algoritmo con Python se obtiene el siguiente resultado:
expresion f(t):
-a*t
e *Heaviside(t)
expresion F(w):
1
-------
a + I*w
|F(w)|:
1
------------
_________
/ 2 2
\/ a + w
F(w)_fase:
/w\
-atan|-|
\a/
>>>
Instrucciones en Python
# Transformada de Fourier de señales aperiodicas# blog.espol.edu.ec/telg1001/import sympy as sym
# INGRESO
t = sym.Symbol('t', real=True,)
w = sym.Symbol('w', real=True)
a = sym.Symbol('a', real=True,positive=True)
T = sym.Symbol('T', real=True,positive=True)
j = sym.I
u = sym.Heaviside(t)
d = sym.DiracDelta(t)
ft = sym.exp(-a*t)*u
#ft = sym.exp(-a*sym.Abs(t))#ft = sym.Heaviside(t+T)-sym.Heaviside(t-T)#ft = d# PROCEDIMIENTO
unilateral = False
ftw = ft*sym.exp(-j*w*t) # f(t,w) para integrar
ftw = sym.expand(ftw) # expresion de sumas
ftw = sym.powsimp(ftw) # simplifica exponentes
lim_a = 0 # unilateralifnot(unilateral):
lim_a = -sym.oo
# integral de Fourier
Fw_F = sym.integrate(ftw,(t,lim_a,sym.oo))
if Fw_F.is_Piecewise:
Fw = Fw_F.args[0] # primera ecuacion e intervalo
Fw = Fw[0] # solo expresionelse:
Fw = Fw_F
Fw = Fw.simplify()
# Magnitud y Fase
Fw_magn = sym.Abs(Fw)
Fw_fase = sym.atan(sym.im(Fw)/sym.re(Fw))
# SALIDAprint('\n expresion f(t):')
sym.pprint(ft)
print('\n expresion F(w):')
sym.pprint(Fw)
print('\n |F(w)|:')
sym.pprint(Fw_magn)
print('\n F(w)_fase:')
sym.pprint(Fw_fase)
Instrucción simplificada con Sympy
La librería Sympy incorpora una función para determinar en forma simbólica la transformada de Fourier, se usa la instrucción para simplificar el algoritmo anterior.
# Transformada de Fourier de señales aperiodicas# blog.espol.edu.ec/telg1001/import sympy as sym
# INGRESO
t = sym.Symbol('t', real=True,)
w = sym.Symbol('w', real=True)
a = sym.Symbol('a', real=True,positive=True)
T = sym.Symbol('T', real=True,positive=True)
j = sym.I
u = sym.Heaviside(t)
d = sym.DiracDelta(t)
ft = sym.exp(-a*t)*u
#ft = sym.exp(-a*sym.Abs(t))#ft = u.subs(t,t+T)-u.subs(t,t-T)#ft = d# PROCEDIMIENTO
ft = sym.expand(ft) # expresion de sumas
Fw = sym.fourier_transform(ft,t,w/(2*sym.pi))
# Magnitud y Fase
Fw_magn = sym.Abs(Fw)
Fw_fase = sym.atan(sym.im(Fw)/sym.re(Fw))
# SALIDAprint('\n expresion f(t):')
sym.pprint(ft)
print('\n expresion F(w):')
sym.pprint(Fw)
print('\n |F(w)|:')
sym.pprint(Fw_magn)
print('\n F(w)_fase:')
sym.pprint(Fw_fase)
Instrucciones para añadir la gráfica
Para las gráficas, se dan valores a las constantes a, T, se define el intervalo de la gráfica y el número de muestras a usar.
Luego se sustituye en las ecuaciones resultantes los valores de ‘a‘ con ‘a_k‘ obteniendo valores para las gráficas. La gráfica para f(t) se realiza de forma semejante en la unidad 1. Para la gráfica F(w) se usan una gráfica con parte Real e Imaginaria, otra gráfica para magnitud y fase.
# GRAFICA ----------------import numpy as np
import matplotlib.pyplot as plt
import telg1001 as fcnm
equivalentes = [{'DiracDelta': lambda x: 1*(x==0)},
{'Heaviside': lambda x,y: np.heaviside(x, 1)},
'numpy',]
a_k = 2 # valor de 'a' constante# Grafica, intervalo tiempo [t_a,t_b]
T_k = 1 # valor T o periodo
t_a = -2*T_k ; t_b = 2*T_k
muestras = 52 # 51 resolucion grafica
ft = ft.subs({a:a_k,T:T_k}) # a tiene valor a_k
Fw = Fw.subs({a:a_k,T:T_k})
Fw_magn = Fw_magn.subs({a:a_k,T:T_k})
Fw_fase = Fw_fase.subs({a:a_k,T:T_k})
figura_ft = fcnm.graficar_ft(ft,t_a,t_b,muestras)
# F(w) real e imaginaria
w_a = -a_k*4 ; w_b = a_k*4
wi = np.linspace(w_a,w_b,muestras)
# convierte a sympy una constante
Fw = sym.sympify(Fw,w)
if Fw.has(w): # no es constante
F_w = sym.lambdify(w,Fw,
modules=equivalentes)
else:
F_w = lambda w: Fw + 0*w
Fwi = F_w(wi) # evalua wi# F(w) magnitud y fase# convierte a sympy una constante
Fw_magn = sym.sympify(Fw_magn,w)
if Fw_magn.has(w): # no es constante
F_w_magn = sym.lambdify(w,Fw_magn,
modules=equivalentes)
else:
F_w_magn = lambda w: Fw_magn + 0*w
# convierte a sympy una constante
Fw_fase = sym.sympify(Fw_fase,w)
if Fw_fase.has(w): # no es constante
F_w_fase = sym.lambdify(w,Fw_fase,
modules=equivalentes)
else:
F_w_fase = lambda w: Fw_fase + 0*w
Fwi_magn = F_w_magn(wi) # evalua wi
Fwi_fase = F_w_fase(wi)
# F(w) real e imaginaria
fig_Fw, graf_Fwi = plt.subplots(2,1)
graf_Fwi[0].plot(wi,np.real(Fwi),label='Re(F(w))',
color='orange')
graf_Fwi[0].legend()
graf_Fwi[0].set_ylabel('Re (F(w)) ')
graf_Fwi[0].grid()
graf_Fwi[1].plot(wi,np.imag(Fwi),label='Imag(F(w))',
color='brown')
graf_Fwi[1].legend()
graf_Fwi[1].set_xlabel('w')
graf_Fwi[1].set_ylabel('imag(F(w))')
graf_Fwi[1].grid()
plt.suptitle(r'F(w) = $'+str(sym.latex(Fw))+'$')
# plt.show()# F(w) magnitud y fase
fig_Fwmg, graf_Fw = plt.subplots(2,1)
graf_Fw[0].plot(wi,Fwi_magn,label='F(w)_magn',
color='orange')
Fwa0 = F_w_magn(0)
Fwa1 = F_w_magn(-a_k)
Fwa2 = F_w_magn(a_k)
if Fw_magn.has(w): # no es constante
graf_Fw[0].stem([-a_k,a_k],[Fwa1,Fwa2],
basefmt=' ',linefmt ='--')
etiqueta1 = '('+str(a_k)+','+str(round(Fwa2,4))+')'
graf_Fw[0].annotate(etiqueta1, xy=(a_k,Fwa2))
etiqueta0 = '('+str(0)+','+str(round(Fwa0,4))+')'
graf_Fw[0].scatter(0,Fwa0)
graf_Fw[0].annotate(etiqueta0, xy=(0,Fwa0))
graf_Fw[0].legend()
graf_Fw[0].set_ylabel('F(w) magnitud ')
graf_Fw[0].grid()
graf_Fw[1].plot(wi,Fwi_fase,label='F(w)_fase',
color='brown')
graf_Fw[1].axhline(np.pi/2,linestyle ='--')
graf_Fw[1].axhline(-np.pi/2,linestyle ='--')
if Fw_magn.has(w): # no es constante
Fwa1f = F_w_fase(-a_k)
Fwa2f = F_w_fase(a_k)
graf_Fw[1].stem([-a_k,a_k],[Fwa1f,Fwa2f],
basefmt=' ',linefmt ='--')
etiqueta3 = '('+str(a_k)+','+str(round(Fwa2f,4))+')'
graf_Fw[1].annotate(etiqueta3, xy=(a_k,Fwa2f))
graf_Fw[1].legend()
graf_Fw[1].set_xlabel('w')
graf_Fw[1].set_ylabel('F(w) fase')
graf_Fw[1].grid()
plt.suptitle(r'F(w) = $'+str(sym.latex(Fw))+'$')
plt.show()
Se puede ver que la exponencial con frecuencia ω0 + 2π es la misma que aquella con la frecuencia ω0.
Existe una situación diferente en el caso contínuo, en el cual las señales ejω0t son todas distintas para distintos valores de ω0.
En el caso discreto, éstas señales no son distintas, ya que la señal con frecuencia ω0 es idéntica a las señales con frecuencias ω0 ± 2π , ω0 ± 4π, ... y las que le siguen. Por lo tanto, al considerar las exponenciales complejas, necesitamos tomar en cuenta solamente un intervalo de frecuencia de longitud 2π dentro del cual se escoge ω0.
ω0N = 2π m
o de otra forma
ω0/2π = m/N
Para el caso de m=1 y N=2
otra prueba con m=7 y N=4
con m=2 y N=1
El código en python para realizar las gráficas es:
# Señales discretas, y(t) a y[t]# propuesta:edelros@espol.edu.ecimport numpy as np
import math
import matplotlib.pyplot as plt
# Definir la funcion para el ejemplodefanalogica(f,t):
# función matemática CAMBIAR AQUI
y=np.cos(f*t)
return(y)
# Programa para graficar la función# INGRESO
rango = 4 # float(input('rangos en periodos de analogica:'))
m = 1 # float(input('frecuencia de analógica:'))
N = 2 # float(input('frecuencia digital:'))# PROCEDIMIENTO# grafica analogica
puntoscontinuos = 500
t0 = -rango*2*np.pi*m/2
tn = rango*2*np.pi*m/2
t = np.linspace(t0,tn,puntoscontinuos+1)
yanalog = analogica(m,t)
# grafica digital
deltaD = (2*np.pi*m)/(2*N)
muestreo = int((tn-t0)//deltaD +1)
td = np.linspace(t0,tn,muestreo)
ydigital = analogica(m,td)
# SALIDA - GRAFICA#Escala y para el grafico
margen = 0.1*np.max(yanalog)
ymax = np.max(yanalog)+margen
ymin = np.min(yanalog)-margen
plt.figure(1)
plt.suptitle('Señal Analogica vs digital')
plt.subplot(211) # grafica de 2x1 arriba
plt.plot(t,yanalog)
plt.axis((t0,tn,ymin,ymax))
plt.ylabel('y(t)')
plt.subplot(212) # grafica de 2x1 abajo
plt.plot(td,ydigital,'ro')
plt.axis((t0,tn,ymin,ymax))
plt.ylabel('Digital: y[t]')
plt.show()
Ejemplo. Serie de Fourier de rectángulo(t) con Integral de Sympy
Referencia: Lathi 6.5 p617, Chapra 5ed Ejemplo 19.2 p548
Utilice la serie de Fourier continua para aproximar la función de onda cuadrada o rectangular. Para el cálculo del ejemplo se usará hasta 4 términos de la serie.
Para determinar las expresiones de los coeficientes, en Python se usa la librería Sympy que nos facilita el desarrollo las fórmulas simbólicas ak y bk.
Si requiere revisar el concepto se adjunta el enlace:
# Serie de Fourier, con n coeficientes# Ref.Chapra 5ed Ejemplo 19.2 p548/pdf572import sympy as sym
# INGRESO
t = sym.Symbol('t')
T0 = 2*sym.pi ; t0 = -T0/2 # periodo ; t_inicio
ft = sym.Piecewise((-1,t <-T0/2),
(-1,t <-T0/4),
( 1,t < T0/4),
(-1,t < T0/2),
(-1,True),)
n = 4 # número de coeficientes# PROCEDIMIENTO
w0 = 2*sym.pi/T0
k = sym.Symbol('k')
# Términos ak para coseno()
enintegral = ft*sym.cos(k*w0*t)
yaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))
Fak = (2/T0)*yaintegrado
Fak = sym.simplify(Fak)
# Términos bk para seno()
enintegral = ft*sym.sin(k*w0*t)
yaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))
Fbk = (2/T0)*yaintegrado
Fbk = sym.simplify(Fbk)
# SALIDAprint(' expresión ak:')
sym.pprint(Fak)
print('\n ak formato latex')
print(sym.latex(Fak))
print('\n expresión bk:')
sym.pprint(Fbk)
print('\n bk formato latex')
print(sym.latex(Fbk))
Evaluación de coeficientes
Con las expresiones obtenidas en el bloque anterior, se evalúan los n coeficientes ak y bk, substituyendo en las expresiones los valores en cada índice i y se obtiene como resultado:
coeficientes ak,bk:
k_i : [0, 1, 2, 3]
ak : [0, 4/pi, 0, -4/(3*pi)]
bk : [0, 0, 0, 0]]
Instrucciones Python
Las instrucciones son adicionales al bloque anterior. La evaluación se mantiene usando las expresiones simbólicas usando la instrucción .subs()
# evalua los coeficientes
a0 = Fak.subs(k,0)/2
b0 = Fbk.subs(k,0)
ak = [a0] ; bk = [b0] ; k_i = [0]
i = 1
whilenot(i>=n):
ak_valor = Fak.subs(k,i)
bk_valor = Fbk.subs(k,i)
ak.append(ak_valor)
bk.append(bk_valor)
k_i.append(i)
i = i+1
print('\n coeficientes ak,bk: ')
for uncoef in coef_fourier:
print(uncoef,':',coef_fourier[uncoef])
Expresión de la Serie de Fourier
Encontrados los coeficientes ak y bk, se los usa en la expresión principal
obteniendo la siguiente expresión para la serie de Fourier como fs(t)
serie de Fourier fs(t):
4*cos(t) 4*cos(3*t)
-------- - ----------
pi 3*pi
Instrucciones en Python
Las instrucciones se añaden a continuación de los bloques anteriores,
# serie de Fourier
serieF = ak[0] + 0*t
i = 1
whilenot(i>=n):
serieF = serieF + ak[i]*sym.cos(i*w0*t)
serieF = serieF + bk[i]*sym.sin(i*w0*t)
i = i+1
print('\n serie de Fourier f(t): ')
sym.pprint(serieF)
Gráficas de f(t) y Serie de Fourier
Para comparar la función f(t) con la aproximación en series de Fourier, se usa el intervalo [a,b] con una cantidad de muestras usando la instrucción np.linspace() y guardando el resultado en ti.
Para evaluar los puntos ti en cada expresión, por simplicidad se convierte la expresión de su forma simbólica a numérica lambda, usando sym.lambdify()
Instrucciones en Python
Las instrucciones para graficar las series de Fourier van a continuación de las anteriores,
# Grafica ---------------------import numpy as np
import matplotlib.pyplot as plt
# Evaluación para gráfica
f_t = sym.lambdify(t,ft)
serie_ft = sym.lambdify(t,serieF)
ti = np.linspace(float(t_a),float(t_b),muestras)
fi = f_t(ti)
serie_fi = serie_ft(ti)
# Grafica de Serie de Fourier
plt.plot(ti,fi,label = 'f(t)')
etiqueta = 'coeficientes = '+ str(n)
plt.plot(ti,serie_fi,label = etiqueta)
plt.xlabel('ti')
plt.legend()
plt.grid()
plt.title('Serie de Fourier f(t); T0='+str(T0))
plt.show()
Tarea: Realizar el ejercicio, aumentando el número de términos a 8
Espectro de Fourier de amplitud y fase
Referencia: Lathi 6.1 p599, Chapra 19.3 p551
Los espectros ofrecen información que no aparece en el dominio del tiempo. La gráfica de frecuencias ofrece una representación rápida de la estructura de armónicas, que son como las huellas dactilares que ayudan a caracterizar y entender la forma de una señal complicada.
La gráfica considera todas las magnitudes como positivas. Posteriormente se puede observar como en algunos textos que se incorpora el signo en la grafica de magnitud. En la siguiente sección se trata más éste detalle.
Para mostrar este espectro de frecuencias se incrementó el número de términos de la serie a n=11, para observar mejor la forma de la gráfica.
# espectro de frecuencias k
ak_i = np.array(ak,dtype=float)
bk_i = np.array(bk,dtype=float)
ck_mag = np.sqrt(ak_i**2 + bk_i**2)
ck_fase = np.arctan(-bk_i/ak_i)
revisa0 = (abs(ak_i)>=casicero)
pendiente = -bk_i[revisa0]/ak_i[revisa0]
ck_fase[revisa0] = np.arctan(pendiente)
coef_fourier['ck_mag'] = ck_mag
coef_fourier['ck_fase'] = ck_fase
print('\n coeficientes ak,bk,Ck_mag,Ck_fase: ')
for uncoef in coef_fourier:
print(uncoef,':',coef_fourier[uncoef])
# grafica de espectro de frecuencia
plt.subplot(211)
plt.stem(k_i,ck_mag,label='|Ck|')
plt.ylabel('ck_mag')
plt.title('Espectro de frecuencia ; T0='+str(T0))
plt.legend()
plt.grid()
plt.subplot(212)
plt.stem(k_i,ck_fase,label='Ck_fase')
plt.legend()
plt.ylabel('ck_fase')
plt.xlabel('k_i')
plt.grid()
plt.show()
El algoritmo final como una integración de las partes presentadas se usa en la página siguiente con algunos ejemplos tradicionales de la transformada de Fourier.
Instrucciones Python para Integral de la serie de Fourier con n coeficientes
Se integran todas las partes anteriores en un algoritmo
# Serie de Fourier, con n coeficientes# Ref.Chapra 5ed Ejemplo 19.2 p548/pdf572import sympy as sym
import numpy as np
# INGRESO
t = sym.Symbol('t')
T0 = 2*sym.pi ; t0 = -T0/2 # periodo ; t_inicio
ft = sym.Piecewise((-1,t <-T0/2),
(-1,t <-T0/4),
( 1,t < T0/4),
(-1,t < T0/2),
(-1,True),)
n = 4 # número de coeficientes
t_a = t0 # intervalo de t =[t_a,t_b]
t_b = t0 + T0
muestras = 101 # 51 resolucion grafica
casicero = 1e-10
# PROCEDIMIENTO
w0 = 2*sym.pi/T0
k = sym.Symbol('k')
# Términos ak para coseno()
enintegral = ft*sym.cos(k*w0*t)
yaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))
Fak = (2/T0)*yaintegrado
Fak = sym.simplify(Fak)
# Términos bk para seno()
enintegral = ft*sym.sin(k*w0*t)
yaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))
Fbk = (2/T0)*yaintegrado
Fbk = sym.simplify(Fbk)
# evalua los coeficientes
a0 = Fak.subs(k,0)/2
b0 = Fbk.subs(k,0)
ak = [a0] ; bk = [b0] ; k_i = [0]
i = 1
whilenot(i>=n):
ak_valor = Fak.subs(k,i)
bk_valor = Fbk.subs(k,i)
ak.append(ak_valor)
bk.append(bk_valor)
k_i.append(i)
i = i+1
coef_fourier = {'k_i': k_i,
'ak' : ak, 'bk': bk}
# serie de Fourier
serieF = ak[0] + 0*t
i = 1
whilenot(i>=n):
serieF = serieF + ak[i]*sym.cos(i*w0*t)
serieF = serieF + bk[i]*sym.sin(i*w0*t)
i = i+1
# espectro de frecuencias k
ak_i = np.array(ak,dtype=float)
bk_i = np.array(bk,dtype=float)
ck_mag = np.sqrt(ak_i**2 + bk_i**2)
ck_fase = np.arctan(-bk_i/ak_i)
revisa0 = (abs(ak_i)>=casicero)
pendiente = -bk_i[revisa0]/ak_i[revisa0]
ck_fase[revisa0] = np.arctan(pendiente)
coef_fourier['ck_mag'] = ck_mag
coef_fourier['ck_fase'] = ck_fase
# SALIDAprint(' expresión ak:')
sym.pprint(Fak)
print('\n ak formato latex')
print(sym.latex(Fak))
print('\n expresión bk:')
sym.pprint(Fbk)
print('\n bk formato latex')
print(sym.latex(Fbk))
print('\n serie de Fourier f(t): ')
sym.pprint(serieF)
print('\n coeficientes ak,bk,Ck_mag,Ck_fase: ')
for uncoef in coef_fourier:
print(uncoef,':',coef_fourier[uncoef])
# Grafica ---------------------import matplotlib.pyplot as plt
# Evaluación para gráfica
f_t = sym.lambdify(t,ft)
serie_ft = sym.lambdify(t,serieF)
ti = np.linspace(float(t_a),float(t_b),muestras)
fi = f_t(ti)
serie_fi = serie_ft(ti)
# Grafica serie de Fourier
fig_serieF, graf_sF = plt.subplots()
graf_sF.plot(ti,fi,label = 'f(t)')
etiqueta = 'coeficientes = '+ str(n)
graf_sF.plot(ti,serie_fi,label = etiqueta)
graf_sF.set_xlabel('ti')
graf_sF.legend()
graf_sF.grid()
graf_sF.set_title('Serie de Fourier f(t); T0='+str(T0))
# plt.show()# grafica de espectro de frecuencia
fig_espectro, graf_sptr = plt.subplots(2,1)
graf_sptr[0].stem(k_i,ck_mag,label='|Ck|')
graf_sptr[0].set_ylabel('ck_mag')
graf_sptr[0].set_title('Espectro de frecuencia ; T0='+str(T0))
graf_sptr[0].legend()
graf_sptr[0].grid()
graf_sptr[1].stem(k_i,ck_fase,label='Ck_fase')
graf_sptr[1].legend()
graf_sptr[1].set_ylabel('ck_fase')
graf_sptr[1].set_xlabel('k_i')
graf_sptr[1].grid()
plt.show()
Usando el ejercicio 1, se muestra el resultado obtenido usando la instrucción incorporada en Sympy. La función truncate(n) aplicada a la serie, permite obtener los n términos no cero. Existen operaciones adicionales para desplazamiento y escala en x que evitan tener que realizar las operaciones nuevamente y optimizan el tiempo del algoritmo
serie de Fourier f(t):
4*cos(t) 4*cos(3*t) 4*cos(5*t)
-------- - ---------- + ---------- + ...
pi 3*pi 5*pi
serie de Fourier f(t), n términos:
/pi\ /3*pi\
4*cos(t)*sinc|--| 4*cos(3*t)*sinc|----|
\4 / \ 4 /
----------------- - ---------------------
pi 3*pi
serie de Fourier f(t), k términos no cero:
4*cos(t) 4*cos(3*t) 4*cos(5*t) 4*cos(7*t)
-------- - ---------- + ---------- - ----------
pi 3*pi 5*pi 7*pi
>>>
Instrucciones en Python
# Serie de Fourier, con n coeficientes# Ref.Chapra 5ed Ejemplo 19.2 p548/pdf572import sympy as sym
# INGRESO
t = sym.Symbol('t')
T0 = 2*sym.pi ; t0 = 0 # periodo ; t_inicio
ft = sym.Piecewise((-1,t <-T0/2),
(-1,t <-T0/4),
( 1,t < T0/4),
(-1,t < T0/2),
(-1,True),)
n = 4 # número de coeficientes
t_a = t0 # intervalo de t =[t_a,t_b]
t_b = t0 + T0
# PROCEDIMIENTO
serieF = sym.fourier_series(ft,(t,t0,t0+T0))
serieFn = sym.expand(serieF.sigma_approximation(n))
serieFk = serieF.truncate(n)
# SALIDAprint('\n serie de Fourier f(t): ')
sym.pprint(serieF)
print('\n serie de Fourier f(t), n términos: ')
sym.pprint(serieFn)
print('\n serie de Fourier f(t), k términos no cero: ')
sym.pprint(serieFk)
Adicionalmente incorpora otras operaciones para el dominio de la frecuencia como desplazamiento y escalamiento en x
Se amplian los conceptos de circuitos pasivos analizados con transformadas e Laplace, aplicando a circuitos activos. Se obtienen los circuitos equivalentes o modelos matemáticos y se repiten los procedimientos anteriores.
El elemento activo más conocido es el amplificador operacional (op amp) que tienen ganancia "muy alta". El voltaje de salida v2 = - A v1, donde A es del orden de 105 o 106. Un factor importante es que la impedancia de entrada es muy alta del orden de 1012Ω y la impedancia de salida es muy baja (50-100Ω)
La configuración de la ganancia se establece con los resistores Ra y Rb y la forma de conectar las entradas y salidas.
K = 1+\frac{R_a}{R_b}v_2 = K v_1v_2 = (R_b + R_a) i_o = R_b i_o + R_a i_ov_2 = v_s = Ra i_o = R_a i_o\frac{v_2}{v_1} =\frac{R_b+R_a}{R_a} = 1+\frac{R_b}{R_a} = K
1. Amplificador Operacional en el dominio s
Referencia: Lathi 4.6-5 p399
Dada la alta impedancia del op amp, la corriente de retroalimentación I(s) fluye solo por los resistores. El voltaje de entrada es cero o muy pequeño dada la ganancia muy grande del op amp. Dadas estas simplificaciones, se aproxima con mucha precisión que:
Observe que las ganancias del sumador son siempre negativas, hay una inversión de signo en cada señal de entrada.
Y(s) = K_1 X_1(s)+K_2 X_2(s)+K_3 X_3(s)
Ejemplo 1. Implementación con Op-Amp
Referencia: Lathi 4.25 p401
Realizar la implementación de un sistema dado por la función de transferencia H(s)
H(s) = \frac{2s+5}{s^2+4s+10}
El diagrama de bloques de la función de transferencia H(s) es,
Se agrupan algunos elementos como sumadores y sus factores de multiplicación. Para referencia se etiqueta cada punto como señal W(s) en cada punto donde el orden del exponente de 's' es diferente.
Se considera la inversión de signo de la señal de entrada por la configuración del amplificador operacional y el factor K de cada rama a usar.
Se identifica el tipo de op amp a usar y se establecen los valores de los resistores en múltiplos de 10KΩ y los capacitores en el orden de 10 μF.