Skip to main content

SignalForge Testing Documentation Status

SignalForge

SignalForge is an open-source Python package that provides a comprehensive set of tools for analyzing and generating non-Gaussian, non-stationary signals in engineering applications. While traditional signal processing methods often rely on assumptions of Gaussianity and stationarity, real-world signals—especially those found in mechanical systems—frequently deviate from these idealized models. SignalForge bridges this gap by offering advanced, yet user-friendly tools to simulate, inspect, and manipulate signals with complex statistical properties. Whether you're designing loads for testing, exploring time-varying behavior, or developing new algorithms, SignalForge enables you to work with signals that better reflect real operating conditions. Built with extensibility and clarity in mind, the package is suitable for researchers, practitioners, and students working across mechanical engineering, signal processing, and beyond.

See the documentation for a complete overview of the implemented methods for analisys and signal generation.

Installing SignalForge

The package is published in PiPy. To install it:

pip install signalforge

or you can clone it from GitHub

git clone https://github.com/GiulioCurti/SignalForge.git

and locally install it from inside the folder SignalForge

pip install -e .

Example code on how to generate a Stationary Gaussian Signal

Stationary Gaussian signals can be easily generated via the specific class StationaryGaussian. Its usage is briefly shown in the following example code:

from SignalForge import StationaryGaussian

fpsd = [10,20]  # Frequency vector [Hz]
psd = [1,1]     # Power density vecrtor [(m/s^2)^2/Hz]
fs = 200        # Sampling frequency [Hz]
T = 200         # Time duration [s]
gauss_signal = StationaryGaussian(
    fpsd=fpsd, 
    psd=psd, 
    fs=fs, 
    T = T, 
    name = 'Stationary Gaussian', 
    unit='$m/s^2$'
    ) # StationaryGaussian class initialization
print(gauss_signal)
gauss_signal.plot()           # Plotting Timehistory
gauss_signal.plot_psd()       # Plotting Power spectral density 

Implemented non-linear transformartion methods to add non-gaussianity are the following:

  • Hermite-Winterstein ('winter')
  • Cubic polynomial ('cubic')
  • Hyperbolic transform – Zheng (‘zheng’)
  • Sarkani ('sarkani')
  • Improved nonlinear transform ('zmnl')
  • Steinwolf ('steinwolf')
  • Smallwoood Poisson shots ('smallwood')
  • Van Baren ('vanbaren')

Example code on how to generate a Stationary Non Gaussian Signal

Stationary non Gaussian signals can be easily generated via the specific class StationaryNonGaussian. Its usage is briefly shown in the following example code:

from SignalForge import StationaryNonGaussian

fpsd = [10,20]  # Frequency vector [Hz]
psd = [1,1]     # Power density vecrtor [(m/s^2)^2/Hz]
fs = 200        # Sampling frequency [Hz]
T = 200         # Time duration [s]
input_kurtosis = 6
nongauss_signal = StationaryNonGaussian(
    fpsd = fpsd, 
    psd = psd,
    T = T, 
    kurtosis=input_kurtosis,
    fs = fs, 
    method='zmnl', 
    name = 'Stationary NonGaussian', 
    unit='$m/s^2$'
    ) # StationaryNonGaussian class initalization
print(nongauss_signal)
nongauss_signal.plot()      # Plotting Timehistory
nongauss_signal.plot_psd()  # Plotting Power spectral density 
nongauss_signal.plot_fft()  # Plotting Fourier Transform

Example code on how to generate a Non Stationary Non Gaussian Signal

Non stationary non Gaussian signals can be easily generated via the specific class NonStationaryGaussian. Its usage is briefly shown in the following example code:

from SignalForge import NonStationaryNonGaussian

fpsd = [10,20]  # Frequency vector [Hz]
psd = [1,1]     # Power density vecrtor [(m/s^2)^2/Hz]
fs = 200        # Sampling frequency [Hz]
T = 200         # Time duration [s]
params = {'input_kurtosis': 10}
nonstat_signal = NonStationaryNonGaussian(
    fpsd = fpsd, 
    psd = psd, 
    T = T,
    params = params,
    fs = fs, 
    method='trapp_am', 
    name = 'NonStationary NonGaussian', 
    unit='$m/s^2$'
    ) # NonStationaryNonGaussian class initalization
print(nonstat_signal)
nonstat_signal.plot()      # Plotting Timehistory
nonstat_signal.plot_psd()  # Plotting Timehistory
nonstat_signal.plot_sftf()  # Plotting Short Time Fourier Transform

Implemented transformartion methods to build non-gaussianity signals are the following:

  • Beta amplitude modulation ('beta_am')
  • Gaussian amplitude modulation ('trapp_am')
  • Rayleigh amplitude modulation ('ray_am')
  • Frequency modulation via STFT ('fm')

Metadata

Release files for SignalForge 1.1.0

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

Source distribution (sdist)

Source distribution for SignalForge 1.1.0
File Size Uploaded
signalforge-1.1.0.tar.gz 59.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for SignalForge 1.1.0
File Interpreter ABI Platform
signalforge-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 119.2 kB

Release files / signalforge-1.1.0.tar.gz

Download URL signalforge-1.1.0.tar.gz
Size 59.4 kB
Tags Source
SHA-256 checksum
How to use checksums
06658219ab02d79cc536371e958928fbc67fa1d928c489c7782c106237c2f498
BLAKE2b-256 checksum
How to use checksums
aa5a3ad88eca01ae7149554ae3a978cc8cd41ba38041e425a9dc2b99dcba521c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / signalforge-1.1.0-py3-none-any.whl

Download URL signalforge-1.1.0-py3-none-any.whl
Size 59.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
47aefc697124d1fb97be67c91048f6704b068c37fe1abe4563367aafec6557b6
BLAKE2b-256 checksum
How to use checksums
3a28d7961583a24771036b125bce66bc27c8693f56f28011a83d191378d2e7e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.0.2

2 release files

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