Ejercicio: 1Eva2012TI_T1 LTI CT Polos y ceros de H(s) con respuesta DC conocida
Se revisan los polos y ceros para escribir la función de transferencia,
tomando el modelo proporcionado de la ecuación, se compara para encontrar los valores de las variables
k = 1, b1=0, b2=2.25, a1=2, a2=1.25
Separando en fracciones parciales, dado que el grado M del numerador y grado N denominador son iguales, ganancia el coeficiente del término de mayor grado del numerador. Lo mismo que se obtiene al dividir el numerador y denominador por s2 y hacer s→∞
con lo que 2+k1=0, entonces k1=-2,
también 1.25+k2=2.25, entonces K2 = 1
con lo que se obtiene,
los polos se encuentran sobre el lado izquierdo del plano s, por lo que el sistema es asintoticamente estable
Observe que para H(s) el grado del polinomio el numerador P de H(s) es igual al grado del denominador Q. por lo que M=N. por lo que se considera un función impropia (Lathi 4.3b p339, 4.2 p359). Se genera una respuesta impulso por el valor de la constante 1 que se obtiene al usar fracciones parciales.
Para la transformada inversa, para el término cuadrático, en la tabla de transformadas de Laplace se identifica el caso 12c:
donde A=-2, B=1,a=1,c=1.25
El valor se calcula como:
h(t) = δ(t) + re-atcos (bt+θ) μ(t)
h(t) = δ(t) + 6.3245e-tcos (t/2+1.2490) μ(t)
Algoritmo en Python
Para el bloque de ingreso se debe mantener los coeficientes como números enteros o racionales. Recordando que los algoritmos de Sympy para transformadas de Laplace (hasta versión 1.11) se encuentran escritos para el dominio de los enteros y racionales (‘ZZ’), por lo que los datos se ingresan como:
k1 = sym.Rational(2.25).limit_denominator(100) k2 = sym.Rational(1.25).limit_denominator(100) Hs = (s**2+k1)/(s**2+2*s+k2)
con el resultado mostrado,
H(s) = P(s)/Q(s) 2 9 s + - 4 ------------ 2 5 s + 2*s + - 4 H(s) fracciones parciales: 4*(2*s - 1) - -------------- + 1 2 4*s + 8*s + 5 h(t) : -t /t\ -t /t\ DiracDelta(t) + 6*e *sin|-|*Heaviside(t) - 2*e *cos|-|*Heaviside(t) \2/ \2/ {polos,veces}: {-1 - I/2: 1, -1 + I/2: 1} polos reales: 0 complejos: 2 sobre lado derecho RHP: 0 sobre Eje Imaginario, repetidos: 0 unicos: 0 asintoticamente: estable parametros Q cuadraticos s: {'A': -2.0, 'B': 1.0, 'a': 1.0, 'c': 1.25, 'r': 6.324555320336759, 'b': 0.5, 'theta': 1.2490457723982544}
Con gráficas de H(s) y polos
gráfica de h(t)
Instrucciones en Python
Usando los bloques desarrollados en la telg1001.py que pueden ser usados en cada pregunta.
y las funciones resumidas como# 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/telg1001/ 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 k1 = sym.Rational(2.25).limit_denominator(100) k2 = sym.Rational(1.25).limit_denominator(100) Hs = (s**2+k1)/(s**2+2*s+k2) #Hs = (s**2+2.25)/(s**2+2*s+1.25) # 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 = -1 ; t_b = 5 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) # 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]) # 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') plt.show()
.