Ejercicio: 1Eva2009TII_T1 LTI CT diagrama canónico y respuesta a impulso
a. A partir del diagrama canónico se puede reordenar, identificando las partes del numerador P(s) y denominador Q(s) para escribir la función de transferencia;

reordenando diagrama:

escribiendo la ecuación como:
H(s) = \Big[ \frac{1}{s^2+3s+2}\Big]\Big[ 3s+2\Big] e^{-3s} H(s) = \Big[ \frac{3s+2}{s^2+3s+2}\Big] e^{-3s}Se usan los polos de la expresión para el denominador Q, para realizar las fracciones parciales:
{polos,veces}: {-1: 1, -2: 1}
H(s) = \Big[ \frac{3s+2}{(s+2)(s+1)} \Big] e^{-3s}
Al enfocarse en H(s) sin usar el retraso e-3s se tiene H1(s)
H_1(s) = \frac{3s+2}{(s+2)(s+1)}y se usa el método de "cubrir" de Heaviside para encontrar las constantes,
k_1 = \frac{3s+2}{\cancel{(s+2)}(s+1)} \Big|_{s=-2} = \frac{3(-2)+2}{(-2+1)}=4 k_2 = \frac{3s+2}{(s+2)\cancel{(s+1)}} \Big|_{s=-1} = \frac{3(-1)+2}{(-1+2)} = -1reemplazando las constantes en H1(s) o mejor en H(s) se obtiene expresiones mas simples en fracciones parciales.
H(s) = \Big[ \frac{4}{s+2}- \frac{1}{s+1}\Big] e^{-3s} H(s) = e^{-3s} \frac{4}{s+2} - e^{-3s}\frac{1}{s+1}b. Usar la tabla de transformadas de Laplace, y la propiedad de desplazamiento en t
h(t) = 4e^{-2(t-3)}\mu(t-3)- e^{-(t-3)}\mu(t-3)Tarea: usar la forma analítica para encontrar la respuesta.
la gráfica de respuesta del sistema ht(t) y la salida y(t) del sistema ante una entrada impulso, serán iguales:

c. ¿Qué puede decir acerca de la estabilidad interna y externa?
Los polos se encuentran en el lado izquierdo del plano, sus componentes son exponenciales decrecientes. Por lo que se considera asintóticamente estable, también es acotado o BIBO estable.
Estabilidad de H(s):
n_polos_real : 2
n_polos_imag : 0
enRHP : 0
unicos : 0
repetidos : 0
asintota : estable


