Skip to content

gvcallen/paramrf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

965 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tests Status Documentation Status

ParamRF Logo

ParamRF, or pmrf, is an open-source radio frequency (RF) modeling framework. It provides a declarative syntax for creating RF circuit and surrogate models using JAX.

The library provides tools for model simulation, optimization, fitting, statistical analysis, and Bayesian inference.

Version:GitHub Release
Author:Gary Allen
GitHub:https://github.com/gvcallen/paramrf
Docs:https://gvcallen.github.io/paramrf
Paper:https://doi.org/10.48550/arXiv.2510.15881

Features

  • Declarative syntax: Models can be composed and defined using a self-documenting, object-oriented syntax.
  • Hierarchical modeling: By nesting models within models, it is easy to create deep, hierarchical structures.
  • Differentiable: Since the library is built on jax (as opposed to numpy), derivatives are available via auto-differentiation, enabling faster performance and new design opportunities.
  • Hardware flexible: Functions are compiled just-in-time (JIT), reducing overhead and allowing computation on high-performance hardware (CPU, GPU, TPU).
  • Extensible: Power users can easily add additional models and algorithms by extending the library's built-in classes and interfaces.

Installation

ParamRF can be installed directly using pip (requires Python 3.11+):

$ pip install paramrf

Example

The code below demonstrate how to define and optimize an RLC model to satisfy a given goal function. See the documentation for more examples.

import pmrf as prf
from pmrf.models import Resistor, Inductor, Capacitor

model = Resistor(50) ** Inductor(1.0e-9) ** Capacitor(1.0e-12)
goal = prf.evaluators.Goal('s11_db', '<', -20)
passband = prf.Frequency(3, 4, 101, 'GHz')

result = prf.optimize.minimize(goal, model, passband, solver=prf.optimize.NelderMead())

plot_freq = prf.Frequency(1, 6, 101, 'GHz')
model.plot_s_db(plot_freq, m=0, n=0, label='initial')
result.model.plot_s_db(plot_freq, m=0, n=0, label='optimized')

Next steps

  • For an overview of the library's features, see the examples page.
  • For step-by-step guides that you can follow, check out the tutorials.
  • To delve a bit deeper into the library's core building blocks and philosophy, head off to core concepts.

Optional dependencies

Several additional dependencies are required/recommended for more advanced use-cases.

For Bayesian inference, you may need this fork of distreqx:

$ pip install git+https://github.com/gvcallen/distreqx

For BlackJAX's Bayesian solvers:

$ pip install git+https://github.com/handley-lab/blackjax.git@v0.1.0-beta

For the PolyChord solver:

$ pip install git+https://github.com/PolyChord/PolyChordLite.git anesthetic mpi4py

Citation

If you have used ParamRF for academic work, please cite the arXiv paper (https://doi.org/10.48550/arXiv.2510.15881) as:

G.V.C. Allen, D.I.L. de Villiers, (2025). ParamRF: A JAX-native Framework for Declarative Circuit Modelling. arXiv, https://doi.org/10.48550/arXiv.2510.15881.

or using the BibTeX:

@article{paramrf,
   doi = {10.48550/arXiv.2510.15881},
   url = {https://doi.org/10.48550/arXiv.2510.15881},
   year = {2025},
   month = {Oct},
   title = {ParamRF: A JAX-native Framework for Declarative Circuit Modelling},
   author = {Gary V. C. Allen and Dirk I. L. de Villiers},
   eprint = {2510.15881},
   archivePrefix = {arXiv},
   primaryClass = {cs.OH},
}

About

Parametric Radio Frequency Modeling

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors