{"id":5439,"date":"2017-08-18T11:04:53","date_gmt":"2017-08-18T16:04:53","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=5439"},"modified":"2026-04-06T10:04:07","modified_gmt":"2026-04-06T15:04:07","slug":"transformada-z-unilateral-inversa-sympy","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u07\/transformada-z-unilateral-inversa-sympy\/","title":{"rendered":"7.1.3 Transformada z unilateral e inversa 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=\"#concepto\">Tablas<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/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=\"concepto\">1. Transformada z - referencias para desarrollo con Sympy<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: <strong><em>Tabla de transformadas z<\/em><\/strong>: Lathi Tabla 5.1 Transformada z p492. Oppenheim tabla 10.2 p776, Schaum Hsu Tabla 4-1 p170. <strong><em>Propiedades<\/em><\/strong>:&nbsp; Schaum Hsu Tabla 4-2 p173. Lathi Tabla 5.2 p509. Oppenheim Tabla 10.3 p793<\/p>\n\n\n\n<p>Usando los algoritmos presentados para transformadas z a partir de la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u07\/transformada-z-tabla\/\" data-type=\"post\" data-id=\"1413\">tabla<\/a> y <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u07\/transformada-z-tabla-de-propiedades\/\" data-type=\"post\" data-id=\"17811\">propiedades<\/a>, se incorpora en la instrucci\u00f3n <code>z_transform(f,n,z)<\/code> incorporada en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/algoritmos-telg1001-py\/\" data-type=\"page\" data-id=\"17852\">telg1001.py<\/a>. Para demostraci\u00f3n se desarrollan algunos ejemplos que se desarrollan a partir de la tabla de transformadas z.<\/p>\n\n\n\n<p>Transformada z de impulso unitario \u03b4(t)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; import sympy as sym\n&gt;&gt;&gt; import telg1001 as ss\n&gt;&gt;&gt; n = sym.Symbol('n', real=True)\n&gt;&gt;&gt; z = sym.Symbol('z')\n&gt;&gt;&gt; d = sym.DiracDelta(n)\n&gt;&gt;&gt; f = d\n&gt;&gt;&gt; ss.z_transform(f,n,z)\n1\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>Transformada z de impulso unitario desplazado \u03b4(t-2) y \u03b4(t+2)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; ss.z_transform(f.subs(n,n-2),n,z)\nz**(-2)\n&gt;&gt;&gt; ss.z_transform(f.subs(n,n+2),n,z)\nz**2\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Para comprobar las transformadas de los algoritmos presentados e integrados en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/algoritmos-telg1001-py\/\" data-type=\"page\" data-id=\"17852\">telg1001.py<\/a>, se crea una tabla con expresiones f[n] de prueba en el dominio <code>n<\/code> de tiempo discreto.<\/p>\n\n\n\n<p>Al resultado se aplica la inversa de F[z] que muestra que la expresi\u00f3n es invertible usando la transformada z <strong>unilateral<\/strong>.<\/p>\n\n\n\n<p>El resultado del algoritmo se muestra a continuaci\u00f3n y luego el algoritmo.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>z_transform :  0\n  f&#091;n]: DiracDelta(n)\n  F&#091;z]: (1, 0, True)\n  f&#091;n]: DiracDelta(n)\n\nz_transform :  1\n  f&#091;n]: DiracDelta(n - 2)\n  F&#091;z]: (z**(-2), 0, True)\n  f&#091;n]: DiracDelta(n - 2)\n\nz_transform :  2\n  f&#091;n]: DiracDelta(n + 2)\n  F&#091;z]: (z**2, 0, True)\n  f&#091;n]: DiracDelta(n + 2)\n\nz_transform :  3\n  f&#091;n]: 3*DiracDelta(n + 2)\n  F&#091;z]: (3*z**2, 0, True)\n  f&#091;n]: 3*DiracDelta(n + 2)\n\nz_transform :  4\n  f&#091;n]: -3*DiracDelta(n + 2)\n  F&#091;z]: (-3*z**2, 0, True)\n  f&#091;n]: -3*DiracDelta(n + 2)\n\nz_transform :  5\n  f&#091;n]: Heaviside(n)\n  F&#091;z]: (z\/(z - 1), Abs(z) &gt; 1, True)\n  f&#091;n]: Heaviside(n)\n\nz_transform :  6\n  f&#091;n]: Heaviside(n - 2)\n  F&#091;z]: (1\/(z*(z - 1)), Abs(z) &gt; 1, True)\n  f&#091;n]: Heaviside(n - 2)\n\nz_transform :  7\n  f&#091;n]: Heaviside(n + 2)\n  F&#091;z]: (z**3\/(z - 1), Abs(z) &gt; 1, True)\n  f&#091;n]: DiracDelta(n + 1) + DiracDelta(n + 2) + Heaviside(n)\n\nz_transform :  8\n  f&#091;n]: 3*Heaviside(n + 2)\n  F&#091;z]: (3*z**3\/(z - 1), Abs(z) &gt; 1, True)\n  f&#091;n]: 3*DiracDelta(n + 1) + 3*DiracDelta(n + 2) + 3*Heaviside(n)\n\nz_transform :  9\n  f&#091;n]: n*Heaviside(n)\n  F&#091;z]: (z\/(z - 1)**2, Abs(z) &gt; 1, True)\n  f&#091;n]: n*Heaviside(n)\n\nz_transform :  10\n  f&#091;n]: n**2*Heaviside(n)\n  F&#091;z]: (z*(z + 1)\/(z - 1)**3, Abs(z) &gt; 1, True)\n  f&#091;n]: n**2*Heaviside(n)\n\nz_transform :  11\n  f&#091;n]: n**3*Heaviside(n)\n  F&#091;z]: (z*(z**2 + 4*z + 1)\/(z - 1)**4, Abs(z) &gt; 1, True)\n  f&#091;n]: n**3*Heaviside(n)\n\nz_transform :  12\n  f&#091;n]: 0.5**n*Heaviside(n)\n  F&#091;z]: (z\/(z - 0.5), Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*Heaviside(n)\n\nz_transform :  13\n  f&#091;n]: 0.5**n*Heaviside(n)\n  F&#091;z]: (z\/(z - 0.5), Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*Heaviside(n)\n\nz_transform :  14\n  f&#091;n]: Heaviside(n)\/4**n\n  F&#091;z]: (z\/(z - 1\/4), Abs(z) &gt; 4, True)\n  f&#091;n]: Heaviside(n)\/4**n\n\nz_transform :  15\n  f&#091;n]: -0.5**n*Heaviside(-n - 1)\n  F&#091;z]: (z\/(z - 0.5), Abs(z) &lt; 2, True)\n  f&#091;n]: 0.5**n*Heaviside(n)\n\nz_transform :  16\n  f&#091;n]: 0.5**(n - 1)*Heaviside(n - 1)\n  F&#091;z]: (1\/(z - 1\/2), Abs(z) &gt; 2, True)\n  f&#091;n]: 2*Heaviside(n - 1)\/2**n\n\nz_transform :  17\n  f&#091;n]: 0.25**(n - 1)*Heaviside(n - 1)\n  F&#091;z]: (1\/(z - 1\/4), Abs(z) &gt; 4, True)\n  f&#091;n]: 4*Heaviside(n - 1)\/4**n\n\nz_transform :  18\n  f&#091;n]: 0.5**n*n*Heaviside(n)\n  F&#091;z]: (0.5*z\/(z - 0.5)**2, Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*n*Heaviside(n)\n\nz_transform :  19\n  f&#091;n]: -0.5**n*n*Heaviside(-n - 1)\n  F&#091;z]: (0.5*z\/(z - 0.5)**2, Abs(z) &lt; 2, True)\n  f&#091;n]: 0.5**n*n*Heaviside(n)\n\nz_transform :  20\n  f&#091;n]: 0.5**n*(n + 1)*Heaviside(n)\n  F&#091;z]: z\/(z - 0.5) + 0.5*z\/(z - 0.5)**2\n  f&#091;n]: 0.5**n*(n + 1)*Heaviside(n)\n\nz_transform :  21\n  f&#091;n]: 0.5**n*n**2*Heaviside(n)\n  F&#091;z]: (0.5*z*(z + 0.5)\/(z - 0.5)**3, Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*n**2*Heaviside(n)\n\nz_transform :  22\n  f&#091;n]: 1.33333333333333*0.5**n*n*(n - 2)*(n - 1)*Heaviside(n)\n  F&#091;z]: 1.33333333333333*z\/(z - 0.5)**2 - 2*z*(z + 0.5)\/(z - 0.5)**3 + 1.33333333333333*z*(0.5*z**2 + z + 0.125)\/(z - 0.5)**4\n  f&#091;n]: 4*0.5**n*n*(n - 2)*(n - 1)*Heaviside(n)\/3\n\nz_transform :  23\n  f&#091;n]: cos(2*n)*Heaviside(n)\n  F&#091;z]: (z*(z - cos(2))\/(z**2 - 2*z*cos(2) + 1), Abs(z) &gt; 1, True)\n  f&#091;n]: cos(2*n)*Heaviside(n)\n\nz_transform :  24\n  f&#091;n]: 0.5**n*cos(2*n)*Heaviside(n)\n  F&#091;z]: (z*(z - 0.5*cos(2))\/(z**2 - z*cos(2) + 0.25), Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*cos(2*n)*Heaviside(n)\n\nz_transform :  25\n  f&#091;n]: sin(2*n)*Heaviside(n)\n  F&#091;z]: (z*sin(2)\/(z**2 - 2*z*cos(2) + 1), Abs(z) &gt; 1, True)\n  f&#091;n]: sin(2*n)*Heaviside(n)\n\nz_transform :  26\n  f&#091;n]: 0.5**n*sin(2*n)*Heaviside(n)\n  F&#091;z]: (0.5*z*sin(2)\/(z**2 - z*cos(2) + 0.25), Abs(z) &gt; 2, True)\n  f&#091;n]: 0.5**n*sin(2*n)*Heaviside(n)\n\nz_transform :  27\n  f&#091;n]: cos(2*n + 0.25)*Heaviside(n)\n  F&#091;z]: (z*(0.968912421710645*z + 0.178246055649492)\/(z**2 - 2*z*cos(2) + 1), Abs(z) &gt; 1, True)\n  f&#091;n]: cos(2*n + 0.25)*Heaviside(n)\n\nz_transform :  28\n  f&#091;n]: 3*0.5**n*cos(2*n + 0.25)*Heaviside(n)\n  F&#091;z]: (2.90673726513193*z*(z + 0.0919825423100641)\/(z**2 - z*cos(2) + 0.25), Abs(z) &gt; 2, True)\n  f&#091;n]: 3*0.5**n*cos(2*n + 0.25)*Heaviside(n)<\/code><\/pre>\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=\"#concepto\">Tablas<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/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\">2. Algoritmo en Python<\/h2>\n\n\n\n<p>Las intrucciones se pueden modificar para observar una expresi\u00f3n en detalle si se activa la variable sym.SYMPY_DEBUG=True. Por la extensi\u00f3n del resultado se recomienda activarla para una expresi\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport sympy as sym\nimport telg1001 as ss\nsym.SYMPY_DEBUG = False\n \n# INGRESO\nn = sym.Symbol('n')\nz = sym.Symbol('z')\nu = sym.Heaviside(n)\nd = sym.DiracDelta(n)\n \na0 = sym.Rational(1,4).limit_denominator(100)\n \ntabla = &#x5B;\n           d,\n           d.subs(n,n-2),\n           d.subs(n,n+2),\n           3*d.subs(n,n+2),\n           -3*d.subs(n,n+2),\n           u,\n           u.subs(n,n-2),\n           u.subs(n,n+2),\n           3*u.subs(n,n+2),\n           n*u,\n           (n**2)*u,\n           (n**3)*u,\n           0.5**n*u,((1\/2)**n)*u,(a0**n)*u,\n           -(0.5**n)*u.subs(n,-n-1),\n           (0.5**(n-1))*u.subs(n,n-1),\n           ((1\/4)**(n-1))*u.subs(n,n-1),\n           n*(0.5**n)*u,\n           -n*(0.5**n)*u.subs(n,-n-1),\n           (n+1)*(0.5**n)*u,\n           n**2*(0.5**n)*u,\n           n*(n-1)*(n-2)*(0.5**n)*u\/((0.5**3)*6),\n           sym.cos(2*n)*u,\n           (0.5**n)*sym.cos(2*n)*u,\n           sym.sin(2*n)*u,\n           (0.5**n)*sym.sin(2*n)*u,\n           sym.cos(2*n+0.25)*u,\n           3*(0.5**n)*sym.cos(2*n+0.25)*u\n           ]\n# seleccionar revisar\nrevisar = tabla&#x5B;:]\n \n# revisa detalle de una transformada y la inversa\nif len(revisar)&lt;2:\n    sym.SYMPY_DEBUG = True\nelse:\n    sym.SYMPY_DEBUG = False\n \n# PROCEDIMIENTO\nfor i in range(0,len(revisar),1):\n    f = revisar&#x5B;i]\n    # SALIDA\n    print('\\nz_transform : ', i)\n    print('  f&#x5B;n]:',f)\n    Fz = ss.z_transform(f,n,z)\n    print('  F&#x5B;z]:',Fz)\n    if type(Fz)==tuple:\n        fn = ss.inverse_z_transform(Fz&#x5B;0],z,n)\n    else:\n        fn = ss.inverse_z_transform(Fz,z,n)\n    print('  f&#x5B;n]:',fn)\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=\"#concepto\">Tablas<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Tablas algoritmo 1. Transformada z - referencias para desarrollo con Sympy Referencia: Tabla de transformadas z: Lathi Tabla 5.1 Transformada z p492. Oppenheim tabla 10.2 p776, Schaum Hsu Tabla 4-1 p170. Propiedades:&nbsp; Schaum Hsu Tabla 4-2 p173. Lathi Tabla 5.2 p509. Oppenheim Tabla 10.3 p793 Usando los algoritmos presentados para transformadas z a partir de [&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-5439","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\/5439","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=5439"}],"version-history":[{"count":8,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/5439\/revisions"}],"predecessor-version":[{"id":24075,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/5439\/revisions\/24075"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=5439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=5439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=5439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}