Quickstart
ParamRF provides a declarative interface for creating RF circuit and surrogate models in JAX. This guide provides a brief introduction into defining models, and demonstrates optimization using a simple design goal.
Installation
First, ensure ParamRF is installed (requires Python 3.11+):
$ pip install paramrf
Note that for Bayesian inference, you may need this fork of distreqx:
$ pip install git+https://github.com/gvcallen/distreqx.git
Creating an RLC model
Models can easily be built using composition with the built in pmrf.models library. For example, the ** operator can be used to cascade several models together. In the example below, we define a frequency band, cascade a resistor, inductor, and capacitor to create a series RLC model, and then plot the resultant S-parameters.
import pmrf as prf
from pmrf.models import Resistor, Inductor, Capacitor
# Define the frequency band
freq = prf.Frequency(1, 10, 101, 'GHz')
# Cascade elements using the ** operator
rlc_model = Resistor(50) ** Inductor(1e-9) ** Capacitor(1e-12)
# Plot the model's S11 parameter
rlc_model.plot_s_db(freq, m=0, n=0)
Optimizing the S-parameters
ParamRF provides several optimization and inference wrappers around backends like scipy.minimize, Optimistix and PolyChord. The following snippet demonstrates how to optimize the previous RLC model to satisfy a simple design goal using the built-in Goal evaluator.
# Define the optimization frequency and goal
opt_freq = prf.Frequency(4.0, 6.0, 101, 'GHz')
goal = prf.evaluators.Goal('s11_db', '<', -20)
# Optimize the previous RLC model. For this problem, Nelder-Mead works well.
result = prf.optimize.minimize(goal, rlc_model, opt_freq, method='Nelder-Mead')
# Plot the optimized model
result.model.plot_s_db(freq, m=0, n=0)
Next steps
To delve a bit deeper into understanding the library’s core building blocks, see the Core Concepts page.
For a step-by-step guide, the Tutorials is a good place to start.