Skip to main content

ahkab

a SPICE-like electronic circuit simulator written in Python

The code should be easy to read and modify, the main language is Python – 2 or 3 – and it is platform-independent.

News!

  • Ahkab v0.18 was released on July 18 2015, including new features, bugfixes and improved documentation. It is recommended to upgrade. Check out the release notes for more!

  • The whole codebase has been going through a (yet incomplete) refactoring and documenting effort. The new documentation is available on RTD.

My resources are limited these days, so the much-needed work is proceeding slowly, albeit hopefully steadily. If you are interested and you would like to contribute to refactoring or documenting a particular feature, it would be very welcome.

Build Status Coverage Status PyPi version GPLv2 license DOI

Supported simulations:

  • Numeric:

    • Operating point, with guess computation to speed up the solution. See example: Downscaling current mirror

    • DC sweep

    • Transient analysis, available differentiation formulas: implicit Euler, trapezoidal, gear orders from 2 to 5. See for example the simulation of a Colpitts Oscillator.

    • AC analysis

    • PZ analysis

    • Periodic steady state analysis of non-autonomous circuits, time domain shooting and brute-force algorithms.

  • Symbolic:

The results are saved to disk, plotted or printed to stdout and can be read/processed by the most common tools (eg. Octave, gnuplot, Matlab, gwave and others)

Install

The program requires:

  • the Python interpreter version 2 or 3 (at least v.2.6 for Python2, v.3.3 for Python3),

  • numpy>=1.7.0, scipy>=0.14.0, sympy>=0.7.6 and tabulate>=0.7.3.

Matplotlib is strongly recommended and no plotting will work without.

If you need more information about the dependencies, check the Install notes.

Usage

1. ahkab can be run as a Python library

from ahkab import new_ac, run
from ahkab.circuit import Circuit
from ahkab.plotting import plot_results # calls matplotlib for you
import numpy as np

# Define the circuit
cir = Circuit('Butterworth 1kHz band-pass filter')
cir.add_vsource('V1', 'n1', cir.gnd, dc_value=0., ac_value=1.)
cir.add_resistor('R1', 'n1', 'n2', 50.)
cir.add_inductor('L1', 'n2', 'n3', 0.245894)
cir.add_capacitor('C1', 'n3', 'n4', 1.03013e-07)
cir.add_inductor('L2', 'n4', cir.gnd, 9.83652e-05)
cir.add_capacitor('C2', 'n4', cir.gnd, 0.000257513)
cir.add_inductor('L3', 'n4', 'n5', 0.795775)
cir.add_capacitor('C3', 'n5', 'n6', 3.1831e-08)
cir.add_inductor('L4', 'n6', cir.gnd, 9.83652e-05)
cir.add_capacitor('C4', 'n6', cir.gnd, 0.000257513)
cir.add_capacitor('C5', 'n7', 'n8', 1.03013e-07)
cir.add_inductor('L5', 'n6', 'n7', 0.245894)
cir.add_resistor('R2', 'n8', cir.gnd, 50.)

# Define the analysis
ac1 = new_ac(2.*np.pi*.97e3, 2.*np.pi*1.03e3, 1e2, x0=None)

# run it
res = run(cir, ac1)

# plot the results
plot_results('5th order 1kHz Butterworth filter', [('|Vn8|',"")], res['ac'],
             outfilename='bpf_transfer_fn.png')

2. ahkab can be run from the command line with a netlist file

The syntax is:

`$ python ahkab -o graph.dat <netlist file>`

See ahkab --help for command line switches, also online on the documentation pages.

Documentation

The documentation is available on RTD.

There, you can find a documentation and examples regarding how to simulate from a Python script.

Refer to the netlist syntax page if you prefer to write netlist files that describe the circuit.

Experience with running SPICE or related commercial simulators can be very useful: this is not for the faint of heart.

Development model

Patches and pull requests are welcome!

How this project was born

This project was born when I was an enthusistic undergrad, apparently with plenty of free time, attending “Simulazione Circuitale” (Circuit Simulation) taught by Prof. A. Brambilla back in Italy at the Polytechnic University of Milan.

I am grateful to prof. Brambilla for teaching one of the most interesting courses of my university years. -GV

Bugs and patches

Does it work? Bugs? Do you have patches? Did you run some noteworthy simulation? Let me know! Feedback is very welcome, my email address is available after a captcha.

Support the development with a donation

If you wish to support the development of ahkab, *please donate to cancer research:*

or

Credits

Authors: Giuseppe Venturini, with contributions from Ian Daniher and Rob Crowther.

Code: the module py3compat.py is (c) 2013 - the Jinja team.

Dependencies: many thanks to the authors of numpy, scipy, sympy, matplotlib and tabulate!

Release files for ahkab 0.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ahkab 0.18
File Size Uploaded
ahkab-0.18.tar.gz 163.0 kB Details

Release files / ahkab-0.18.tar.gz

Download URL ahkab-0.18.tar.gz
Size 163.0 kB
Tags Source
SHA-256 checksum
How to use checksums
69625db9c5c8c4e20f16e6c0afe15b34cfce85c80a41049feda30891dcdbffe5
BLAKE2b-256 checksum
How to use checksums
8bb402d892780fbf27646454fc0655e5bc9df7b48bcfc544b24d1fbb52cdc033
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.18 This release

1 release file

0.17

1 release file

0.16

1 release file

0.15.1

1 release file

0.15

0.14

0.13

1 release file

0.12

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page