Resultados con el algoritmo:
H(s) = P(s)/Q(s):
/ 4 1 \ -3*s
|----- - -----|*e
\s + 2 s + 1/
H(s) en factores:
-3*s
(3*s + 2)*e
---------------
(s + 1)*(s + 2)
h(t) :
/ 3 -t 6 -2*t\
\- e *e + 4*e *e /*Heaviside(t - 3)
polosceros:
exp(-3*s) : {'Q_polos': {-1: 1, -2: 1},
'P_ceros': {-2/3: 1}}
Q_polos : {-1: 1, -2: 1}
P_ceros : {-2/3: 1}
Estabilidad de H(s):
n_polos_real : 2
n_polos_imag : 0
enRHP : 0
unicos : 0
repetidos : 0
asintota : estable
X(s):
1
Respuesta entrada cero ZIR H(s) y condiciones iniciales
term_cero : 0
ZIR :
0
yt_ZIR :
0
ZSR respuesta estado cero:
ZSR :
/ 4 1 \ -3*s
|----- - -----|*e
\s + 2 s + 1/
yt_ZSR :
/ 3 -t 6 -2*t\
\- e *e + 4*e *e /*Heaviside(t - 3)
Y(s)_total = ZIR + ZSR:
/ 4 1 \ -3*s
|----- - -----|*e
\s + 2 s + 1/
y(t)_total = ZIR + ZSR:
/ 3 -t 6 -2*t\
\- e *e + 4*e *e /*Heaviside(t - 3)
Algoritmo en Python
Para resolver el ejercicio, se define la función H(s) por los polinomios P y Q, la entrada se define como un impulso δ(t).
Usando los bloques desarrollados en la y las funciones resumidas como telg1001.py que pueden ser usados en cada pregunta.
# Y(s) Respuesta total con entada cero y estado cero
# Qs Y(s) = Ps X(s) ; H(s)=Ps/Qs
# https://blog.espol.edu.ec/algoritmos101/senales/
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm
# INGRESO
s = sym.Symbol('s')
t = sym.Symbol('t', real=True)
d = sym.DiracDelta(t)
u = sym.Heaviside(t)
# H(s) y estabilidad
Hs = (3*s+2)/(s**2+3*s+2) * sym.exp(-3*s)
#Hs = 2*(s+5)/((s+4)*(s+3)) * sym.exp(-3*s)
# X(s) Señal de entrada
xt = d #+ d.subs(t,t-2)
# condiciones iniciales, [y'(0),y(0)] orden descendente
t0 = 0
cond_inicio = [0, 0] # estado cero no se usan
# Grafica, intervalo tiempo [t_a,t_b]
t_a = 0 ; t_b = 10
muestras = 101 # 51 resolucion grafica
# PROCEDIMIENTO
Hs = fcnm.apart_s(Hs) # fracciones parciales
Hs_fc = fcnm.factor_exp(Hs) # en factores
Hs_Qs2 = fcnm.Q_cuad_s_parametros(Hs_fc)
polosceros = fcnm.busca_polosceros(Hs)
Q_polos = polosceros['Q_polos']
P_ceros = polosceros['P_ceros']
estable = fcnm.estabilidad_asintotica_s(Q_polos)
# H(t) respuesta al impulso
ht = 0*s
term_suma = sym.Add.make_args(Hs)
for term_k in term_suma:
ht_k = sym.inverse_laplace_transform(term_k,s,t)
# simplifica log(exp()) ej: e**(-2s)/(s**2)
if ht_k.has(sym.log):
ht_k = sym.simplify(ht_k,inverse=True)
ht = ht + ht_k
lista_escalon = ht.atoms(sym.Heaviside)
ht = sym.expand(ht,t) # terminos suma
ht = sym.collect(ht,lista_escalon)
# PROCEDIMIENTO Respuesta ZIR, ZSR
Xs = fcnm.laplace_transform_suma(xt)
# ZIR_s respuesta entrada cero de s
sol_ZIR = fcnm.respuesta_ZIR_s(Hs,cond_inicio)
ZIR = sol_ZIR['ZIR']
yt_ZIR = sol_ZIR['yt_ZIR']
# ZSR respuesta estado cero, Y(s) a entrada X(s)
sol_ZSR = fcnm.respuesta_ZSR_s(Hs,Xs)
ZSR = sol_ZSR['ZSR']
yt_ZSR = sol_ZSR['yt_ZSR']
# Respuesta total Y(s) y y(t)
Ys = ZIR + ZSR
Ys = fcnm.apart_s(Ys)
yt = yt_ZIR + yt_ZSR
lista_escalon = yt.atoms(sym.Heaviside)
yt = sym.collect(yt,lista_escalon)
# SALIDA
print(' H(s) = P(s)/Q(s):')
sym.pprint(Hs)
print(' H(s) en factores:')
sym.pprint(Hs_fc)
if len(Hs_Qs2)>0:
print('\nH(s) parámetros cuadraticos:')
fcnm.print_resultado_dict(Hs_Qs2)
print('\n h(t) :')
sym.pprint(ht)
print('\npolosceros:')
fcnm.print_resultado_dict(polosceros)
print('\nEstabilidad de H(s):')
for k in estable:
print('',k,':',estable[k])
print('\n X(s): ')
sym.pprint(Xs)
print('\nRespuesta entrada cero ZIR H(s) y condiciones iniciales')
if not(sol_ZIR == sym.nan): # existe resultado
fcnm.print_resultado_dict(sol_ZIR)
else:
print(' insuficientes condiciones iniciales')
print(' revisar los valores de cond_inicio[]')
print('\n ZSR respuesta estado cero:')
fcnm.print_resultado_dict(sol_ZSR)
print('\n Y(s)_total = ZIR + ZSR:')
sym.pprint(Ys)
print('\n y(t)_total = ZIR + ZSR:')
sym.pprint(yt)
# Graficas polos, H(s), con polos h(t) --------
muestras_H = 101
figura_s = fcnm.graficar_Fs(Hs_fc,Q_polos,P_ceros,f_nombre='H',solopolos=True)
figura_Hs = fcnm.graficar_Fs(Hs_fc,Q_polos,P_ceros,muestras=muestras_H,f_nombre='H')
figura_ht = fcnm.graficar_ft(ht,t_a,t_b,muestras,f_nombre='h')
# GRAFICAS y(t),x(t),h(t) ---------------------
figura_ft = fcnm.graficar_xh_y(xt,ht,yt,t_a,t_b,muestras)
plt.show()
Referencia: LTI CT Laplace – H(s) Estabilidad del sistema con Python
Ejemplo 3, LTI CT Laplace – H(s) Diagramas de bloques y ecuaciones diferenciales