{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Remoción parcial de componentes\n", " \n", "\n", "#### Por Mariano Llamedo Soria" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resumen \n", "En este documento se presenta la técnica de remoción parcial de componentes de una red eléctrica. Esta técnica es sumamente útil para la síntesis de funciones transferencia, ya que permitirá localizar ceros de transmisión de la función transferencia, a una determinada frecuencia. Esto se traslada a la síntesis de funciones de excitación como tanques que resuenan a dicha frecuencia. Se hace una introducción con los aspectos teóricos más relevantes, y se termina con ejemplos de aplicación.\n", "\n", "* Funciones de síntesis de dipolos: [remover_polo_jw](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/remociones/index.html#pytc2.remociones.remover_polo_jw)[remover_polo_dc](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/remociones/index.html#pytc2.remociones.remover_polo_dc)\n", "* Funciones para presentación de markdown y latex: [print_subtitle](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/general/index.html#pytc2.general.print_subtitle), [print_latex](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/general/index.html#pytc2.general.print_latex), [a_equal_b_latex_s](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/general/index.html#pytc2.general.a_equal_b_latex_s)\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### Introducción\n", "\n", "Hasta el momento se describieron las propiedades matemáticas que deben cumplir las funciones de excitación (FE), que se denominan *inmitancias*, para poder ser implementadas mediante redes eléctricas pasivas que constan de dos tipos de componentes: LC, RL y RC. En todos los casos, se plantearon métodos sistemáticos y canónicos (Foster y Cauer) para obtener dichas redes. En ambos casos, los componentes quedaron asociados a los **polos** de las FE y sus respectivos valores a los **residuos** en cada polo. Cada componente será **removido** de la FE para dar lugar a una red remanente más simple. Sea \n", "\n", "$$ F(s)=\\frac{P(s)}{Q(s)} $$\n", "\n", "una función de variable compleja $s$, siendo $F(s)$ real y positiva (FRP), podemos decir que para los tres casos antedichos, sus formas matemáticas pueden describirse como:\n", "\n", "$$ F_{LC}(s)= \\frac{k_0}{s} + k_\\infty.s + \\sum_{i=1}^N\\frac{2.k_i.s}{s^2+\\omega_i^2}$$\n", "\n", "$$ F_{RC}(s)= \\frac{k_0}{s} + k_K + \\sum_{i=1}^N\\frac{k_i}{s+\\sigma_i} $$\n", "\n", "$$ F_{RL}(s)= k_K + s. k_\\infty + \\sum_{i=1}^N\\frac{k_i.s}{s+\\sigma_i} $$\n", "\n", "para cualquiera de los 3 casos, podemos plantear la remoción **total** de un polo, por ejemplo de una red LC, de las siguientes maneras:\n", "\n", "$$ F_{21} = F_{LC} - \\frac{k_0}{s} $$\n", "\n", "$$ F_{22} = F_{LC} - k_\\infty.s $$\n", "\n", "$$ F_{21} = F_{LC} - \\frac{2.k_i.s}{s^2+\\omega_i^2} $$\n", "\n", "Para los 3 casos resultan 3 inmitancias diferentes, todas del mismo origen LC que $F_{LC}(s)$ (no disipativo), dado que para las 3 remociones, a una red LC se le quitan o inductores, o capacitores, o tanques resonantes (capacitores e inductores). Como se ha dicho, los valores de cada componente dependen de $k_0$, $k_\\infty$ y $2.k_i$. Lo que condicionará si la remoción es **total o parcial** es si la cantidad de residuo que se termina removiendo es un **valor real menor** al residuo en dicho polo, es decir\n", "\n", "$$ F^p_{21} = F_{LC} - \\frac{k^p_0}{s}; \\quad \\mathrm{Si} \\enspace 0 < k^p_0 < k_0 $$\n", "\n", "$$ F^p_{22} = F_{LC} - k^p_\\infty.s ; \\quad \\mathrm{Si} \\enspace 0 < k^p_\\infty < k_0 $$\n", "\n", "$$ F^p_{23} = F_{LC} - \\frac{2.k^p_i.s}{s^2+\\omega_i^2}; \\quad \\mathrm{Si} \\enspace 0 < k^p_i < k_0 $$\n", "\n", "Para cada caso, se remueve **parte de cada polo** con la finalidad de situar un **cero** de la inmitancia $ F^p_{2x} $ en una posición arbitraria $\\omega_i$. Es decir que \n", "\n", "$$ F^p_{2x} \\Big\\vert_{s = j\\omega_i} = 0$$\n", "\n", "Aprovechando esta igualdad podemos calcular los residuos parciales $k^p_x$\n", "\n", "$$ k^p_0 = \\left[ s . F_{LC} \\right]_{s = j\\omega_i} $$\n", "\n", "$$ k^p_\\infty = \\left[ \\frac{F_{LC}}{s} \\right]_{s = j\\omega_i} $$\n", "\n", "$$ k^p_i = \\left[ \\frac{s^2+\\omega_i^2}{s} . F_{LC} \\right]_{s = j\\omega_i} $$\n", "\n", "De esta manera, se logra el objetivo de la remoción parcial de un polo, para asegurar que $ F^p_{2x} \\Big\\vert_{s = j\\omega_i} = 0$. Se verá a continuación algunos casos donde esta técnica resulta útil." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [], "source": [ "\n", "import sympy as sp\n", "from schemdraw import Drawing\n", "\n", "# Ahora importamos las funciones de PyTC2\n", "\n", "from pytc2.remociones import remover_polo_dc, remover_polo_jw\n", "from pytc2.dibujar import display, dibujar_puerto_entrada, dibujar_funcion_exc_abajo, dibujar_elemento_serie, dibujar_elemento_derivacion, dibujar_tanque_derivacion, dibujar_tanque_RC_serie, dibujar_espacio_derivacion, Capacitor, Resistor, ResistorIEC\n", "from pytc2.general import print_latex, print_subtitle, a_equal_b_latex_s, s\n", "from IPython.display import display, Markdown\n", "\n", "# Importante importar símbolos de variables \n", "from pytc2.general import s\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejemplo 1: Red no disipativa\n", "\n", "Sea la admitancia de entrada de la siguiente red " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2025-09-23T09:58:37.041361\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.3, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Resolución simbólica\n", "\n", "# Sea la siguiente función de excitación\n", "YY = 3*s*(s**2+sp.Rational(7,3))/(s**2+2)/(s**2+5)\n", "\n", "# Red ejemplo 1\n", "d = dibujar_puerto_entrada(Drawing(unit=4),\n", " voltage_lbl = ('+', '$V$', '-'), \n", " current_lbl = '$I$')\n", "\n", "d = dibujar_funcion_exc_abajo(d, \n", " 'Y', \n", " YY, \n", " hacia_salida = True,\n", " k_gap_width = 0.5)\n", "\n", "d = dibujar_elemento_serie(d, 'C', 'C1')\n", "\n", "d = dibujar_tanque_derivacion(d, 'L2', 'C2')\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_derivacion(d, 'L3', 'C3')\n", "\n", "display(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "Se desea calcular los valores de la red si $L_2$ y $C_2$ resuenan a 1 r/s." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resolución posible\n", "\n", "Se procede a analizar la admitancia de entrada y las posibilidades para la síntesis de la red pedida" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "#### Admitancia de entrada a la red" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Y(s)=\\frac{3 s \\left(s^{2} + \\frac{7}{3}\\right)}{\\left(s^{2} + 2\\right) \\left(s^{2} + 5\\right)}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[{s: 0}, {s: -sqrt(21)*I/3}, {s: sqrt(21)*I/3}]\n", "[{s: -sqrt(2)*I}, {s: sqrt(2)*I}, {s: -sqrt(5)*I}, {s: sqrt(5)*I}]\n" ] } ], "source": [ "\n", "print_subtitle('Admitancia de entrada a la red')\n", "\n", "print_latex(a_equal_b_latex_s('Y(s)', YY))\n", "\n", "# calculamos polos y ceros de Y(s)\n", "num, den = YY.as_numer_denom()\n", "\n", "roots_num = sp.solve(num, s, dict=True)\n", "print(roots_num)\n", "\n", "roots_den = sp.solve(den, s, dict=True)\n", "print(roots_den)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "a continuación se hace un diagrama de polos y ceros de $Y(s)$, y se esquematiza una posible solución para forzar que L2 y C2 resuenen a 1 r/s, justamente mediante una remoción parcial del residuo en 0 Hz.\n", "\n", "![RP1](./img/rem_parcial_1.png)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Z_1(s) = \\frac{k^p_0}{s}=\\frac{1}{s}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Z_2(s)=\\frac{\\left(s^{2} + 1\\right) \\left(s^{2} + 3\\right)}{s \\left(3 s^{2} + 7\\right)}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Restricción circuital: L2*C2 = 1 r/s\n", "# remoción parcial en DC de 1/YY\n", "\n", "omega_L2C2 = 1\n", "\n", "Z2, Zc1 = remover_polo_dc(1/YY, omega_zero = omega_L2C2 )\n", "\n", "# Yc1 es la admitancia removida\n", "# extraigo C1\n", "C1 = 1/(s*Zc1)\n", "\n", "print_latex(a_equal_b_latex_s('Z_1(s) = \\\\frac{k^p_0}{s}', Zc1))\n", "print_latex(a_equal_b_latex_s('Z_2(s)', Z2))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se observa cómo se logra el efecto deseado: que $Z_2$ **tenga un cero en 1 r/s**. Luego se procede a remover el tanque L2 - C2 de $\\frac{1}{Z_2}$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Y_3(s)=\\frac{2 s}{s^{2} + 1}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Y_4(s)=\\frac{s}{s^{2} + 3}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "Y4, Yt2, L2, C2 = remover_polo_jw(1/Z2, isImpedance = False, omega = omega_L2C2 )\n", "\n", "print_latex(a_equal_b_latex_s('Y_3(s)', Yt2))\n", "print_latex(a_equal_b_latex_s('Y_4(s)', Y4))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se observa finalmente que al remover el tanque L2-C2, es decir $Y_3(s)$, solo resta a la red $Y_4(s)$ para concluir la síntesis." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Y_5(s)=\\frac{s}{s^{2} + 3}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Y_6(s)=0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# quedaría solo un tanque en Y4, no especifico omega.\n", "Y6, Yt3, L3, C3 = remover_polo_jw(Y4, isImpedance = False)\n", "\n", "print_latex(a_equal_b_latex_s('Y_5(s)', Yt3))\n", "print_latex(a_equal_b_latex_s('Y_6(s)', Y6))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Continuando de forma sistemática, removemos el tanque $Y_5(s)$ de $Y_4(s)$, resultando una admitancia remanente $Y_6(s)$. Como se observa, $Y_5(s)$ no es otra cosa más que $Y_4(s)$, como lo habíamos anticipado, e $Y_6(s)$ es una **admitancia nula que nos indica que la síntesis ha finalizado satisfactoriamente**.\n", "\n", "Finalmente se dibuja la red hallada con los valores de componentes." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2025-09-23T09:58:37.336753\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.3, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Dibujamos la red resultante:\n", "\n", "d = dibujar_puerto_entrada(Drawing(unit=4),\n", " voltage_lbl = ('+', '$V$', '-'), \n", " current_lbl = '$I$')\n", "\n", "d = dibujar_funcion_exc_abajo(d, \n", " 'Y', \n", " YY, \n", " hacia_salida = True,\n", " k_gap_width = 0.5)\n", "\n", "d = dibujar_elemento_serie(d, 'C', C1)\n", "\n", "d = dibujar_tanque_derivacion(d, L2, C2)\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_derivacion(d, L3, C3)\n", "\n", "display(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Con esto se concluye el primer ejemplo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejemplo 2: Red disipativa\n", "\n", "Sea la impedancia de entrada de un dipolo\n", "\n", "$$ Z(s) = \\frac{s^2 + 13s + 32}{ 3s^2 + 27s+ 44} $$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2025-09-23T09:58:37.446698\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.3, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Sea la siguiente función de excitación\n", "ZZ = (s**2 + 13*s + 32)/(3*s**2 + 27*s+ 44)\n", "\n", "# Red ejemplo 2\n", "d = dibujar_puerto_entrada(Drawing(unit=4),\n", " voltage_lbl = ('+', '$V$', '-'), \n", " current_lbl = '$I$')\n", "\n", "d = dibujar_funcion_exc_abajo(d, \n", " 'Z(s)', \n", " ZZ, \n", " hacia_salida = True,\n", " k_gap_width = 0.5)\n", "\n", "d = dibujar_elemento_derivacion(d, 'Y', 'Y_A')\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_RC_serie(d, resistor_label='R_1', capacitor_lbl='C_1' )\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_elemento_derivacion(d, 'Y', 'Y_B')\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_RC_serie(d, resistor_label='R_2', capacitor_lbl='C_2' )\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_elemento_derivacion(d, 'Y', 'Y_C')\n", "\n", "display(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se pide hallar $Y_A$, $Y_B$ e $Y_C$ calcular los valores de la red, si $R_1.C_1 = 1\\,s$ y $R_2.C_2 = \\frac{1}{4}\\,s$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resolución posible\n", "\n", "Se comienza analizando su diagrama de polos y ceros" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-9.70156212 -3.29843788]\n", "[-6.86290781 -2.13709219]\n" ] } ], "source": [ "# calculamos polos y ceros de Z(s)\n", "import numpy as np\n", "\n", "roots_num = np.roots([1, 13, 32])\n", "print(roots_num)\n", "\n", "roots_den = np.roots([3, 27, 44])\n", "print(roots_den)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "y planteando una posible síntesis a partir del diagrama de polos y ceros de $Z(s)$. Si se sabe que $R_1.C_1 = 1\\,s$, entonces se buscará hacer una remoción parcial en DC de forma tal que $Y_2$ tenga un cero en 1 r/s.\n", "\n", "![RP2](./img/rem_parcial_2.png)\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Y_A=1$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Y_2=\\frac{2 \\left(s + 1\\right) \\left(s + 6\\right)}{s^{2} + 13 s + 32}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Restricción circuital: R1*C1 = 1 s\n", "# remoción parcial en DC de 1/ZZ\n", "\n", "from pytc2.remociones import remover_valor_en_dc, remover_valor_en_infinito, remover_polo_sigma\n", "\n", "sigma_R1C1 = -1\n", "\n", "Y2, YA = remover_valor_en_dc(1/ZZ, sigma_zero = sigma_R1C1 )\n", "\n", "\n", "print_latex(a_equal_b_latex_s('Y_A', YA))\n", "print_latex(a_equal_b_latex_s('Y_2', Y2))\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "como se observa, al remover $Y_A$ (resistor de 1Ω) logramos colocar el cero en 1 r/s y procedemos a remover el tanque R1-C1 en el siguiente paso. Por otro lado, la localización del segundo cero que no se podía anticipar por el método gráfico, ahora queda claro que está en $s = -6$, del mismo modo que los valores extremos en DC e infinito.\n", "\n", "\n", "![RP3](./img/rem_parcial_3.png)\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Z_3=\\frac{2}{s + 1}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Z_4=\\frac{s + 8}{2 \\left(s + 6\\right)}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# removemos R1-C1\n", "Z4, ZR1C1, R1, C1 = remover_polo_sigma(1/Y2, sigma = sigma_R1C1, isImpedance = True, isRC = True )\n", "\n", "print_latex(a_equal_b_latex_s('Z_3', ZR1C1))\n", "print_latex(a_equal_b_latex_s('Z_4', Z4))\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "ahora procedemos a repensar el diagrama de polos y ceros de cara a remover R2-C2 de $Y_6(s)$, que sabemos resuena en 4 r/s.\n", "\n", "![RP4](./img/rem_parcial_4.png)\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Y_B=1$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Y_6=\\frac{s + 4}{s + 8}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigma_R2C2 = -4\n", "\n", "Y6, YB = remover_valor_en_dc(1/Z4, sigma_zero = sigma_R2C2 )\n", "\n", "print_latex(a_equal_b_latex_s('Y_B', YB))\n", "print_latex(a_equal_b_latex_s('Y_6', Y6))\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "nuevamente, al remover $Y_B$ (otro resistor de 1Ω) logramos colocar el cero en 4 r/s y procedemos a remover el tanque R2-C3 en el siguiente paso, al mismo tiempo que se devela la información del diagrama de polos y ceros.\n", "\n", "\n", "![RP5](./img/rem_parcial_5.png)\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle Z_7=\\frac{4}{s + 4}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle Z_8=1$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# removemos R1-C1\n", "Z8, ZR2C2, R2, C2 = remover_polo_sigma(1/Y6, sigma = sigma_R2C2, isImpedance = True, isRC = True )\n", "\n", "print_latex(a_equal_b_latex_s('Z_7', ZR2C2))\n", "print_latex(a_equal_b_latex_s('Z_8', Z8))\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "finalmente, al remover $Z_7$ queda resuelta la síntesis dado que $Y_C$ resulta ser otro resistor de 1Ω. \n", "\n", "![RP6](./img/rem_parcial_6.png)\n", "\n", "De esta manera concluye el ejemplo y la red final resultante es" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2025-09-23T09:58:37.683779\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.3, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Red ejemplo 2\n", "d = dibujar_puerto_entrada(Drawing(unit=4),\n", " voltage_lbl = ('+', '$V$', '-'), \n", " current_lbl = '$I$')\n", "\n", "d = dibujar_funcion_exc_abajo(d, \n", " 'Z(s)', \n", " ZZ, \n", " hacia_salida = True,\n", " k_gap_width = 0.5)\n", "\n", "d = dibujar_elemento_derivacion(d, 'R', YA)\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_RC_serie(d, resistor_label= R1, capacitor_lbl= C1 )\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_elemento_derivacion(d, 'R', YB)\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_tanque_RC_serie(d, resistor_label = R2, capacitor_lbl = C2 )\n", "\n", "d = dibujar_espacio_derivacion(d)\n", "\n", "d = dibujar_elemento_derivacion(d, 'R', 1/Z8)\n", "\n", "display(d)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }