s2Eva2011TI_T2 LTI DT Determinar H[z] desde bloques

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.

2Eva2011TI_T2 graf Hz polos01

2Eva2011TI_T2 graf Hz polos02

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]

2Eva2011TI_T2 graf Hz polos03

2Eva2011TI_T2 graf Hz polos04

2Eva2011TI_T2 graf Hz polos05