{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Análisis de redes mediante matriz admitancia indefinida\n", " \n", "\n", "#### Por Mariano Llamedo Soria" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resumen \n", "En este documento se presentan un ejemplo del uso de la matriz admitancia indefinida para el análisis de redes.\n", "\n", "* Funciones de análisis de cuadripolos: [calc_MAI_impedance_ij](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/cuadripolos/index.html#pytc2.cuadripolos.calc_MAI_impedance_ij), [calc_MAI_vtransf_ij_mn](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/cuadripolos/index.html#pytc2.cuadripolos.calc_MAI_vtransf_ij_mn), [calc_MAI_ztransf_ij_mn](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/cuadripolos/index.html#pytc2.cuadripolos.calc_MAI_ztransf_ij_mn)\n", "* De presentación algebraica: [print_latex](https://pytc2.readthedocs.io/en/latest/autoapi/pytc2/general/index.html#pytc2.general.print_latex)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Introducción\n", "\n", "Documento en elaboración. Algunas referencias para este tema:\n", "\n", "* Cap. XVI [Wsewolod Warzanskyj Poliscuk - Análisis de Circuitos - 1977](https://drive.google.com/file/d/1taywcHnFiVexG_GBkuBB14DTT1UcDnSZ/view?usp=drive_link)\n", "* Cap. 9 [Avendaño, Luis Enrique - Sistemas electrónicos analógicos,un enfoque matricial]()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### T-puenteado de R constante" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "si consideramos:\n" ] }, { "data": { "text/latex": [ "$\\displaystyle G^2 = Y_a . Y_b$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "entonces\n" ] }, { "data": { "text/latex": [ "$\\displaystyle Z_{ 01 } = \\frac{1}{G}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Transferencia de tensión:\n" ] }, { "data": { "text/latex": [ "$\\displaystyle T^{ 31 }_{ 01 } = - \\frac{Ya}{G + Ya} = - \\frac{G}{G + Yb}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Transimpedancia:\n" ] }, { "data": { "text/latex": [ "$\\displaystyle Z^{ 31 }_{ 01 } = - \\frac{Ya}{G \\left(G + Ya\\right)} = - \\frac{1}{G + Yb}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\"\"\n", "Matriz Admitancia Indefinida (MAI)\n", "----------------------------------\n", "Ejemplos de cálculo simbólico mediante MAI de una red T puenteada de R constante.\n", "\n", "Referencias:\n", "------------\n", "Cap. 9. Avendaño L. Sistemas electrónicos Analógicos: Un enfoque matricial.\n", "\"\"\"\n", "\n", "import sympy as sp\n", "\n", "from pytc2.cuadripolos import calc_MAI_impedance_ij, calc_MAI_vtransf_ij_mn, calc_MAI_ztransf_ij_mn\n", "from pytc2.general import print_latex\n", "\n", "\n", "# T puenteado cargado: red de R constante\n", "# explicación:\n", "''' \n", "+ Numeramos los polos de 0 a n=3\n", "\n", " |------Ya-------|\n", " | |\n", " 0-------+--G----2---G---3\n", " | |\n", " Yb G\n", " | |\n", " 1---------------+--------\n", " \n", "''' \n", "\n", "Ya, Yb = sp.symbols('Ya Yb', complex=True)\n", "G = sp.symbols('G', real=True, positive=True)\n", "\n", "# Armo la MAI\n", "\n", "# Nodos: 0 1 2 3\n", "Ymai = sp.Matrix([ \n", " [ Ya+G, 0, -G, -Ya],\n", " [ 0, Yb+G, -Yb, -G],\n", " [ -G, -Yb, 2*G+Yb, -G],\n", " [ -Ya, -G, -G, 2*G+Ya ]\n", " ])\n", "\n", "con_detalles = False\n", "# con_detalles = True\n", "\n", "# Calculo la Z en el puerto de entrada a partir de la MAI\n", "Zmai = calc_MAI_impedance_ij(Ymai, 0, 1, verbose=con_detalles)\n", "\n", "# Aplico la condición de R constante\n", "print('si consideramos:')\n", "print_latex( r'G^2 = Y_a . Y_b' )\n", "print('entonces')\n", "print_latex( r'Z_{{ {:d}{:d} }} = '.format(0,1) + sp.latex(Zmai.subs(Ya*Yb, G**2)) )\n", "\n", "print('Transferencia de tensión:')\n", "Vmai = calc_MAI_vtransf_ij_mn(Ymai, 3, 1, 0, 1, verbose=con_detalles)\n", "Vmai = sp.simplify(Vmai.subs(Ya*Yb, G**2))\n", "Vmai_Ya = sp.simplify(Vmai.subs(Yb, G**2/Ya))\n", "Vmai_Yb = sp.simplify(Vmai.subs(Ya, G**2/Yb))\n", "\n", "print_latex( r'T^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(3, 1, 0, 1) + sp.latex(Vmai_Ya) + ' = ' + sp.latex(Vmai_Yb) )\n", "\n", "print('Transimpedancia:')\n", "Zmai = calc_MAI_ztransf_ij_mn(Ymai, 3, 1, 0, 1, verbose=con_detalles)\n", "Zmai = sp.simplify(Zmai.subs(Ya*Yb, G**2))\n", "Zmai_Ya = sp.simplify(Zmai.subs(Yb, G**2/Ya))\n", "Zmai_Yb = sp.simplify(Zmai.subs(Ya, G**2/Yb))\n", "print_latex( r'Z^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(3, 1, 0, 1) + sp.latex(Zmai_Ya) + ' = ' + sp.latex(Zmai_Yb) )\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Butterworth orden 3" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Intermediate calculations:\n", "num: Matrix([[4*s/3 + 8/(3*s), -2/s], [-2/s, 1 + 2/s]]), den: Matrix([[4*s/3 + 1, -4*s/3, -1], [-4*s/3, 4*s/3 + 8/(3*s), -2/s], [-1, -2/s, 1 + 2/s]]), num_det: 4*(s**2*(s + 2) + 2*s + 1)/(3*s**2), den_det: 4*(2*s**2 + 4*s + 3)/(9*s**2)\n", "ZZ: 3*(s**2*(s + 2) + 2*s + 1)/(2*s**2 + 4*s + 3)\n" ] }, { "data": { "text/latex": [ "$\\displaystyle Z_{ 01 } = \\frac{3 \\left(s^{2} \\left(s + 2\\right) + 2 s + 1\\right)}{2 s^{2} + 4 s + 3}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Transferencia de tensión:\n", "Intermediate calculations:\n", "num: Matrix([[-2/(3*s), 0], [4*s/3 + 8/(3*s), -2/s]]), den: Matrix([[4*s/3 + 8/(3*s), -2/s], [-2/s, 1 + 2/s]]), num_det: 4/(3*s**2), den_det: 4*(s**2*(s + 2) + 2*s + 1)/(3*s**2)\n", "Av: -1/(s**2*(s + 2) + 2*s + 1)\n" ] }, { "data": { "text/latex": [ "$\\displaystyle T^{ 31 }_{ 01 } = - \\frac{1}{s^{2} \\left(s + 2\\right) + 2 s + 1}$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "''' \n", "+ Numeramos los polos de 0 a n=3\n", "\n", " 0-------+--Y1----2---Y3--3---\n", " | /\n", " Y2 / R\n", " | /\n", " 1----------------+-------1----\n", " \n", "''' \n", "\n", "# definición de puertos. El primer nodo marca el sentido positivo de la tensión. V1 = V[input_port[0]] - V[input_port[1]]\n", "input_port = [0, 1]\n", "output_port = [3, 1]\n", "\n", "Y1, Y2, Y3 = sp.symbols('Y1 Y2 Y3', complex=True)\n", "G = sp.symbols('G', real=True, positive=True)\n", "\n", "# Armo la MAI\n", "\n", "# Nodos: 0 1 2 3\n", "Ymai = sp.Matrix([ \n", " [ Y1, 0, -Y1, 0],\n", " [ 0, Y2+G, -Y2, -G],\n", " [ -Y1, -Y2, Y1+Y2+Y3, -Y3],\n", " [ 0, -G, -Y3, Y3+G ]\n", " ])\n", "\n", "s = sp.symbols('s ', complex=True)\n", "\n", "# Butter de 3er orden simplemente cargado\n", "Ymai = Ymai.subs(Y1, 1/s/sp.Rational('3/2'))\n", "Ymai = Ymai.subs(Y3, 1/s/sp.Rational('1/2'))\n", "Ymai = Ymai.subs(Y2, s*sp.Rational('4/3'))\n", "\n", "# Butter de 3er orden doblemente cargado\n", "# Ymai = Ymai.subs(Y1, 1/s/sp.Rational('1'))\n", "# Ymai = Ymai.subs(Y3, 1/s/sp.Rational('1'))\n", "# Ymai = Ymai.subs(Y2, s*sp.Rational('2'))\n", "Ymai = Ymai.subs(G, sp.Rational('1'))\n", "\n", "# con_detalles = False\n", "con_detalles = True\n", "\n", "# Calculo la Z en el puerto de entrada a partir de la MAI\n", "Zmai = calc_MAI_impedance_ij(Ymai, input_port[0], input_port[1], verbose=con_detalles)\n", "\n", "print_latex( r'Z_{{ {:d}{:d} }} = '.format(0,1) + sp.latex(Zmai) )\n", "\n", "\n", "print('Transferencia de tensión:')\n", "Vmai = calc_MAI_vtransf_ij_mn(Ymai, output_port[0], output_port[1], input_port[0], input_port[1], verbose=con_detalles)\n", "Vmai_sym = sp.simplify(Vmai.subs(Y3, Y1))\n", "\n", "print_latex( r'T^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(output_port[0], output_port[1], input_port[0], input_port[1]) + sp.latex(Vmai) )\n", "\n", "\n" ] } ], "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.10.16" }, "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 }