{"id":4579,"date":"2017-04-09T10:20:40","date_gmt":"2017-04-09T15:20:40","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=4579"},"modified":"2026-04-14T06:06:52","modified_gmt":"2026-04-14T11:06:52","slug":"lti-ct-causalidad-ht-integral-convolucion","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-causalidad-ht-integral-convolucion\/","title":{"rendered":"3.4.1 LTI CT Causalidad de h(t) para Integral del Convoluci\u00f3n 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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/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=\"causalidad\">1. Revisar causalidad<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi Ej 2.8 p173.<\/p>\n\n\n\n<p>La funci\u00f3n h(t) o <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-a-impulso\/\" data-type=\"post\" data-id=\"190\">respuesta al impulso<\/a> se compone de un t\u00e9rmino de impulso y un escal\u00f3n que multiplica a los modos caracter\u00edsticos de la ecuaci\u00f3n diferencial.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=b_0 \\delta (t)+ [P(D)y_n (t)] \\mu (t)<\/span>\n\n\n\n<p>La comprobaci\u00f3n de causalidad considera tomar como referencia la b\u00fasqueda de un \u03b4(t) o un \u03bc(t) del lado derecho del plano, t\u22650. <strong><em>Se considera que el sistema responde solo cuando le llega una se\u00f1al a partir de<\/em> t\u22650<\/strong>, por lo que los componentes de h(t) deben encontrarse en el lado derecho del plano.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"354\" height=\"292\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/causal_ht_funciones.png\" alt=\"causal ht funciones\" class=\"wp-image-19644\" \/><\/figure>\n\n\n\n<p>La causalidad de h(t) se usa para determinar los l\u00edmites del integral de convoluci\u00f3n que facilitan las operaciones para obtenerlo. El algoritmo de comprobaci\u00f3n de causalidad se compone de las partes para analizar la expresi\u00f3n de h(t) descritas en la imagen.<\/p>\n\n\n\n<p>Se propone desarrollar algunos ejercicios de forma progresiva, empezando de lo simple hacia lo mas complejo.<\/p>\n\n\n\n<p>Para generalizar el algoritmo, en adelante h(t) se denominar\u00e1 f(t).<\/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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/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=\"buscadt\"><a name=\"busca_impulso\"><\/a>2. Ejemplo: busca el punto t donde se produce el impulso \u03b4(t)<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: h(t) de Lathi Ej. 2.13 p200<\/p>\n\n\n\n<p>El primer objetivo es determinar si tan solo un t\u00e9rmino simple contiene un impulso \u03b4(t), no existen otros t\u00e9rminos sumados. El t\u00e9rmino puede estar desplazado o multiplicado por otros factores.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># entrada x(t)<\/span>\n<span style=\"color: #ff0000\"># h = d<\/span>\nh = 2*sym.pi*d.subs(t,t-2)\n<span style=\"color: #ff0000\"># h = 2*d.subs(t,t-1)<\/span>\n<span style=\"color: #ff0000\"># h = 3*d.subs(t,t+1)<\/span>\n<span style=\"color: #ff0000\"># h = 5*sym.exp(-t)*d<\/span><\/code><\/pre>\n\n\n\n<p>La instrucci\u00f3n para revisar que a\u00fan no existan de t\u00e9rminos de suma es <code>not(ft.is_Add)<\/code>.<\/p>\n\n\n\n<p>Si f(t) tiene un impulso se puede revisar con <code>ft.has(sym.DiracDelta)<\/code>, que inicialmente ser\u00eda suficiente para los objetivos del ejercicio. Sin embargo en ejercicios posteriores y de evaluaci\u00f3n se encontrar\u00e1 que estas funciones se pueden desplazar hacia un lado del plano, tal como un retraso en el tiempo de procesamiento. Por lo que se considera necesario determinar el punto t <code>donde<\/code> se aplica el impulso y observar si es en el lado derecho del plano, t\u22650.<\/p>\n\n\n\n<p>La funci\u00f3n a usar se desarrollada para <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/busca-impulso-escalon-unitario-sympy\/\" data-type=\"post\" data-id=\"17803\">buscar impulsos unitarios<\/a> en una expresi\u00f3n es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>donde_d = ss.busca_impulso(h)<\/code><\/pre>\n\n\n\n<p>En el caso de disponer de varios valores, es de inter\u00e9s el valor que se encuentre m\u00e1s hacia la izquierda, es decir los valores encontrados deben ser ordenados previamente. Si los impulsos ocupan solamente el lado derecho del plano, el sistema es causal.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndonde_d = ss.busca_impulso(h)\n\n# Causal en RHS\nhcausal = False\nif len(donde_d)&gt;0:\n    donde=donde_d&#x5B;0] # extremo izquierdo\n    if donde&gt;=0:  # lado derecho del plano\n        hcausal=True\n<\/pre><\/div>\n\n\n<p>Para el siguiente ejemplo se deber\u00eda obtener:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>h(t):\n2\u22c5\u03c0\u22c5\u03b4(t - 2)\nhcausal:  True<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"539\" height=\"435\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/causalidadht_01Sympy.png\" alt=\"causalidad ht 01 Sympy\" class=\"wp-image-19645\" \/><\/figure>\n\n\n\n<p>con gr\u00e1fica mostrando la causalidad de h(t) como un retraso de la entrada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Revisar causalidad de ft(t) en sympy\n# considera causal h(t)=b0*d + (modos caracteristicos)*u\n# Parte 1 comprueba solo impulso d(t) \nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t',real=True)\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# entrada x(t)\n# h = d\nh = 2*sym.pi*d.subs(t,t-2)\n# h = d.subs(t,t-1)\n# h = 3*d.subs(t,t+1)\n# h = 5*sym.exp(-t)*d\n# h = 4\n\n# grafica intervalo &#x5B;t_a,t_b] simetrico a 0\nt_a = -4\nt_b = 4\nmuestras = 51\n\n# PROCEDIMIENTO\ndonde_d = ss.busca_impulso(h)\n\n# Causal en RHS\nhcausal = False\nif len(donde_d)&gt;0:\n    donde=donde_d&#x5B;0] # extremo izquierdo\n    if donde&gt;=0:  # lado derecho del plano\n        hcausal=True\n\n# SALIDA\nprint('h(t):')\nsym.pprint(h)\nprint('hcausal: ',hcausal)\n\n# GRAFICA\nfigura_h = ss.graficar_ft(h,t_a,t_b,f_nombre='h')\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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/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=\"buscaut\">3. Ejemplo: f(t) es causal si contiene escal\u00f3n unitario&nbsp;\u03bc(t) en un termino simple, sin sumas, N&gt;M<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi 2.6-3 p206, Ej.2.13 p188<\/p>\n\n\n\n<p>Ahora considere&nbsp; un termino de los modos caracter\u00edsticos multiplicado por un <strong>escal\u00f3n unitario \u03bc(t)<\/strong> seg\u00fan el modelo de respuesta a impulso h(t).<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=0 \\delta (t)+ [P(D)y_n (t)] \\mu (t)<\/span>\n\n\n\n<p>la causalidad del escal\u00f3n requiere primero encontrar desde d\u00f3nde se aplican y luego la direcci\u00f3n o sentido. De forma semejante a la b\u00fasqueda de impulsos, se crea una funci\u00f3n que busque el escal\u00f3n e indique [donde, sentido]<\/p>\n\n\n\n<p>Para un escal\u00f3n unitario hacia la derecha se tiene como punto de partida que <code>causal=False<\/code>, cambiando a <code>True<\/code> en el caso que el impulso se encuentre a la derecha del plano y el sentido sea positivo.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ncausal = False\nh = ss.simplifica_escalon(h) # h(t-a)*h(t-b)\nif h.has(sym.Heaviside): #sin factores\n    donde_u = busca_escalon(h)\n    if len(donde_u)&gt;0:\n        donde   = donde_u&#x5B;0]&#x5B;0]\n        sentido = donde_u&#x5B;0]&#x5B;1]\n        if donde&gt;=0 and sentido&gt;0:\n            causal = True\n<\/pre><\/div>\n\n\n<p>El resultado esperado del algoritmo, para un caso es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>h(t):\n\u03b8(t - 1)\nbusca_impulso: &#091;]\nbusca_escalon(ft): &#091;&#091;1, 1]]\nxcausal:  True<\/code><\/pre>\n\n\n\n<p>en la gr\u00e1fica se observa el desarrollo hacia el lado derecho,<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/blog.espol.edu.ec\/telg1001\/files\/2017\/03\/causalidadht_02Sympy.png\"><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/telg1001\/files\/2017\/03\/causalidadht_02Sympy.png\" alt=\"\" class=\"wp-image-4585\" \/><\/a><\/figure>\n\n\n\n<p>debiendo realizar otras pruebas para verificar o mejorar el algoritmo.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Revisar causalidad de ft(t) en sympy\n# considera causal h(t)=b0*d + (modos caracteristicos)*u\n# Parte 2 comprueba solo escalon u(t) \nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t',real=True)\nk = sym.Symbol('k',real=True)\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# entrada x(t)\n# h = u\nh = u.subs(t,t-1)\n# h = u.subs(t,t+1)\n# h = 5\n\n# grafica intervalo &#x5B;t_a,t_b] simetrico a 0\nt_b = 4 ; t_a = -t_b\nmuestras = 51\n\n# PROCEDIMIENTO\ndonde_u = ss.busca_escalon(h)\n\n# Causal en RHS\ncausal = False\nif len(donde_u)&gt;0: # existe un escalon unitario\n    donde   = donde_u&#x5B;0]&#x5B;0]\n    sentido = donde_u&#x5B;0]&#x5B;1]\n    if donde&gt;=0 and sentido&gt;0: # lado derecho del plano\n        causal = True\n\n# SALIDA\nprint('h(t):')\nsym.pprint(h)\nprint('busca_impulso:', ss.busca_impulso(h))\nprint('busca_escalon(ft):', donde_u)\nprint('xcausal: ',causal)\n\n# GRAFICA\nfigura_h = ss.graficar_ft(h,t_a,t_b,f_nombre='h')\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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/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=\"buscaadelantados\">4. Ejemplo: Revisa si f(t)&nbsp;es causal un t\u00e9rmino de factores 'adelantados' que se multiplican<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: h(t) de Lathi Ej. 2.10 p181<\/p>\n\n\n\n<p>Se amplia el algoritmo anterior para incorporar la revisi\u00f3n de f(t) con factores que se multiplican.<\/p>\n\n\n\n<p>Se muestras algunos ejemplos a usar para analizar esta parte:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># entrada x(t)<\/span>\n<span style=\"color: #ff0000\"># h = u<\/span>\n<span style=\"color: #ff0000\"># h = 3*sym.pi*u.subs(t,t-1)<\/span>\nh = sym.exp(-2*t)*u.subs(t,t+1)\n<span style=\"color: #ff0000\"># h = sym.exp(-2*t)*sym.cos(t)<\/span>\n<span style=\"color: #ff0000\"># h = 5<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,-t+2)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,-t+1)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = 3*u.subs(t,-t+1)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,t+1)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,t-1)*u.subs(t,-t+2)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,t+2)*u.subs(t,-t-1)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,t-2)*u.subs(t,-t-1)<\/span><\/code><\/pre>\n\n\n\n<p>El resultado esperado del algoritmo para uno de los ejemplos presentados en la entrada del algoritmo es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>h(t):\n -2\u22c5t         \n\u212f    \u22c5\u03b8(t + 1)\nbusca_impulso(ft): &#091;]\nbusca_escalon(ft): &#091;&#091;-1, 1]]\nxcausal:  False<\/code><\/pre>\n\n\n\n<p>El resultado indica que no es causal, que es concordante con la gr\u00e1fica pues este sistema tiene respuesta antes de t=0, en el lado izquierdo del plano. Es decir el sistema se 'adelanta' a la llegada de la se\u00f1al en el tiempo.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"439\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/causalidadht_03Sympy.png\" alt=\"causalidad ht 03 Sympy\" class=\"wp-image-19646\" \/><\/figure>\n\n\n\n<p>La revisi\u00f3n de factores de cada t\u00e9rmino de suma, se realiza descomponiendo la expresi\u00f3n en sus factores con ft.args o se obtienen los t\u00e9rmino suma con <br><code>term_suma = sym.Add.make_args(ft)<\/code><\/p>\n\n\n\n<p>En el caso que el termino sea un escal\u00f3n o impulso elevado al cuadrado, se extrae solo la base del t\u00e9rmino para revisar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #d35400\">if<\/span> ft.is_Pow:\n    ft = ft.as_base_exp()&#091;0]<\/code><\/pre>\n\n\n\n<p>La multiplicaci\u00f3n de funciones escal\u00f3n \u03bc(t)\u03bc(t-1) se da cuando se aplica el integral de convoluci\u00f3n entre x(t) y h(t), siendo x(t) un escal\u00f3n. Sin embargo Sympy mantiene las expresiones sin simplificar, asunto a considerar en los siguientes ejercicios. por ahora se lo realiza con <code>ss.simplifica_escalon(ft)<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Revisar causalidad de ft(t) en sympy\n# considera causal h(t)=b0*d + (modos caracteristicos)*u\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t',real=True)\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# entrada x(t)\n# h = u\n# h = 3*sym.pi*u.subs(t,t-1)\nh = sym.exp(-2*t)*u.subs(t,t+1)\n# h = sym.exp(-2*t)*sym.cos(t)\n# h = 5\n# h = u.subs(t,-t+2)*u.subs(t,-t+1)\n# h = u.subs(t,-t+1)*u.subs(t,-t+1)\n# h = 3*u.subs(t,-t+1)*u.subs(t,-t+1)\n# h = u.subs(t,t+1)*u.subs(t,-t+1)\n# h = u.subs(t,t-1)*u.subs(t,-t+2)\n# h = u.subs(t,t+2)*u.subs(t,-t-1)\n# h = u.subs(t,t-2)*u.subs(t,-t-1)\n\n# grafica intervalo &#x5B;t_a,t_b] simetrico a 0\nt_a = -4\nt_b = 4\nmuestras = 51\n\n# PROCEDIMIENTO\ndef es_causal(ft):\n    ''' h(t) es causal si tiene\n        b0*d(t)+u(t)*(modos caracteristicos)\n    '''\n    def es_causal_impulso(ft):\n        ''' un termino en lado derecho del plano\n        '''\n        causal  = False\n        donde_d = ss.busca_impulso(ft)\n        if len(donde_d)&gt;0:    # tiene impulso\n            if donde_d&#x5B;0]&gt;=0: # derecha del plano\n                causal = True \n        return(causal)\n    \n    causal  = True\n    term_suma = sym.Add.make_args(ft)\n    for term_k in term_suma:\n        if term_k.has(sym.Heaviside):\n            term_k = ss.simplifica_escalon(term_k) # h(t-a)*h(t-b)\n            causal_k = True\n            donde_u = ss.busca_escalon(term_k)\n            if len(donde_u)==0: # sin escalon?\n                causal_k = False\n            if len(donde_u)==1: \n                sentido1 = donde_u&#x5B;0]&#x5B;0]\n                donde1   = donde_u&#x5B;0]&#x5B;1]\n                # en lado izquierdo del plano\n                if donde1&lt;0 or sentido1&lt;0:\n                    causal_k = False\n            if len(donde_u)==2:\n                donde1   = donde_u&#x5B;0]&#x5B;0]\n                sentido1 = donde_u&#x5B;0]&#x5B;1]\n                donde2   = donde_u&#x5B;1]&#x5B;0]\n                sentido2 = donde_u&#x5B;1]&#x5B;1]\n                # rectangulo lado derecho del plano\n                if (donde1&lt;donde2): \n                    if donde1&lt;0:  # u(t+1)*u(-t+1)\n                        causal_k = False\n                if (donde2&lt;donde1):\n                    if donde2&lt;0: # u(-t+1)*u(t+1)\n                        causal_k = False\n\n        else: # un termino, sin escalon unitario\n            # causal depende si tiene un impulso\n            causal_k = es_causal_impulso(term_k)\n        causal = causal and causal_k\n    return(causal)\n\nhcausal = es_causal(h)\n\n# SALIDA\nprint('h(t):')\nsym.pprint(h)\nprint('busca_impulso(ft):', ss.busca_impulso(h))\nprint('busca_escalon(ft):', ss.busca_escalon(h))\nprint('xcausal: ',hcausal)\n\n# GRAFICA\nfigura_h = ss.graficar_ft(h,t_a,t_b,f_nombre='h')\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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/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=\"revisasumas\">5. Ejemplo: Revisa si f(t)&nbsp;es causal de varios t\u00e9rmino de suma<\/h2>\n\n\n\n<p>Referencia: Ejercicio Lathi 2.6-3 p206, Lathi Ej. 2.12 p185,<\/p>\n\n\n\n<p>Finalmente la revisi\u00f3n de la expresi\u00f3n f(t) revisa cada uno de los t\u00e9rminos de una suma. Dentro de cada termino de la suma se revisa cada factor que multiplica. Dentro de cada factor que multiplica de analiza si se encuentra un escal\u00f3n o impulso unitario que opere solo en el lado derecho del plano.<\/p>\n\n\n\n<p>Las expresiones usadas para revisar el ejercicio son<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># entrada x(t)<\/span>\n<span style=\"color: #ff0000\"># h = u + d<\/span>\n<span style=\"color: #ff0000\"># h = 3*sym.pi*u.subs(t,t-1)+ 2*d<\/span>\n<span style=\"color: #ff0000\"># h = sym.exp(-2*t)*u.subs(t,t+1) + sym.exp(-4*t)*u.subs(t,t-3)<\/span>\n<span style=\"color: #ff0000\"># h = sym.exp(-2*t)*sym.cos(t) + 4<\/span>\n<span style=\"color: #ff0000\"># h = 5<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,-t+2)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = u.subs(t,-t+1)*u.subs(t,-t+1)<\/span>\n<span style=\"color: #ff0000\"># h = 3*u.subs(t,-t+1)*u.subs(t,-t+1)<\/span>\nh = u.subs(t,t-1)-u.subs(t,t-2)<\/code><\/pre>\n\n\n\n<p>el resultado del algoritmo&nbsp; para el ejercicio corresponde a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>h(t):\n-\u03b8(t - 2) + \u03b8(t - 1)\nbusca_impulso(ft): &#091;]\nbusca_escalon(ft): &#091;&#091;1 1]\n &#091;2 1]]\nxcausal:  True<\/code><\/pre>\n\n\n\n<p>La gr\u00e1fica correspondiente que permite comprobar visualmente el resultado es<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"554\" height=\"435\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/causalidadht_04Sympy.png\" alt=\"causalidad ht 04 Sympy\" class=\"wp-image-19647\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo en Python<\/h3>\n\n\n\n<p>El algoritmo b\u00e1sicamente realiza el seguimiento de los resultados que se obtienen con las funciones de las secciones anteriores para cada t\u00e9rmino de suma.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Revisar causalidad de ft(t) en sympy\n# considera causal h(t)=b0*d + (modos caracteristicos)*u\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t',real=True)\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# entrada x(t)\n# h = u + d\n# h = 3*sym.pi*u.subs(t,t-1)+ 2*d\n# h = sym.exp(-2*t)*u.subs(t,t+1) + sym.exp(-4*t)*u.subs(t,t-3)\n# h = sym.exp(-2*t)*sym.cos(t) + 4\n# h = 5\nh = u.subs(t,t-1)-u.subs(t,t-2)\n\n# grafica intervalo &#x5B;t_a,t_b] simetrico a 0\nt_a = -4\nt_b = 4\nmuestras = 51\n\n# PROCEDIMIENTO\nhcausal = ss.es_causal(h)\n\n# SALIDA\nprint('h(t):')\nsym.pprint(h)\nprint('busca_impulso(ft):', ss.busca_impulso(h))\nprint('busca_escalon(ft):', ss.busca_escalon(h))\nprint('xcausal: ',hcausal)\n\n# Grafica\nfigura_h = ss.graficar_ft(h,t_a,t_b,f_nombre='h')\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=\"#causalidad\">Revisa causalidad<\/a><\/p>\n\n\n\n<p>busca:<\/p>\n\n\n\n<p><a href=\"#buscadt\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaut\">\u03bc(t)<\/a><\/p>\n\n\n\n<p><a href=\"#buscaadelantados\">adelantos<\/a><\/p>\n\n\n\n<p><a href=\"#revisasumas\">revisa sumas<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Revisa causalidad busca: \u03b4(t) \u03bc(t) adelantos revisa sumas 1. Revisar causalidad Referencia: Lathi Ej 2.8 p173. La funci\u00f3n h(t) o respuesta al impulso se compone de un t\u00e9rmino de impulso y un escal\u00f3n que multiplica a los modos caracter\u00edsticos de la ecuaci\u00f3n diferencial. La comprobaci\u00f3n de causalidad considera tomar como referencia la b\u00fasqueda de un [&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-4579","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\/4579","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=4579"}],"version-history":[{"count":8,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/4579\/revisions"}],"predecessor-version":[{"id":23996,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/4579\/revisions\/23996"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=4579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=4579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=4579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}