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,
H(s) = \frac{(s-ceros_0)(s-ceros_1)}{(s-polo_0)(s-polo_1)} H(s) = \frac{(s-(-1.5j))(s-(1.5j))}{(s-(-1+0.5j))(s-(-1-0.5j))} H(s) = \frac{s^2+2.25}{s^2+2s+1.25}tomando el modelo proporcionado de la ecuación, se compara para encontrar los valores de las variables
H(s) = \frac{k (s^2 + b_1 s + b_2)}{s^2 + a_1 s + a_2}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→∞
H(s) = \frac{1+\frac{2.25}{s^2}}{1+2\frac{1}{s}+\frac{1.25}{s^2}} \Big|_{s=\infty} =1 H(s) = 1+\frac{k_1s+k_2}{s^2+2s+1.25} H(s) = \frac{s^2+2s+1.25+k_1s+k_2}{s^2+2s+1.25} H(s) = \frac{s^2+(2+k_1)s+(1.25+k_2)}{s^2+2s+1.25}con lo que 2+k1=0, entonces k1=-2,
también 1.25+k2=2.25, entonces K2 = 1
con lo que se obtiene,
H(s) = 1+\frac{-2s +1}{s^2 + 2 s + 1.25}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:
\frac{As+B}{s^2+2as+c} donde A=-2, B=1,a=1,c=1.25
El valor b = \sqrt{c-a^2} se calcula como:
b = \sqrt{1.25-(1)^2} = \frac{1}{2} r = \sqrt{\frac{A^2 c +B^2 -2ABa}{c-a^2}} r = \sqrt{\frac{(-2)^2 (1.25) +(1)^2 -2(-2)(1)(1)}{1.25-(-2)^2}} =\sqrt{\frac{10}{1/4}} = 6.3245 \theta = \tan ^{-1} \Big( \frac{Aa-B}{A\sqrt{c-a^2}}\Big) \theta = \tan ^{-1} \Big( \frac{(-2)(1)-(1)}{(-2)\sqrt{1.25-(1)^2}}\Big)\tan ^{-1}(\frac{-3}{-2(1/2)} = 1.2490h(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 # http://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()
.