Skip to main content

Package to generate PWL incrementally using little 'events' like rectangular pulses and exponential rising or falling edges.

Project description

pwl_writer

by Victor Sabiá P. Carpes

Tested on:

  • python 3.6.6
    • numpy 1.19.5
    • matplotlib 3.3.4
  • python 3.11.1
    • numpy 1.25.0
    • matplotlib 3.7.1

Type stubs for older numpy versions for mypy checking can be found here.

Summary

This package defines a class PWL to generate objects that represent time dependent signals $x(t)$ that need to be coded in a PWL file. Those objects are built using little components such as rectangular pulses and sawtooth pulses that can be chained together.

Motivation

The motivations for this package are the nuisances of writing PWL files by hand. To properly explain this, let's discuss how PWL files work.

PWL stands for piecewise linear. A PWL file is a way to represent a time dependent signal (referenced by $x(t)$ from now on) for simulation softwares such as LTspice and Cadence Virtuoso. In it, points of the form $(t, x)$ are stored. During simulation, those points are interpolated with first degree polynomials. This poses 2 problems:

  1. Due to the linear interpolation, the resulting signal is continuous. This tends to be desirable, but if the intention is moddeling, for example, rectangular pulses, each transition will need 2 points with very close time coordinates to approximate a discontinuous transition. This can get extremely tedious to code out by hand.
  2. Each point has an absolute time coordinate with respect to the origin. If the desired signal is for example a series of rectangular pulses with certain durations and for some reason the duration of the first pulse is changed, all the following points will need to have their time coordinates changed as well.

This package solves both problems by providing an abstraction layer. They are solved by the 2 following features:

  1. A minimal timestep is defined at the creation of the PWL object that is used to automatically generate all the needed transitions for any discontinous transition.
  2. The signal is built using small building blocks (such as rectangular pulse and exponential transition) called events that are defined in terms of durations. That is to say, time is treated in a differential fashion. The time coordinates from a given event are all with respect to the final instant of the previous event. For example, let's assume we want to model a rectangular pulse with amplitude 1 and duration 1 second followed by a downtime at zero for 10 seconds and then another rectangular pulse with the same duration and amplitude. If we change the duration of the first pulse to 2 seconds, the downtime and second pulse will be both delayed by the 1 second but retain their durations.

Another advantage of using this package is not a feature per se but more a consequence of using a programing language. That advantage is simply that all those events can be added inside for loops, if clauses and functions, allowing for greater flexibility. For example, let's assume we want to control a system that can be in the following states:

  • Idle
  • Mode 1
  • Mode 2

For each state, various control signals need to be at specific values. We could create a PWL object for each control signal and define 3 functions that apply all the needed values for the control signals for each state. If we nedded the system to be at mode 1 for 3 seconds, idle for 1 second and at mode 2 for 5 seconds, we could write something like the following:

mode1_state(3)
idle_state(1)
mode2_state(5)

How to Install

To install, simply run one of the following commands:

pip install pwl_writer
pip3 install pwl_writer

Documentation

Full documentation for the package can be found here. It was written with Pycco.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pwl_writer-1.1.0.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pwl_writer-1.1.0-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file pwl_writer-1.1.0.tar.gz.

File metadata

  • Download URL: pwl_writer-1.1.0.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for pwl_writer-1.1.0.tar.gz
Algorithm Hash digest
SHA256 c7d3864e09f29843400af6de0613bd8de77e8d24bc41d18a0e4f8f89037fc79d
MD5 870d4cdb06194ce0540c570b0bd064d2
BLAKE2b-256 287fa8cf3b7d380da07449aaf78cdf42681eba429ad7f46e9da12ad259f89d59

See more details on using hashes here.

File details

Details for the file pwl_writer-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pwl_writer-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for pwl_writer-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ea1c0d401a50edf66fe4970d19efa45385a25791c0635578849ea2f2c462c1f8
MD5 d60e3486b03c6f014eff71c10bab1626
BLAKE2b-256 96381130596e00d375f658f0d36e9fdad4df07dcb7055aa2109d0d2a22004de9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page