Ejercicio: 2Eva2016TII_T3 LTI DT sistemas en serie
literal a
S1: w[n] = \frac{1}{2}w[n-1] + x[n]
S2: y[n] = \alpha y[n-1] + \beta w[n]
SG: y[n] = -\frac{1}{8}y[n-2] + \frac{3}{4}y[n-1]+x[n]
usando transformada z:
S1:
W(z) = \frac{1}{2} z^{-1} W(z) + X(z)
W(z) - \frac{1}{2} z^{-1} W(z) = X(z)
W(z)\Big[1 - \frac{1}{2} z^{-1} \Big] = X(z)
W(z) = \frac{ X(z)}{\Big[1 - \frac{1}{2} z^{-1} \Big]}
S2:
Y(z) = \alpha z^{-1} Y(z) + \beta W(z)
Y(z) - \alpha z^{-1} Y(z) = \beta W(z)
Y(z) \Big[1 - \alpha z^{-1} \Big] = \beta W(z)
sustituyendo la ecuacion de S1 para W(z)
Y(z) \Big[1 - \alpha z^{-1} \Big] = \beta \frac{ X(z)}{\Big[1 - \frac{1}{2} z^{-1} \Big]}
Y(z) \frac{1}{\beta} \Big[1 - \alpha z^{-1} \Big]\Big[1 - \frac{1}{2} z^{-1} \Big] = X(z)
Y(z) \Big[ \frac{1}{\beta} - \frac{1/2+\alpha}{\beta} z^{-1}+ \frac{1}{2} \frac{\alpha}{\beta} z^{-2}\Big]= X(z)
SG:
Y(z) = -\frac{1}{8} z^{-2} Y(z) + \frac{3}{4} z^{-1}Y(z)+X(z)
Y(z)+\frac{1}{8} z^{-2} Y(z) - \frac{3}{4} z^{-1}Y(z) = X(z)
Y(z)\big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big] = X(z)
comparando con la ecuación de S2
\frac{1}{\beta} = 1
\beta = 1
\frac{1}{2} \frac{\alpha}{\beta} = \frac{1}{8}
\alpha = \frac{2\beta}{8} = \frac{1}{4}
comprobar con
- \frac{1/2+\alpha}{\beta} = \frac{3}{4}
se confirma que α = 1/4 y β=1
la función de transferencia es:
Y(z)\Big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big] = X(z)
\frac{Y(z)}{X(z)} = \frac{1}{\Big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big]}
H(z) = \frac{z^2}{z^2 - \frac{3}{4} z +\frac{1}{8}}
\frac{H(z)}{z} = \frac{z}{z^2 - \frac{3}{4} z +\frac{1}{8}}
usando las raices para:
z^2 - \frac{3}{4} z +\frac{1}{8} = \Big[ z-\frac{1}{4}\Big] \Big[z-\frac{1}{2}\Big]
y la parte derecha de la ecuación:
\frac{z}{\Big[ z-\frac{1}{4}\Big] \Big[z-\frac{1}{2}\Big]} = \frac{C_1}{z-\frac{1}{4}}+\frac{C_2}{z-\frac{1}{2}}
despejando para C1 y haciendo z=1/4,
C_1 = \frac{z}{\Big[z-\frac{1}{2}\Big]} = \frac{\frac{1}{4}}{\Big[\frac{1}{4}-\frac{1}{2}\Big]} = -1
despejando para C2 y haciendo z=1/2,
C_2 = \frac{z}{\Big[z-\frac{1}{4}\Big]} = \frac{\frac{1}{2}}{\Big[\frac{1}{2}-\frac{1}{4}\Big]} = 2
se H(z) se resume en,
H(z) = - \frac{z}{z - \frac{1}{4}} +2\frac{z}{z-\frac{1}{2}}
Para obtener h[n] usando la antitransformada,
h[n]=z^{-1} \Big[ H(z) \Big]
h[n]=z^{-1} \Big[- \frac{z}{z - \frac{1}{4}} +2\frac{z}{z-\frac{1}{2}} \Big]
h[n]= 2 \Big[ \frac{1}{2}\Big]^n \mu [n] + \Big[ \frac{1}{4}\Big]^n \mu [n]
h[n]= \Bigg[ 2 \Big[ \frac{1}{2}\Big]^n - \Big[ \frac{1}{4}\Big]^n \Bigg] \mu [n]
siendo la forma de la respuesta un impulso, es un sistema IIR.
Algoritmo en Python
Usando la expresión H(z) se obtiene:
Hz:
2
z
------------
2 3*z 1
z - --- + -
4 8
Hz en fracciones parciales
z 2*z
- ------- + -------
z - 1/4 z - 1/2
Hz en factores
2
z
--------------------
(z - 0.5)*(z - 0.25)
{Q_polos:veces}: {1/2: 1, 1/4: 1}
{P_ceros:veces}: {0: 2}
estabilidad asintótica en z:
circ1_dentro : 2
circ1_repetidos : 0
circ1_sobre : 0
circ1_fuera : 0
unicos : 2
repetidos : 0
asintota : estable
h[n]:
/ n n\
\- 0.25 + 2*0.5 /*Heaviside(n)
>>>
añadiendo instrucciones para graficar h[n] se obtiene
señal discreta h[n]
n : [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
h[n]: [1. 0.75 0.4375 0.234375 0.12109375
0.06152344 0.03100586 0.01556396 0.00779724 0.00390244]
Instrucciones en Python
strong>Nota: cuando se produzca el siguiente error con Numpy para evaluar una expresión con exponente negativo,
Traceback (most recent call last):
File "D:\MATG1052Ejemplos\Transformadaz\ejercicio....py", line 93, in
fi = f_n(ki)
File "", line 2, in _lambdifygenerated
return (9/59)*4**(-n)*Heaviside(n, 1/2)
ValueError: Integers to negative integer powers are not allowed.
proceda actualizando los valores a evaluar como tipo real (dtype float), tan solo usando en la línea de ki con lo siguiente:
ki = np.arange(0,muestras_fn,1.0)
quedando las instrucciones de la siguiente forma, que si evalua valores para realizar gráficas.
# Transformada z- Fracciones parciales
# http://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(3,4)
a1 = sym.Rational(1,8)
Pz = z**2
Qz = z**2-a0*z+a1
#Pz = z*z**2
#Qz = (z-1)*(z**2-(a0)*z+a1)
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())
Fz_factor = fcnm._round_float_is_int(Fz_factor)
# polos y ceros de Hz
[P,Q] = Fz.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 c
revisando los polos y ceros:
ceros : z = 0 y z = 0
polos: z=1/4 y z=1/2
Dado que todos los polos se encuentran dentro del círculo de radio unitario , el sistema es asintóticamente estable, por lo que es BIBO o EASA estable
literal d
S(z) = \Big[ \frac{z}{z-1} \Big] \frac{z^2}{z^2-\frac{3}{4}z + \frac{1}{8}}
S(z) = \frac{z^3}{(z-1)(z-1/4)(z-1/2)}
aplicando el mismo método anterior, se tiene:
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(3.4)
a1 = sym.Rational(1,8)
Pz = z*z**2
Qz = (z-1)*(z**2-(a0)*z+a1)
F = Pz/Qz
# para graficar
f_nombre = 'S' # nombre de función[z]: H,X,Y, etc
muestras_fn = 10 # muestras para f[n]
con resultado:
Sz:
3
z
----------------------
/ 2 3*z 1\
(z - 1)*|z - --- + -|
\ 4 8/
Sz en fracciones parciales
z 2*z 8*z
----------- - ------- + ---------
3*(z - 1/4) z - 1/2 3*(z - 1)
Sz en factores
3
z
----------------------------
(z - 1)*(z - 0.5)*(z - 0.25)
{Q_polos:veces}: {1: 1, 1/2: 1, 1/4: 1}
{P_ceros:veces}: {0: 3}
s[n]:
/ n \
|0.25 n 8|
|----- - 2*0.5 + -|*Heaviside(n)
\ 3 3/
S(z) = \frac{1}{3}\frac{z}{z-1/4} -2\frac{z}{z-1/2} + \frac{8}{3}\frac{z}{z-1}
aplicando la transformada inversa
s(n)= \Bigg[ \frac{1}{3}\Big[ \frac{1}{4} \Big]^n -2\Big[\frac{1}{2} \Big]^n + \frac{8}{3} \Bigg] \mu [n]
señal discreta s[n]
n : [0 1 2 3 4 5 6 7 8 9]
h[n]: [1. 1.75 2.1875 2.421875
2.54296875 2.60449219 2.63549805 2.65106201 2.65885925
2.66276169]