RLC-Circuit-Analysis-and-Op.../helpers.py
2026-01-18 15:07:40 -06:00

45 lines
1.4 KiB
Python

from Simulation import Simulation
def build_trace_with_split(sim: 'Simulation',
N=20,
Rseg=0.05,
Lseg=8e-9,
Csh0=1e-12,
Cshi=1e-14,
Rsrc=10.0,
Rs_gnd=120.0,
Rload=1e5,
Rsplit=0.3,
Lsplit=50e-9,
Cgap=100e-12,
Rsplit_parallel=0.1):
# Nodes. Vs, V0..V{N}, GNDL, GNDR
sim.add_node("Vs")
for k in range(N+1):
sim.add_node(f"V{k}")
sim.add_node("GNDL"); sim.add_node("GNDR")
# Source
sim.add_branch("Vs","V0", R=Rsrc)
sim.add_branch("Vs","GNDL", R=Rs_gnd)
# series ladder
for k in range(N):
Lk = Lseg if (k==0 or k==N-1) else (Lseg*(N/(N-1)))
sim.add_branch(f"V{k}", f"V{k+1}", R=Rseg, L=Lk)
# Shunt caps to local grounds
sim.add_shunt_C("V0","GNDL", Csh0)
for k in range(1, N):
g = "GNDL" if k <= N//2 else "GNDR"
sim.add_shunt_C(f"V{k}", g, Cshi)
sim.add_shunt_C(f"V{N}", "GNDR", Csh0)
# Load
sim.add_branch(f"V{N}", "GNDR", R=Rload)
sim.add_branch("GNDL","GNDR", R=Rsplit, L=Lsplit)
sim.add_shunt_C("GNDL","GNDR", Cgap)
sim.add_branch("GNDL","GNDR", R=Rsplit_parallel)