Análisis de redes mediante matriz admitancia indefinida

../_images/logo_UTN.svg

Por Mariano Llamedo Soria

Resumen

En este documento se presentan un ejemplo del uso de la matriz admitancia indefinida para el análisis de redes.

Introducción

Documento en elaboración. Algunas referencias para este tema:

T-puenteado de R constante

""""
Matriz Admitancia Indefinida (MAI)
----------------------------------
Ejemplos de cálculo simbólico mediante MAI de una red T puenteada de R constante.

Referencias:
------------
Cap. 9. Avendaño L. Sistemas electrónicos Analógicos: Un enfoque matricial.
"""

import sympy as sp

from pytc2.cuadripolos import calc_MAI_impedance_ij, calc_MAI_vtransf_ij_mn, calc_MAI_ztransf_ij_mn
from pytc2.general import print_latex


# T puenteado cargado: red de R constante
# explicación:
'''    
+ Numeramos los polos de 0 a n=3

            |------Ya-------|
            |               |
    0-------+--G----2---G---3
                    |       |
                   Yb       G
                    |       |
    1---------------+--------
    
'''    

Ya, Yb = sp.symbols('Ya Yb', complex=True)
G = sp.symbols('G', real=True, positive=True)

# Armo la MAI

#               Nodos: 0      1        2        3
Ymai = sp.Matrix([  
                    [ Ya+G,   0,      -G,     -Ya],
                    [ 0,     Yb+G,    -Yb,    -G],
                    [ -G,   -Yb,      2*G+Yb, -G],
                    [ -Ya,   -G,     -G,      2*G+Ya ]
                 ])

con_detalles = False
# con_detalles = True

# Calculo la Z en el puerto de entrada a partir de la MAI
Zmai = calc_MAI_impedance_ij(Ymai, 0, 1, verbose=con_detalles)

# Aplico la condición de R constante
print('si consideramos:')
print_latex( r'G^2 = Y_a . Y_b' )
print('entonces')
print_latex( r'Z_{{ {:d}{:d} }} = '.format(0,1) +  sp.latex(Zmai.subs(Ya*Yb, G**2)) )

print('Transferencia de tensión:')
Vmai = calc_MAI_vtransf_ij_mn(Ymai, 3, 1, 0, 1, verbose=con_detalles)
Vmai = sp.simplify(Vmai.subs(Ya*Yb, G**2))
Vmai_Ya = sp.simplify(Vmai.subs(Yb, G**2/Ya))
Vmai_Yb = sp.simplify(Vmai.subs(Ya, G**2/Yb))

print_latex( r'T^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(3, 1, 0, 1) +  sp.latex(Vmai_Ya) + ' = ' + sp.latex(Vmai_Yb) )

print('Transimpedancia:')
Zmai = calc_MAI_ztransf_ij_mn(Ymai, 3, 1, 0, 1, verbose=con_detalles)
Zmai = sp.simplify(Zmai.subs(Ya*Yb, G**2))
Zmai_Ya = sp.simplify(Zmai.subs(Yb, G**2/Ya))
Zmai_Yb = sp.simplify(Zmai.subs(Ya, G**2/Yb))
print_latex( r'Z^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(3, 1, 0, 1) + sp.latex(Zmai_Ya) + ' = ' + sp.latex(Zmai_Yb) )
si consideramos:
\[\displaystyle G^2 = Y_a . Y_b\]
entonces
\[\displaystyle Z_{ 01 } = \frac{1}{G}\]
Transferencia de tensión:
\[\displaystyle T^{ 31 }_{ 01 } = - \frac{Ya}{G + Ya} = - \frac{G}{G + Yb}\]
Transimpedancia:
\[\displaystyle Z^{ 31 }_{ 01 } = - \frac{Ya}{G \left(G + Ya\right)} = - \frac{1}{G + Yb}\]

Butterworth orden 3

'''    
+ Numeramos los polos de 0 a n=3

    0-------+--Y1----2---Y3--3---
                     |           /
                    Y2           / R
                     |           /
    1----------------+-------1----
    
'''    

# definición de puertos. El primer nodo marca el sentido positivo de la tensión. V1 = V[input_port[0]] - V[input_port[1]]
input_port = [0, 1]
output_port = [3, 1]

Y1, Y2, Y3 = sp.symbols('Y1 Y2 Y3', complex=True)
G = sp.symbols('G', real=True, positive=True)

# Armo la MAI

#               Nodos: 0      1        2        3
Ymai = sp.Matrix([  
                    [ Y1,    0,      -Y1,      0],
                    [ 0,    Y2+G,    -Y2,     -G],
                    [ -Y1,  -Y2,    Y1+Y2+Y3, -Y3],
                    [ 0,    -G,      -Y3,      Y3+G ]
                 ])

s = sp.symbols('s ', complex=True)

# Butter de 3er orden simplemente cargado
Ymai = Ymai.subs(Y1, 1/s/sp.Rational('3/2'))
Ymai = Ymai.subs(Y3, 1/s/sp.Rational('1/2'))
Ymai = Ymai.subs(Y2, s*sp.Rational('4/3'))

# Butter de 3er orden doblemente cargado
# Ymai = Ymai.subs(Y1, 1/s/sp.Rational('1'))
# Ymai = Ymai.subs(Y3, 1/s/sp.Rational('1'))
# Ymai = Ymai.subs(Y2, s*sp.Rational('2'))
Ymai = Ymai.subs(G, sp.Rational('1'))

# con_detalles = False
con_detalles = True

# Calculo la Z en el puerto de entrada a partir de la MAI
Zmai = calc_MAI_impedance_ij(Ymai, input_port[0], input_port[1], verbose=con_detalles)

print_latex( r'Z_{{ {:d}{:d} }} = '.format(0,1) +  sp.latex(Zmai) )


print('Transferencia de tensión:')
Vmai = calc_MAI_vtransf_ij_mn(Ymai, output_port[0], output_port[1], input_port[0], input_port[1], verbose=con_detalles)
Vmai_sym = sp.simplify(Vmai.subs(Y3, Y1))

print_latex( r'T^{{ {:d}{:d} }}_{{ {:d}{:d} }} = '.format(output_port[0], output_port[1], input_port[0], input_port[1]) +  sp.latex(Vmai) )
Intermediate calculations:
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)
ZZ: 3*(s**2*(s + 2) + 2*s + 1)/(2*s**2 + 4*s + 3)
\[\displaystyle Z_{ 01 } = \frac{3 \left(s^{2} \left(s + 2\right) + 2 s + 1\right)}{2 s^{2} + 4 s + 3}\]
Transferencia de tensión:
Intermediate calculations:
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)
Av: -1/(s**2*(s + 2) + 2*s + 1)
\[\displaystyle T^{ 31 }_{ 01 } = - \frac{1}{s^{2} \left(s + 2\right) + 2 s + 1}\]