Ejercicio: 2Eva2011TI_T2 LTI DT Determinar H[z] desde bloques
literal a. expresión de la función de transferencia
El diagrama de bloques del enunciado se reordena de la siguiente forma:
El nuevo diagrama muestra que el sistema tiene dos sub-componentes en paralelo.
H[z] = -\frac{(11/2)z +7}{z^2-1z-2} +\frac{z}{2} -\frac{9}{2}
como existen varios componentes, se pueden tratar de forma separada.
H[z] = H_1[z] +\frac{z}{2} -\frac{9}{2}
H_1[z] = -\frac{(11/2)z +7}{z^2-z-2}
los polos y ceros de H1
{Q_polos:veces}: {2: 1, -1: 1}
{P_ceros:veces}: {-14/11: 1}
H_1[z] = -\frac{(11/2)z +7}{(z-2)(z+1)}
usando fracciones parciales modificadas
\frac{H_1[z]}{z} = -\frac{(11/2)z +7}{z(z-2)(z+1)} = \frac{k_1}{z}+\frac{k_2}{z-2}+\frac{k_3}{z+1}
usando el algoritmo se tiene:
\frac{H_1[z]}{z} = \frac{\frac{7}{2}}{z}-\frac{3}{z-2}-\frac{\frac{1}{2}}{z+1}
restaurando a fracciones parciales, al multiplicar cada lado por z, se obtiene la función de transferencia H[z] completa como componentes en paralelo junto con H1
H_1[z] = \frac{7}{2}-\frac{3z}{z-2}-\frac{1}{2}\frac{z}{z+1}
usando la tabla de transformadas z
h_1[n] = \frac{7}{2}\delta[n]-3(2)^n \mu[n] -\frac{1}{2}(-1)^n \mu[n]
Usando el algoritmo de la sección X[z] Fracciones parciales modificadas con Python para H1[z]
con entrada:
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(11,2)
Pz = -(a0*z+7)
Qz = z**2-z-2
se obtiene:
Hz:
11*z
- ---- - 7
2
----------
2
z - z - 2
Hz en fracciones parciales
z 3*z 7
- --------- - ----- + -
2*(z + 1) z - 2 2
Hz en factores
-3.5*(0.785714285714286*z + 1)
-------------------------------
(0.5*z - 1)*(z + 1)
{Q_polos:veces}: {2: 1, -1: 1}
{P_ceros:veces}: {-14/11: 1}
estabilidad asintótica en z:
circ1_dentro : 0
circ1_repetidos : 0
circ1_sobre : 1
circ1_fuera : 1
unicos : 2
repetidos : 0
asintota : inestable
h[n]:
/ n \
| (-1) n| 7*DiracDelta(n)
|- ----- - 3*2 |*Heaviside(n) + ---------------
\ 2 / 2
señal discreta h[n]
n : [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
h[n]: [ 0. -5.5 -12.5 -23.5 -48.5
-95.5 -192.5 -383.5 -768.5 -1535.5]
resultado que se completan con los términos de los otros componentes, al incorporar la expresión con los elementos en paralelo como se desarrolla en el siguiente literal.
Instrucciones en Python
# Transformada z- Fracciones parciales
# https://blog.espol.edu.ec/telg1001/lti-dt-transformada-z-xz-fracciones-parciales-con-python/
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm
#sym.SYMPY_DEBUG=True
# INGRESO
z = sym.Symbol('z')
n = sym.Symbol('n', real=True)
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(11,2).limit_denominator(100)
Pz = -(a0*z+7)
Qz = z**2-z-2
F = Pz/Qz
# para graficar
f_nombre = 'H' # nombre de función[z]: H,X,Y, etc
muestras_fn = 10 # muestras para f[n]
# PROCEDIMIENTO
Fz = fcnm.apart_z(F)
Fz_factor = sym.factor(F.evalf())
# polos y ceros de Hz
[P,Q] = F.as_numer_denom()
P = sym.poly(P,z)
Q = sym.poly(Q,z)
P_ceros = sym.roots(P)
Q_polos = sym.roots(Q)
estable_z = fcnm.estabilidad_asintotica_z(Q_polos)
# Inversa de transformada z
fn = 0*n ; Fz_revisar = [] ; Qz2_term =[]
term_sum = sym.Add.make_args(Fz)
for term_k in term_sum:
term_kn = fcnm.inverse_z_transform(term_k,z,n)
if type(term_kn)==tuple:
fn = fn + term_kn[0]
elif term_kn is not None:
fn = fn + term_kn
elif term_kn is None:
f_noeval = f_noeval + term_k
Qz2 = fcnm.Q_cuad_z_parametros(term_k)
if Qz2:
Qz2_term.append(Qz2)
fn = fn.collect(sym.Heaviside(n))
fn = fn.collect(sym.DiracDelta(n))
#fn = fcnm._round_float_is_int(fn)
# SALIDA
print('\n '+f_nombre+'z:')
sym.pprint(F)
print('\n '+f_nombre+'z en fracciones parciales')
sym.pprint(Fz)
print('\n '+f_nombre+'z en factores')
sym.pprint(Fz_factor)
print('\n {Q_polos:veces}:',Q_polos)
print(' {P_ceros:veces}:',P_ceros)
if len(Qz2_term)>0:
print('\nparametros cuadraticos: ')
for i in range(0,len(Qz2_term),1):
for unterm in Qz2_term[i]:
print(' termino:',unterm)
fcnm.print_resultado_dict(Qz2_term[i][unterm])
print('\nestabilidad asintótica en z:')
fcnm.print_resultado_dict(estable_z)
print('\n '+f_nombre.lower()+'[n]:')
sym.pprint(fn)
if len(Fz_revisar)>0:
print('revisar terminos sin transformada de tabla:')
for un_term in Fz_revisar:
print(un_term)
# # GRAFICA -----------
fig_ROC = fcnm.graficar_Fz_polos(Fz_factor,Q_polos,P_ceros,
muestras=101,f_nombre=f_nombre)
fig_Fz = fcnm.graficar_Fs(Fz_factor,Q_polos,P_ceros,
muestras=101,
f_nombre=f_nombre)
# graficar f[n] -------
f_n = sym.lambdify(n,fn.expand(),modules=fcnm.equivalentes)
ki = np.arange(0,muestras_fn,1.0)
fi = f_n(ki)
print('\nseñal discreta '+f_nombre.lower()+'[n]')
print('n :',ki)
print(f_nombre.lower()+'[n]:',fi)
# graficar f[n]
fig_fn, grafxn = plt.subplots()
plt.axvline(0,color='grey')
plt.stem(ki,fi)
plt.grid()
plt.xlabel('n')
plt.ylabel(f_nombre.lower()+'[n]')
etiqueta = r''+f_nombre.lower()+'[n]= $'+str(sym.latex(fn))+'$'
plt.title(etiqueta)
plt.show()
literal b. Ecuación de diferencias
Se realiza la conversión por la suma de cada componente (en paralelo):
Para y1[n]:
Y_1[z] = H_1[z]X[z] = \Big[-\frac{(11/2)z +7}{z^2-z-2}\Big] X[z]
Y_1[z] [z^2-z-2]= -(11/2)zX[z] -7X[z]
y_![n+2] - y_1[n+1] -2y_1[n] = -\frac{11}{2} x[n+1] -7x[n]
Para y2[n]:
Y_2[z] = H_2[z]X[z] = \frac{z}{2}X[z]
y_2[n] = \frac{1}{2}x[n+1]
Para y3[n]:
Y_3[z] = H_3[z]X[z] = -\frac{9}{2} X[z]
y_3[n] = -\frac{9}{2} x[n]
se suman las expresiones obtenidas de Y1[z] + Y2[z]+Y3[z]
y[n+2] - y[n+1] -\cancel{2y[n]} +\cancel{y[n]} + \cancel{y[n]}=
-\frac{11}{2} x[n+1] -7x[n] +\frac{1}{2}x[n+1]-\frac{9}{2} x[n]
la ecuación de diferencias simplificada es;
y[n+2] - y[n+1] = -5 x[n+1] -\frac{23}{2} x[n]
El sistema global se puede reescribir nuevamente en z como
z^2Y[z] - zY[z] = -5 zX[z] -\frac{23}{2} X[z]
z(z-1)Y[z] = (-5 z -\frac{23}{2}) X[z]
se tiene que el sistema tienen polos en 0 y 1, que se encuentran dentro del radio 1 del plano z.
literal d. Respuesta al impulso H[z]
H[z] se obtiene a partir de la última ecuación
H[z] = \frac{Y[z]}{H[z]} = -\frac{5 z +\frac{23}{2}}{z(z-1)}
aplicando fracciones parciales modificadas:
\frac{H[z]}{z} = -\frac{5 z +\frac{23}{2}}{z^2(z-1)}
\frac{H[z]}{z} = \frac{33}{2} \frac{1}{z} +\frac{23}{2}\frac{1}{z^2} -\frac{33}{2} \frac{1}{z-1}
restaurando fracciones parciales al multiplicar por z
H[z] = \frac{33}{2} +\frac{23}{2} \frac{1}{z} -\frac{33}{2} \frac{z}{z-1}
usando la tabla de transformada z se tiene:
h[n] = \frac{33}{2}\delta [n] +\frac{23}{2} \delta [n-1] - \frac{33}{2} \mu[n]
usando el algoritmo con entrada:
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(11,2)
a1 = sym.Rational(9,2)
a2 = sym.Rational(23,2)
#F = -(a0*z+7)/(z**2-z-2) + z/2 -a1
F = -(5*z+a2)/(z*(z-1))
se tiene como resultado:
Hz:
-5*z - 23/2
-----------
z*(z - 1)
Hz en fracciones parciales
16.5*z 11.5
- ------ + 16.5 + ----
z - 1 z
Hz en factores
-11.5*(0.434782608695652*z + 1)
--------------------------------
z*(z - 1)
{Q_polos:veces}: {1: 1, 0: 1}
{P_ceros:veces}: {-2.30000000000000: 1}
estabilidad asintótica en z:
circ1_dentro : 1 circ1_repetidos : 0
circ1_sobre : 1 circ1_fuera : 0
unicos : 2 repetidos : 0
asintota : marginalmente estable
h[n]:
16.5*DiracDelta(n) + 11.5*DiracDelta(n - 1) - 16.5*Heaviside(n)
señal discreta h[n]
n : [0. 1. 2. 3. 4. 5. 6.]
h[n]: [ 0. -5. -16.5 -16.5 -16.5 -16.5 -16.5]