La Transformada z inversa, usa la Tabla de Pares f[n]
y F[z]
y los algoritmos para buscar una expresión semejante F.match() en conjunto con la tabla de propiedades y los algoritmos desarrollados en la sección anterior. El resultado se integra desde telg1001.py y se muestra en los siguientes ejemplos:
Ejemplo 1. Transformada z inversa de una fracción X[1/z]
Referencia: Oppenheim Ejemplo 10.13 p761, Lathi Ejemplo 5.1 p490
Continuando con el ejercicio presentado para convertir x[n] a X[z], se tiene que:
X[z] = \frac{1}{1-a z^{-1}}\text{ , } |z|>|a| X[z] = \frac{z}{z-a}\text{ , } \Big|z|>|a|siendo la expresión de ingreso al algoritmo:
F = z/(z - 2)
el resultado es:
f[n] : (2**n*Heaviside(n), Abs(z) > 2, True) >>>
Ejemplo 1a. Instrucciones Python
# transformada z propiedades con Sympy # aplicar luego de buscar en tabla de pares import sympy as sym import telg1001 as fcnm # INGRESO n = sym.Symbol('n', real=True) z = sym.Symbol('z') u = sym.Heaviside(n) # (a**n)*f[n] <--> F(z/a) F = z/(z - 2) #f = (2**n)*u # PROCEDIMIENTO fn = fcnm.inverse_z_transform(F,z,n) # SALIDA print('f[n] :',fn)
El algoritmo presentado puede ser tomado como punto de partida para los siguientes ejercicios. Realizado para explicación conceptual.
Ejemplo 2. Transformada z inversa usando expansión en fracciones parciales
Referencia: Lathi 5.3 a
Encuentre la transformada z inversa para:
F[z] = \frac{8z-19}{(z-2)(z-3)}el ingreso para el algoritmo del ejercicio anterior es:
F = (8*z-19)/((z-2)*(z-3))
con el resultado siguiente:
f[n] : (9*2**n + 10*3**n)*Heaviside(n)/6 - 19*DiracDelta(n)/6
activando la variable sym.SYMPY_DEBUG=True
, se observa el proceso de fracción parcial modificada, la búsqueda en la tabla, y aplicación de una propiedad de la transformada z.
inverse_z_transform(F,z,n): (8*z - 19)/((z - 3)*(z - 2)) apart_z(F) : (8*z - 19)/((z - 3)*(z - 2)) _simplify_z: (8*z - 19)/((z - 3)*(z - 2)) P_leadcoef: 8 ; P_zc: 1 ; P: z - 19/8 _simplify_z k_sign: 1 ; k: 8 ; P_zc: 1 ; Q_zc: 1 F[z]: (z - 19/8)/((z - 3)*(z - 2)) _simplify_z: (z - 19/8)/(z*(z - 3)*(z - 2)) P_leadcoef: 8 ; P_zc: 1 ; P: z - 19/8 Q_leadcoef: 8 ; Q_zc: z ; Q: (z - 3)*(z - 2) _simplify_z k_sign: 1 ; k: 1 ; P_zc: 1 ; Q_zc: z F[z]: (z - 19/8)/((z - 3)*(z - 2)) P: (8*z - 19)/8 Q: (z - 3)*(z - 2) P_degree: 1 ; P_zeros: {19/8: 1} Q_degree: 3 ; Q_poles: {3: 1, 2: 1, 0: 1} apart(F/z): 3/(16*(z - 2)) + 5/(24*(z - 3)) - 19/(48*z) ma_Qk: {a_: 48, b_: 0, c_: 1} ; ma_Qk2: {b_: 48, a_: 0, c_: 0} _simplify_z: -19/(48*z) P_leadcoef: -19 ; P_zc: 1 ; P: 1 Q_leadcoef: 48 ; Q_zc: z ; Q: 1 _simplify_z k_sign: -1 ; k: 19/48 ; P_zc: 1 ; Q_zc: z F[z]: 1 ma_Qk: {a_: 16, b_: -32, c_: 1} ; ma_Qk2: {b_: 16, c_: -32, a_: 0} _simplify_z: 3/(16*(z - 2)) P_leadcoef: 3 ; P_zc: 1 ; P: 1 Q_leadcoef: 16 ; Q_zc: 1 ; Q: z - 2 _simplify_z k_sign: 1 ; k: 3/16 ; P_zc: 1 ; Q_zc: 1 F[z]: 1/(z - 2) ma_Qk: {a_: 24, b_: -72, c_: 1} ; ma_Qk2: {b_: 24, c_: -72, a_: 0} _simplify_z: 5/(24*(z - 3)) P_leadcoef: 5 ; P_zc: 1 ; P: 1 Q_leadcoef: 24 ; Q_zc: 1 ; Q: z - 3 _simplify_z k_sign: 1 ; k: 5/24 ; P_zc: 1 ; Q_zc: 1 F[z]: 1/(z - 3) apart z*(Fz/z) : 3*z/(2*(z - 2)) + 5*z/(3*(z - 3)) - 19/6 apart_z(F) as partial fractions: (-19/6, 3*z/(2*(z - 2)), 5*z/(3*(z - 3))) term_k[z]: -19/6 [0] _z_pairs_prop_inverse ---- _simplify_z: -19/6 P_leadcoef: -19 ; P_zc: 1 ; P: 1 Q_leadcoef: 6 ; Q_zc: 1 ; Q: 1 _simplify_z k_sign: -1 ; k: 19/6 ; P_zc: 1 ; Q_zc: 1 F[z]: 1 _z_pairs_table match: F: 1 z_pair F[z]: 1 ; ma_z: {} z_pair f[n]: DiracDelta(n) try,check : True -> True [0] pair f[n]: (-19*DiracDelta(n)/6, True, True) term_k[n]: (-19*DiracDelta(n)/6, True, True) term_k[z]: 3*z/(2*(z - 2)) [0] _z_pairs_prop_inverse ---- _simplify_z: 3*z/(2*(z - 2)) P_leadcoef: 3 ; P_zc: 1 ; P: z Q_leadcoef: 2 ; Q_zc: 1 ; Q: z - 2 _simplify_z k_sign: 1 ; k: 3/2 ; P_zc: 1 ; Q_zc: 1 F[z]: z/(z - 2) [1] z_properties_inverse_z_transform P: z Q: z - 2 P_degree: 1 ; P_zeros: {0: 1} Q_degree: 1 ; Q_poles: {2: 1} ma_P1 (a*z+ b): {a_: 1, b_: 0} ma_Q1 (a*z-b)**c : {a_: 1, b_: 2, c_: 1} _z_property multiply (a**n)*f[n] <--> F(z/a) k_sign: 1 ; k: 3/2 ; k_b: 2 F[z]: z/(z - 1) [2] _z_pairs_prop_inverse ---- _simplify_z: z/(z - 1) F[z]: z/(z - 1) _z_pairs_table match: F: z/(z - 1) z_pair F[z]: z/(z - 1) ; ma_z: {} z_pair f[n]: Heaviside(n) try,check : True -> True [2] pair f[n]: (Heaviside(n), Abs(z) > 1, True) _z_property multiply (a**n)*f[n]: (3*2**n*Heaviside(n)/2, Abs(z) > 2, True) [1] _z_properties_inverse f[n]: (3*2**n*Heaviside(n)/2, Abs(z) > 2, True) [0] prop f[n]: (3*2**n*Heaviside(n)/2, Abs(z) > 2, True) term_k[n]: (3*2**n*Heaviside(n)/2, Abs(z) > 2, True) term_k[z]: 5*z/(3*(z - 3)) [0] _z_pairs_prop_inverse ---- _simplify_z: 5*z/(3*(z - 3)) P_leadcoef: 5 ; P_zc: 1 ; P: z Q_leadcoef: 3 ; Q_zc: 1 ; Q: z - 3 _simplify_z k_sign: 1 ; k: 5/3 ; P_zc: 1 ; Q_zc: 1 F[z]: z/(z - 3) [1] z_properties_inverse_z_transform P: z Q: z - 3 P_degree: 1 ; P_zeros: {0: 1} Q_degree: 1 ; Q_poles: {3: 1} ma_P1 (a*z+ b): {a_: 1, b_: 0} ma_Q1 (a*z-b)**c : {a_: 1, b_: 3, c_: 1} _z_property multiply (a**n)*f[n] <--> F(z/a) k_sign: 1 ; k: 5/3 ; k_b: 3 F[z]: z/(z - 1) [2] _z_pairs_prop_inverse ---- _simplify_z: z/(z - 1) F[z]: z/(z - 1) _z_pairs_table match: F: z/(z - 1) z_pair F[z]: z/(z - 1) ; ma_z: {} z_pair f[n]: Heaviside(n) try,check : True -> True [2] pair f[n]: (Heaviside(n), Abs(z) > 1, True) _z_property multiply (a**n)*f[n]: (5*3**n*Heaviside(n)/3, Abs(z) > 3, True) [1] _z_properties_inverse f[n]: (5*3**n*Heaviside(n)/3, Abs(z) > 3, True) [0] prop f[n]: (5*3**n*Heaviside(n)/3, Abs(z) > 3, True) term_k[n]: (5*3**n*Heaviside(n)/3, Abs(z) > 3, True) f[n]: 3*2**n*Heaviside(n)/2 + 5*3**n*Heaviside(n)/3 - 19*DiracDelta(n)/6 f[n]: (9*2**n + 10*3**n)*Heaviside(n)/6 - 19*DiracDelta(n)/6 f[n] : (9*2**n + 10*3**n)*Heaviside(n)/6 - 19*DiracDelta(n)/6 >>>