{
"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
}