Skip to content

FennisRobert/heavi

Repository files navigation

Heavi

Heavi is a Python-based circuit simulation library designed for efficient modeling and analysis of linear components. It allows users to build circuits programmatically, run analyses (such as S-parameters), and visualize results. Currently, the library supports only linear components but provides a foundation for advanced circuit simulations.

Features

  • Linear Component Simulation: Model circuits with resistors, capacitors, and inductors.
  • Custom Filters: Create filters (e.g., Cauer, Chebyshev) with ease.
  • S-Parameter Analysis: Perform S-parameter analysis on two-port networks.
  • Visualization Tools: Plot S-parameters with customizable options.
  • Programmatic Circuit Building: Construct circuits directly in Python for maximum flexibility.

Installation

For now, clone the repository and install locally:

pip install heavi

Optionally, its easier to just download the

Getting Started

Here is an example that demonstrates building a simple two-port circuit with a 4th-order bandpass filter, running S-parameter analysis, and plotting the results.

import heavi as hv
from heavi.lib import smd
# Create a new circuit model
model = hv.Model()

# Define circuit nodes and terminals
n1 = model.node()
p1 = model.new_port(50, n1)  # Terminal 1 with 50-ohm impedance
n2 = model.node()
n3 = model.node()
p2 = model.new_port(50, n3)  # Terminal 2 with 50-ohm impedance

# Add a resistor between nodes n2 and n3
resistor = smd.SMDResistor(5, hv.lib.smd.SMDResistorSize.R0402).connect(n2, n3)

# Add a 4th-order bandpass filter between ground and node n1, connecting to n2
model.filters.cauer_filter(
    model.gnd, n1, n2, 2e9, 70e6, 5, 0.03, hv.FilterType.CHEBYCHEV, type=hv.BandType.BANDPASS
)

# Define the frequency range for S-parameter analysis
f = hv.frange(1.8e9, 2.2e9, 2001)

# Perform S-parameter analysis
S = model.run_sp(f)

# Plot S-parameters
hv.plot_s_parameters(f, [S.S11, S.S21], labels=["S11", "S21"], linestyles=["-", "-"], colorcycle=[0, 1])

# Print all components in the model
model.print_components()

API Reference

heavi.Model

The Model class is the central interface for building and simulating circuits. It inherits from the Network class and has additional libraries for component creation.

Initialization

Model(default_name: str = "Node", filter_library: Filtering = Filtering)
  • default_name: Default prefix for node names.
  • filter_library: Library for filter definitions.

Key Methods

Most of the methods mentioned below are defined as Network methods.

  • node(name: str = None) -> Node Creates a new circuit node.

  • new_port(signal_node: Node, Z0: float, gnd_node: Node = None) -> Port Adds a terminal to the circuit with a specified impedance.

  • resistor(node1: Node, node2: Node, R: float) -> Component Adds a resistor between two nodes.

  • capacitor(node1: Node, node2: Node, C: float) -> Component Adds a capacitor between two nodes.

  • inductor(node1: Node, node2: Node, L: float) -> Component Adds an inductor between two nodes.

  • transmissionline(gnd: Node, port1: Node, port2: Node, Z0: float, er: float, L: float) -> Component Adds a transmission line with specified properties.

  • run(frequencies: np.ndarray) -> Sparameters Runs S-parameter analysis for the specified frequency range.


heavi.Network

The Network class provides foundational methods for building and analyzing circuits.

Initialization

Network(default_name: str = 'Node')
  • default_name: Default prefix for node names.

heavi.plot_s_parameters

The plot_s_parameters plot function uses matplotlib and offers a convenient means of displaying S-parameters.

hv.plot_s_parameters(frequencies: np.ndarray, S_parameters: list[np.ndarray], labels: list[str], linestyles: list[str], colorcycle: list[int])

Plots S-parameter data.

Parameters:

  • frequencies: Frequency range in Hz.
  • S_parameters: List of S-parameter arrays.
  • labels: Labels for each plot line.
  • linestyles: Line styles for each plot line.
  • colorcycle: List of color indices for the plot.

heavi.sparam.Sparameters

The Sparameters class encapsulates the results of S-parameter analysis and mostly just contains the S-parameters as a 3-dimensional numpy array with the first two dimensions being the S-parameter matrix and the last the frequency axis.

Attributes

  • S: S-parameter matrix.
  • frequencies: Frequency range associated with the analysis.

Properties

All possible S-parameters up to a 5-port network are predefined as properties for quick access and auto-completion purposes.

  • S11: The S11 array data.
  • S12: The S12 array data.
  • S55: The S55 array data.

Important Methods

Most of the methods mentioned below are defined as Network methods.

  • S(i: int, j: int) -> np.ndarray Returns the Sij component of the S-matrix.

For more advanced usage, refer to the inline documentation in the heavi package or the source code.


Visualization

The hv.plot_s_parameters() function provides an easy way to visualize S-parameter data:

hv.plot_s_parameters(frequencies, [S11, S21], labels=["S11", "S21"], linestyles=["-", "--"], colorcycle=[0, 1])
  • frequencies: Frequency range (Hz).
  • S-parameters: A list of S-parameters to plot.
  • labels: Labels for each plot line.
  • linestyles: Line styles for each plot.
  • colorcycle: Color indices for the lines.

Features

  • Touchstone import
  • Stochastic components and system modeling.
  • Most common components, impedance, admittance, port, capacitor, inductor, transmission line and N-port S-parameters.
  • BaseCompont class for custom library creation
  • Cauer filter design automization (Low, high and bandpass Chebychev and Maximally flat).
  • Impedance transformers (Chebychev only)

Future features

  • Advanced PCB Router
  • Larger library of components and predefined interfaces/functions
  • Support for nonlinear components (e.g., transistors, diodes).
  • Time-domain simulations.
  • Enhanced visualization capabilities.

Contributing

Contributing options come later. Please reach out via my website: www.emerge-software.com


License

This project is licensed under the MIT License. See the LICENSE file for details.

About

An RF circuit simulator

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages