{"id":17800,"date":"2017-04-15T13:40:33","date_gmt":"2017-04-15T18:40:33","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=552"},"modified":"2026-02-14T15:31:51","modified_gmt":"2026-02-14T20:31:51","slug":"lti-ct-respuesta-estado-cero-scipy-runge-kutta-scilab","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-estado-cero-scipy-runge-kutta-scilab\/","title":{"rendered":"3.4.4 LTI CT - Respuesta a estado cero con Scipy, Runge-Kutta, Scilab"},"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=\"#zsrscipy\" data-type=\"internal\" data-id=\"#zsrscipy\">ZSR scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zsrconvolucion\" data-type=\"internal\" data-id=\"#zsrconvolucion\">ZSR convoluci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#zsrscilab\">ZIR Xcos-Scilab<\/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=\"zsrscipy\">1. Un sistema LTI con <em>Scipy.signal.lti<\/em>() y simulado con <em>Scipy.signal.lsim<\/em>()<\/h2>\n\n\n\n<p>Esta forma de describir el problema, simplifica el desarrollar el ejercicio a partir de la descripci\u00f3n de la ecuaci\u00f3n del sistema.<\/p>\n\n\n\n<p>La librer\u00eda <strong>Scipy<\/strong>.signal permite definir un sistema LTI, usando los coeficientes de la ecuaci\u00f3n y condiciones de inicio en cero.<\/p>\n\n\n\n<p>La salida y(t) se calcula con una versi\u00f3n muestreada <strong>x<\/strong>i de la funci\u00f3n de entrada x(t) a partir del tiempo muestreado en el intervalo [a,b].<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"535\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Sympy.png\" alt=\"respuesta Estado Cero01 Sympy\" class=\"wp-image-19629\" \/><\/figure>\n\n\n\n<p>En el algoritmo se incorpora la gr\u00e1fica de la funci\u00f3n de transferencia h(t) como referencia.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Sistema lineal usando scipy.signal\n#   Q(D)y(t)=P(D)x(t)\n# ejemplo: (D^2+3D+2)y(t)=(D+0)x(t)\nimport numpy as np\nimport scipy.signal as senal\n\n# INGRESO\n# tiempo &#x5B;a,b]\na = 0 ; b = 5 ; muestras=101\n\n# Se\u00f1al de entrada\nu = lambda t: np.piecewise(t,t&gt;=0,&#x5B;1,0])\nx = lambda t: 10*np.exp(-3*t)*u(t)\n\n# Sistema LTI\n# coeficientes Q  P de la ecuaci\u00f3n diferencial\nQ = &#x5B;1., 3., 2.]\nP = &#x5B;1., 0.]\n# condiciones de inicio &#x5B;y'0,y0]\ninicio = &#x5B;0.,0.]\n\n# PROCEDIMIENTO\nti = np.linspace(a, b, muestras)\nxi = x(ti)\n\nsistema = senal.lti(P,Q)\n&#x5B;t_y, yi, yc] = senal.lsim(sistema, xi, ti, inicio)\n&#x5B;t_h, hi] = sistema.impulse(T = ti)\n\n# SALIDA - GRAFICA\nimport matplotlib.pyplot as plt\n\nplt.subplot(211)\nplt.suptitle('Respuesta a estado cero')\nplt.plot(ti, xi, color='blue', label='x(t)')\nplt.plot(t_h, hi, color='red', label='h(t)')\n\nplt.legend()\nplt.grid()\n\nplt.subplot(212)\nplt.plot(t_y, yi, color='magenta', label='y(t)')\n# plt.plot(t_y, yc&#x5B;:,0], 'g-.', label='y(t)')\n# plt.plot(t_y, yc&#x5B;:,1], color='orange', label='y0(t)')\n\nplt.xlabel('t')\nplt.legend()\nplt.grid()\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=\"#zsrscipy\" data-type=\"internal\" data-id=\"#zsrscipy\">ZSR scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zsrconvolucion\" data-type=\"internal\" data-id=\"#zsrconvolucion\">ZSR convoluci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#zsrscilab\">ZIR Xcos-Scilab<\/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=\"zsrconvolucion\">2. La integral de convoluci\u00f3n con Numpy.convolve()<\/h2>\n\n\n\n<p>El algoritmo requiere la expresi\u00f3n de las funciones x(t) y h(t) para determinar y(t). Se realiza el c\u00e1lculo de la convoluci\u00f3n, que para aproximar a la integral requiere multiplicar por dt.<\/p>\n\n\n\n<p>Note que debe mantener el valor dt peque\u00f1o,&nbsp; en el ejercicio se ha definido como 0.01 que corresponden a casi 1000 muestras en el intervalo [-5,5].<\/p>\n\n\n\n<p>Para usar la funci\u00f3n <code>np.convolve()<\/code>, debido a la naturaleza num\u00e9rica del algoritmo, se requieren muestras en tiempos, sim\u00e9tricos alrededor de cero. Al mostrar la gr\u00e1fica, se puede prescindir de la secci\u00f3n negativa, sin embargo, para recordarlo se ha dejado la parte negativa del intervalo de tiempo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.espol.edu.ec\/telg1001\/files\/2018\/02\/respuestaEstadoCero02.png\"><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/telg1001\/files\/2018\/02\/respuestaEstadoCero02.png\" alt=\"\" class=\"wp-image-554\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Se\u00f1ales cont\u00ednuas en convoluci\u00f3n\n# Compare con el algoritmo en forma discreta\n# Lathi ejemplo 2.6 p166\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# INGRESO\nu = lambda t: np.heaviside(t,1)\n# u = lambda t: np.piecewise(t,t&gt;=0,&#x5B;1,0])\n\nx = lambda t: 10*np.exp(-3*t)*u(t)\nh = lambda t: (2*np.exp(-2*t)-np.exp(-t))*u(t)\n\n# tiempo &#x5B;a,b] sim\u00e9trico alrededor de 0\nb = 5 ; a = -b\ndt = 0.01\n\n# PROCEDIMIENTO\nti = np.arange(a,b+dt,dt)\nxi = x(ti)\nhi = h(ti)\n\n# Integral de Convolucion x&#x5B;t]*h&#x5B;t]\n# correcci\u00f3n de magnitud por dt para en integral\nyi = np.convolve(xi,hi,'same')*dt\n\n# SALIDA - GRAFICA\nplt.suptitle('Integral de Convoluci\u00f3n x(t)*h(t)')\n\nplt.subplot(211)\nplt.plot(ti,xi,'b', label='x(t)')\nplt.plot(ti,hi,'r', label='h(t)')\nplt.legend()\nplt.grid()\n\nplt.subplot(212)\nplt.plot(ti,yi,'m', label='x(t)*h(t)')\nplt.xlabel('t')\nplt.legend()\nplt.grid()\n\nplt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zsrnumpy\">2.1. La integral de convoluci\u00f3n con algoritmo num\u00e9rico<\/h2>\n\n\n\n<p>Esta secci\u00f3n desarrolla el algoritmo para la integral de convoluci\u00f3n, tomando paso a paso las operaciones para obtener la gr\u00e1fica del resultado.<\/p>\n\n\n\n<p>El algoritmo se presenta con prop\u00f3sitos did\u00e1cticos, pues parece ser un poco m\u00e1s lento debido a que se realizan las operaciones de forma b\u00e1sica (interpretada) de Python. La funci\u00f3n <code>np.convolve()<\/code> usa elementos compilados a lenguaje de maquina que se ejecutan de forma m\u00e1s eficiente.<\/p>\n\n\n\n<p>Note que la \u00fanica secci\u00f3n que cambia es la de convoluci\u00f3n, por lo que la gr\u00e1fica de salida es la misma que la secci\u00f3n anterior:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Se\u00f1ales cont\u00ednuas en convoluci\u00f3n. Algoritmo num\u00e9rico.\n# compare con el algoritmo en forma discreta\n# Lathi ejemplo 2.6 p166\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# INGRESO\nu = lambda t: np.heaviside(t,1)\n# u = lambda t: np.piecewise(t,t&gt;=0,&#x5B;1,0])\nx = lambda t: 10*np.exp(-3*t)*u(t)\nh = lambda t: (2*np.exp(-2*t)-np.exp(-t))*u(t)\n\n# tiempo &#x5B;a,b] sim\u00e9trico alrededor de 0\nb = 5 ; a = -b\ndt = 0.01\n\n# PROCEDIMIENTO\nti = np.arange(a,b+dt,dt)\nxi = x(ti)\nhi = h(ti)\n\n# Integral de Convoluci\u00f3n x&#x5B;t]*h&#x5B;t]\nmuestras = len(xi)\nyi = np.zeros(muestras, dtype=float)\nfor i in range(0,muestras):\n    suma=0\n    for k in range(0,muestras):\n        suma = suma + x(ti&#x5B;k])*h(ti&#x5B;i]-ti&#x5B;k])\n    yi&#x5B;i]= suma*dt\n\n# SALIDA - GRAFICA\nplt.suptitle('Integral de Convoluci\u00f3n x(t)*h(t)')\n\nplt.subplot(211)\nplt.plot(ti,xi,'b', label='x(t)')\nplt.plot(ti,hi,'r', label='h(t)')\nplt.legend()\nplt.grid()\n\nplt.subplot(212)\nplt.plot(ti,yi,'m', label='x(t)*h(t)')\nplt.xlabel('t')\nplt.legend()\nplt.grid()\n\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=\"#zsrscipy\" data-type=\"internal\" data-id=\"#zsrscipy\">ZSR scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zsrconvolucion\" data-type=\"internal\" data-id=\"#zsrconvolucion\">ZSR convoluci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#zsrscilab\">ZIR Xcos-Scilab<\/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=\"zsrscilab\">3. ZSR con Xcos-Scilab<\/h2>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (D^2 + 3D +2)y(t) = Dx(t) <\/span>\n\n\n\n<p>Al diagrama desarrollado en la secci\u00f3n Respuesta entrada cero \u2013 Diagrama Bloques, se a\u00f1aden los bloques para formar la se\u00f1al de entrada x(t). La variable tiempo se indica con el Bloque Reloj, el escal\u00f3n \u03bc(t) se configura para empezar en cero y el valor -3 del exponente se los indica con un bloque de ganancia antes de e<sup>u<\/sup>.<\/p>\n\n\n\n<p>Para diferenciaci\u00f3n de los bloques por secci\u00f3n, la<strong> entrada<\/strong> se usa el color azul, el <strong>sistema<\/strong> en color naranja y la <strong>salida<\/strong> en color morado.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"521\" height=\"261\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Blk.png\" alt=\"respuesta Estado Cero 01 Blk\" class=\"wp-image-19845\" \/><\/figure>\n\n\n\n<p>Para continuar con la simulaci\u00f3n, aseg\u00farese que no existan condiciones iniciales en el sistema, es decir los valores de estado inicial para los bloques 1\/s se encuentren en cero.<\/p>\n\n\n\n<p>Los osciloscopios de observaci\u00f3n, tienen su propia referencia de tiempo con otro reloj. El osciloscopio de la se\u00f1al de <strong>entrada<\/strong> x(t) se muestra primero, y la <strong>salida<\/strong> en la gr\u00e1fica posterior.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"273\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Blk02.png\" alt=\"respuesta Estado Cero 01 Blk 02\" class=\"wp-image-19846\" \/><\/figure>\n\n\n\n<p>La <strong>se\u00f1al de salida<\/strong> se obtiene de forma semejante a la respuesta a impulso, es decir en el punto donde est\u00e1 la primera derivada. Revisar teor\u00eda para aplicar la forma: P(D)[y(t)\u03bc(t)], que en \u00e9ste ejercicio se aplica una D.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"273\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Blk03.png\" alt=\"respuesta Estado Cero 01 Blk 03\" class=\"wp-image-19847\" \/><\/figure>\n\n\n\n<p>El resultado de y(t), solo como referencia, es el que se obtiene en el osciloscopio ubicado a la derecha abajo del diagrama.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"273\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Blk04.png\" alt=\"respuesta Estado Cero 01 Blk 04\" class=\"wp-image-19848\" \/><\/figure>\n\n\n\n<p>Con lo que se muestra que es posible observar resultados usando algunos bloques en un simulador.<\/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=\"#zsrscipy\" data-type=\"internal\" data-id=\"#zsrscipy\">ZSR scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zsrconvolucion\" data-type=\"internal\" data-id=\"#zsrconvolucion\">ZSR convoluci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#zsrscilab\">ZIR Xcos-Scilab<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>ZSR scipy ZSR convoluci\u00f3n ZIR Xcos-Scilab 1. Un sistema LTI con Scipy.signal.lti() y simulado con Scipy.signal.lsim() Esta forma de describir el problema, simplifica el desarrollar el ejercicio a partir de la descripci\u00f3n de la ecuaci\u00f3n del sistema. La librer\u00eda Scipy.signal permite definir un sistema LTI, usando los coeficientes de la ecuaci\u00f3n y condiciones de inicio [&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":[171],"tags":[],"class_list":["post-17800","post","type-post","status-publish","format-standard","hentry","category-ss-u03"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17800","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=17800"}],"version-history":[{"count":3,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17800\/revisions"}],"predecessor-version":[{"id":21517,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17800\/revisions\/21517"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=17800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=17800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=17800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}