Skip to main content

PySFG

Build Status

A package for symbolic signal flow graph analysis.

The input reads a text file in a human-friendly coding format to describe the signal flow graph. The program is able to calculate the transfer function between two nodes. The resulting symbolic expressions are easily interoperatable with Sympy and other scientific packages.

Requires Python >= 3.6.

Installation

For Users

$ pip install pysfg

For Hackers

$ git checkout https://github.com/qrqiuren/PySFG.git
$ cd PySFG
$ python setup.py develop

Tutorial

The signal flow graph is a good tool for various fields of engineers. Various kinds of systems in real world engineering would be easily converted to signal flow graphs.

Let's take an example. Suppose we have the following signal flow graph from an electronic system.

Electronic system

Then, we can convert the graph into the following code twoport.yml:

# The `#` symbol starts a line of comment

# Define source nodes, sink nodes and other nodes
sources:
    - Vin
sinks:
    - V2    # We can use V2 directly as the sink node
nodes:
    - V1
    - I1
    - V2
    - I2

# Define edges
# Each edge has a format of `u ~> v: f`, where the edge points from node `u`
# to node `v`, with a transfer function of `f`. `f` is convertible to a
# SymPy expression.
# Fire Code is recommended to render `~>` symbol prettier.
edges:
    Vin ~> V1: 1    # Constants are acceptable

    # Admittance matrix
    V1 ~> I1: y11   # Symbols are acceptable
    V2 ~> I1: y12
    V1 ~> I2: y21
    V2 ~> I2: y22

    # Impedances
    I1 ~> V1: -Rin  # Expressions are acceptable
    I2 ~> V2: -RL

The code format is a subset of YAML (or "StrictYAML"). It avoids some ambiguous syntax in YAML by default, while reserves the human-friendly coding style.

Run the following Python commands to load and solve the transfer function from node Vin to node V2:

>>> from pysfg import SignalFlowGraph
>>> sfg = SignalFlowGraph('twoport.yml')
>>> tf = sfg.find_graph_gain('Vin', 'V2')
>>> print(tf)
-RL*y21/(RL*Rin*y11*y22 - RL*Rin*y12*y21 + RL*y22 + Rin*y11 + 1)

The result is a SymPy expression. It can be further used for calculation in other programs.

Task List

  • Implement hierarchichal signal flow graph

Release files for pysfg 0.1.1

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

Source distribution (sdist)

Source distribution for pysfg 0.1.1
File Size Uploaded
pysfg-0.1.1.tar.gz 4.5 kB Details

Release files / pysfg-0.1.1.tar.gz

Download URL pysfg-0.1.1.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
35dd81f3244d00c7b22cbe4ba0f39e9fa243dc09e065a75322b4424490db5272
BLAKE2b-256 checksum
How to use checksums
e953ced13d8783c634e9b34ca0076045dba79c35832e63636aaa177870ac7326
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.1

Release history Release notifications | RSS feed

This release

0.1.1 This release

1 release file

0.0.2

1 release file

0.0.1

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