{"id":17813,"date":"2017-08-23T09:25:14","date_gmt":"2017-08-23T14:25:14","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=2591"},"modified":"2026-04-06T06:32:58","modified_gmt":"2026-04-06T11:32:58","slug":"transformada-z-respuesta-yn","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u07\/transformada-z-respuesta-yn\/","title":{"rendered":"7.5 Transformada z - Y[z]=ZIR+ZSR con Sympy"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Ejercicio<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi Ejemplo 5.5 p510<\/p>\n\n\n\n<p>continuando con la soluci\u00f3n del ejercicio de condiciones iniciales,<\/p>\n\n\n\n<p class=\"has-text-align-center\">y[n+2] - 5 y[n+1] + 6 y[n] = 3 x[n+1] + 5 x[n]<\/p>\n\n\n\n<p>con las condiciones iniciales y[-1]=11\/16, y[-2]=37\/36,<br>ante una entrada x[n]=(-2)<sup>-n<\/sup>\u03bc[n]<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analitico\">2. Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>Usando notaci\u00f3n de operadores E<\/p>\n\n\n\n<p>y[n]E<sup>2<\/sup> - 5 y[n]E + 6 y[n] = 3 x[n]E + 5 x[n]<\/p>\n\n\n\n<p>(E<sup>2<\/sup> - 5E+ 6)y[n] + condiciones iniciales = (3E+5)x[n]<\/p>\n\n\n\n<p>(E<sup>2<\/sup> - 5E+ 6)y[n] = - condiciones iniciales + (3E+5)x[n]<\/p>\n\n\n\n<p>Q(E)y[n] = - condiciones iniciales + P(E)x[n]<\/p>\n\n\n\n<p>Q(z) = z<sup>2<\/sup>-5z+6<\/p>\n\n\n\n<p>P(z) = 3z+5<\/p>\n\n\n\n<p>En el ejemplo se encuentra que la soluci\u00f3n total de la ecuaci\u00f3n de diferencias se puede separar en dos componentes. El primero es generado por las condiciones iniciales y el segundo por la entrada x[n]<\/p>\n\n\n\n<p>x[n] =2<sup>-n<\/sup> \u03bc[n]=(2<sup>-1<\/sup>)<sup>n<\/sup> \u03bc[n]\u21d4z\/(z-0.5)<\/p>\n\n\n\n<p>(E<sup>2<\/sup> - 5E+ 6)y[n] = - condiciones iniciales + (3E+5)x[n]<\/p>\n\n\n\n<p>(z<sup>2<\/sup> - 5z+ 6)Y[z] = - condiciones iniciales + (3z+5)z\/(z-0.5)<\/p>\n\n\n\n<p>Se aplican las condiciones iniciales, Conociendo que para una <strong>entrada causal<\/strong> x[n]<\/p>\n\n\n\n<p>x[-1] = x[-2] = ... = x[-n] = 0<\/p>\n\n\n\n<p>Tomando el t\u00e9rmino del resultado del algoritmo, Tarea, desarrollar los detalles.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> termino condiciones iniciales: \nz*(11 - 3*z)<\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (z^2 - 5 z + 6 ) Y[z] = - z(-3z +11) + \\frac{z(3z+5)}{(z-0.5)}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (z^2 - 5 z + 6 ) Y[z] = - \\text{condiciones iniciales} + \\text{entrada x[n]} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> Y[z] = \\frac{- z(-3z +11)}{(z^2 - 5 z + 6 )} + \\frac{z(3z+5)}{(z-0.5)(z^2 - 5 z + 6 ) }<\/span>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-border-color has-base-border-color\"><tbody><tr><td><mark style=\"background-color:#FFFFFF;color:#009500\" class=\"has-inline-color\">Respuesta<br><strong>total<\/strong><\/mark><\/td><td><strong>=<\/strong><\/td><td><mark style=\"background-color:#FFFFFF;color:#ff0000\" class=\"has-inline-color\">respuesta a<br><strong>entrada cero<\/strong> ZIR<\/mark><\/td><td><strong>+<\/strong><\/td><td><mark style=\"background-color:#FFFFFF;color:#0000ff\" class=\"has-inline-color\">respuesta a<br><strong>estado cero<\/strong> ZSR<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>continuando luego con el proceso de fracciones parciales y cambio al dominio de tiempo discreto. <\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> Y[z] = \\frac{26}{15}\\frac{z}{z-0.5} - \\frac{7}{3}\\frac{z}{(z-2)}+\\frac{18}{5}\\frac{z}{(z-3)}<\/span>\n\n\n\n<p>Aqu\u00ed se usa la transformada_z inversa con Sympy:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y[n] = \\Bigg[ \\frac{26}{15}(0.5)^n - \\frac{7}{3}(2)^n + \\frac{18}{5}(3)^n \\Bigg] \\mu [n]<\/span>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/Yz_ZIR_ZSR_graf01.png\" alt=\"Yz_ZIR_ZSR_graf01\" class=\"wp-image-20523\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">3. Algoritmo en Python<\/h2>\n\n\n\n<p>Se reutilizan los algoritmos de la secci\u00f3n <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u07\/transformada-z-fracciones-parciales\/\" data-type=\"post\" data-id=\"1447\">Transformada z \u2013 Fracciones parciales<\/a> a lo que se a\u00f1aden las instrucciones de los pasos anteriores.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> Hz {polos:veces} :  {3: 1, 2: 1}\n Hz {ceros:veces} :  {-5\/3: 1}\n\n termino condiciones iniciales: \nz*(11 - 3*z)\ntermino entrada x&#091;n]:  \n2*z*(3*z + 5)\n-------------\n   2*z - 1   \n\n Yz = ZIR_z + ZSR_z:\n  z*(11 - 3*z)        2*z*(3*z + 5)      \n- ------------ + ------------------------\n   2                       \/ 2          \\\n  z  - 5*z + 6   (2*z - 1)*\\z  - 5*z + 6\/\n\n Yz en fracciones parciales z:\n    26*z          7*z         18*z  \n------------ - --------- + ---------\n15*(z - 1\/2)   3*(z - 2)   5*(z - 3)\n\n y&#091;n]:\n\/      n      n       n\\             \n|26*0.5    7*2    18*3 |             \n|------- - ---- + -----|*Heaviside(n)\n\\   15      3       5  \/             \n&gt;&gt;&gt; \n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">&nbsp;Algoritmo en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Transformada z - Fracciones parciales\n# Y(z) = -condicion0+entradaxn = ZIR+ZSR\n# Lathi Ejemplo 5.5 p510\nimport sympy as sym\nimport telg1001 as ss\nsym.SYMPY_DEBUG=False\n\n# INGRESO\nz = sym.Symbol('z')\nn = sym.Symbol('n', real=True)\n\n# se\u00f1al de entrada Xz\n# coeficientes como racional en dominio 'ZZ' enteros\na0 = sym.Rational(1\/2).limit_denominator(1000)\nXz = z\/(z-a0)\n\n# Hz = Pz\/Qz\nPz = 3*z+5\nQz = z**2-5*z+6\nF = Pz\/Qz\n\n# condiciones iniciales ascendente ...,y&#x5B;-2],y&#x5B;-1]\na1 = sym.Rational(37,36) # y&#x5B;-2]=37\/36 \na2 = sym.Rational(11,6)  # y&#x5B;-1]=11\/6\ncond_inicio = &#x5B;a1, a2]\n\n# PROCEDIMIENTO\nFz = sym.simplify(F)\nFz_factor = sym.factor(F.evalf())\nFz_factor = ss._round_float_is_int(Fz_factor)\n\n# polos y ceros de Fz\n&#x5B;P,Q] = Fz.as_numer_denom()\nP = sym.poly(P,z)\nQ = sym.poly(Q,z)\nP_ceros = sym.roots(P)\nQ_polos = sym.roots(Q)\n\n# coeficientes QD\nQ_coef  = Q.coeffs()\nQ_grado = Q.degree()\n\n# T\u00e9rminos de condiciones iniciales\nm0 = len(cond_inicio)\nterm_0 = 0 \nfor j in range(0,Q_grado,1):\n    term_grado = 0\n    for i in range(m0-1-j,m0,1):\n        term_cond0 = cond_inicio&#x5B;i]*(z**((m0-1-j)-i ))\n        term_grado = term_grado + term_cond0\n    term_0 = term_0 + term_grado*Q_coef&#x5B;j+1]\n\n# salida y(t) a entrada x(t)\nterm_0  = sym.simplify(term_0*(z**2))\nterm_xn = sym.simplify(Pz*Xz)\nZIR_z = -sym.simplify(term_0\/Q)\nZSR_z = sym.simplify(term_xn\/Q)\n\n# Y&#x5B;z] = entrada0 + estado0\nYz = ZIR_z + ZSR_z\n\n# Y&#x5B;z] en fracciones parciales y parametros cuadraticos\nYzp = ss.apart_z(Yz)\nQs2 = ss.Q_cuad_z_parametros(Yzp)\n\n# Inversa de transformada z\nyn = 0*n ; Fz_revisar = &#x5B;]\nterm_sum = sym.Add.make_args(Yzp)\nfor term_k in term_sum:\n    term_kn = ss.inverse_z_transform(term_k,z,n)\n    if type(term_kn)==tuple:\n        yn = yn + term_kn&#x5B;0]\n    else:\n        yn = yn + term_kn\nyn = yn.collect(sym.Heaviside(n))\nyn = yn.collect(sym.DiracDelta(n))\nyn = ss._round_float_is_int(yn)\n\n# SALIDA\nprint(' Hz {polos:veces} : ',Q_polos)\nprint(' Hz {ceros:veces} : ',P_ceros)\n\nprint('\\n termino condiciones iniciales: ')\nsym.pprint(term_0)\nprint(' termino entrada x&#x5B;n]:  ')\nsym.pprint(term_xn)\nprint('\\n Yz = ZIR_z + ZSR_z:')\nsym.pprint(Yz)\nprint('\\n Yz en fracciones parciales z:')\nsym.pprint(Yzp)\nif len(Qs2)&gt;0:\n    print('Y&#x5B;z] parametros cuadraticos: ')\n    for Qs2_k in Qs2:\n        print(Qs2_k,':')\n        for cadauno in Qs2&#x5B;Qs2_k].keys():\n            print(cadauno,'\\t',Qs2&#x5B;Qs2_k]&#x5B;cadauno])\nprint('\\n y&#x5B;n]:')\nsym.pprint(yn)\nif len(Fz_revisar)&gt;0:\n    print('\\n --- revisar terminos sin transformada en tabla: ---')\n    for un_term in Fz_revisar:\n        print(un_term)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">4. Gr\u00e1fica en Python de Polos y ceros, y[n]<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/RespuestaYnEj01DiscretoPolosCeros.png\" alt=\"Respuesta Yn Ej01 Discreto Polos Ceros\" class=\"wp-image-20546\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/RespuestaYnEj01DiscretoGrafica.png\" alt=\"Respuesta Yn Ej01 Discreto gr\u00e1fica\" class=\"wp-image-20548\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA ----------\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# para graficar polos y ceros\nf_nombre = 'H'    # nombre de funci\u00f3n&#x5B;z]: H,X,Y, etc\n# grafica de polos y zeros\nfig_ROC = ss.graficar_Fz_polos(Fz_factor,Q_polos,P_ceros,\n                      muestras=101,f_nombre=f_nombre)\n\n\n# graficar f&#x5B;n] -------\nmuestras_fn = 10  # muestras para f&#x5B;n]\nfn = yn  # funcion para grafica\nf_nombre ='y' # nombre de funcion para grafica\n\nf_n = sym.lambdify(n,fn.expand(),modules=ss.equivalentes)\nki  = np.arange(0,muestras_fn,1,dtype=float)\nfi  = f_n(ki)\n\nprint('\\nse\u00f1al discreta '+f_nombre.lower()+'&#x5B;n]')\nprint('n   :',ki)\nprint(f_nombre.lower()+'&#x5B;n]:',fi)\n\n# graficar f&#x5B;n]\nfig_fn, grafxn = plt.subplots()\nplt.axvline(0,color='grey')\nplt.stem(ki,fi)\nplt.grid()\nplt.xlabel('n')\nplt.ylabel(f_nombre.lower()+'&#x5B;n]')\netiqueta = r''+f_nombre.lower()+'&#x5B;n]= $'+str(sym.latex(fn))+'$'\nplt.title(etiqueta)\nplt.tight_layout()\nplt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio anal\u00edtico algoritmo gr\u00e1fica 1. Ejercicio Referencia: Lathi Ejemplo 5.5 p510 continuando con la soluci\u00f3n del ejercicio de condiciones iniciales, y[n+2] - 5 y[n+1] + 6 y[n] = 3 x[n+1] + 5 x[n] con las condiciones iniciales y[-1]=11\/16, y[-2]=37\/36,ante una entrada x[n]=(-2)-n\u03bc[n] Ejercicio anal\u00edtico algoritmo gr\u00e1fica 2. Desarrollo Anal\u00edtico Usando notaci\u00f3n de operadores E y[n]E2 [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-ss-unidades","format":"standard","meta":{"footnotes":""},"categories":[177],"tags":[],"class_list":["post-17813","post","type-post","status-publish","format-standard","hentry","category-ss-u07"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=17813"}],"version-history":[{"count":15,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17813\/revisions"}],"predecessor-version":[{"id":24047,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17813\/revisions\/24047"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=17813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=17813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=17813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}