I was searching for a program to match RF circuits. I already calculated input complex impedance and choose pi filter as topology.
First I looked Motorola Impedance Matching Program. It is really old program, runs in Dosbox and is quite awful. User interface is manageable after reading the manual couple of times. Got the filter values from the program, but I'm not sure in these since I'm not sure I used it correctly. But in its free and cross platform so, why not use it.
I also tried Agilent Advanced Design Studio, but yea, it is meant for full time RF engineers. It looks like it can do everything. Usability is almost okay, feels inconvenient like ltspice.
Next I tried to simulate the circuit with scikit-rf. Importing the network worked fine, but the easy part ended there. To make components I first needed to make Media. There was no lumped element Media, so I took the one easiest to use - Freespace. Also the connections don't sound really correct.
#Program accepts one argument - C1 value in picoFarads of PI filter.
#It outputs transistor output impedance (calculated from amp.s1p file)
#and a graph showing preferred PI filter component values.
import matplotlib.pyplot as plt
from pylab import *
import skrf as rf
rf.pico = 1e-12
#amp that we are matching only S22
amp = rf.Network('amp.s1p')
#we need media to make components. weird
media = rf.media.Freespace(amp.frequency)
def get_db(C1, L, C2):
#pi filter begin
C1 = media.shunt_capacitor(C1*rf.pico);
L = media.inductor(L*rf.nano)
C2 = media.shunt_capacitor(C2*rf.pico);
filter = rf.connect(rf.connect(rf.connect(amp,0,C1,0),0,L,0),0,C2,0)
out = 
for L in range(1,15*3,3):
for C2 in range(1,15*2,2):
title('Pi matching network, C1 = '+sys.argv+' pF')
xlabel('C2 value [pF]')
ylabel('L value [nH]')
cbar = colorbar()
cbar.set_label('Return Loss Magnitude')
PI filter values in respect of output reflected power.
And this program provides graph you can see on the right. Really nice graph what in theory should show right values. I like how I can look at the graph and pick values that exists in the shop and see how effective filter would be. But again, I can't verify these values on other tools so there is probably small miscalculation in my code.