Skip to main content

oma-python

Open-source Operational Modal Analysis (OMA) algorithms for Python. Estimate natural frequencies, damping ratios, and mode shapes from ambient vibration measurements.

Install the distribution as oma-python; import the library as dynoma.

Install

pip install oma-python

For local development with uv:

uv sync --group dev

Quick start (FDD)

Frequency Domain Decomposition on a synthetic multi-channel signal:

import numpy as np
from dynoma import FDD

rng = np.random.default_rng(0)
fs = 100.0  # Hz
t = np.arange(0, 40, 1 / fs)

# Ambient-like response on 3 channels (modes near 2.5 Hz and 6.0 Hz)
signal = np.column_stack(
    [
        np.sin(2 * np.pi * 2.5 * t) + 0.4 * np.sin(2 * np.pi * 6.0 * t),
        0.8 * np.sin(2 * np.pi * 2.5 * t + 0.2) + np.sin(2 * np.pi * 6.0 * t),
        0.5 * np.sin(2 * np.pi * 2.5 * t) + 0.7 * np.sin(2 * np.pi * 6.0 * t + 0.1),
    ]
)
signal += 0.05 * rng.standard_normal(signal.shape)

fdd = FDD(
    frequency_min=0.0,
    frequency_max=20.0,
    number_of_fft_points=512,
    num_svd_plots=3,
)

# Optional: inspect SVD lines before picking peaks
frequencies, eigenvalues, eigenvectors = fdd.compute_signal_svd(
    signal=signal,
    sampling_frequency=fs,
)

# Results are TypedDict mappings (use bracket access)
results = fdd.apply(
    signal=signal,
    sampling_frequency=fs,
    peaks_range=[[2.0, 3.0], [5.5, 6.5]],
)

print(results["frequencies"])       # ~2.54 Hz, ~6.05 Hz
print(results["complex_mode_shapes"].shape)  # (n_channels, n_modes)
print(results["real_mode_shapes"].shape)

Covariance SSI

from dynoma import CovSSI

cov_ssi = CovSSI(
    frequency_min=0.0,
    frequency_max=20.0,
    order_min=20,
    order_max=40,
    order_steps=2,
    time_lag=1.2,
    number_of_fft_points=256,
    num_svd_plots=3,
    continuous_mode=True,
)

results, dashboard = cov_ssi.apply(
    signal=signal,
    sampling_frequency=fs,
    optimized=True,
    shuffle=False,
)

print(results["frequencies"])
print(results["damping_ratios"])  # percent scale
# dashboard is None when continuous_mode=True (default, headless).
# For SVD / stability dashboard plots, set continuous_mode=False on CovSSI,
# then: svd_plot_data = cov_ssi.get_svd_plot_data(
#     signal=signal, sampling_frequency=fs, dashboard_data=dashboard
# )

Public API

from dynoma import FDD, CovSSI, OmaAlgorithm, ModalIdentificationError, __version__
Symbol Role
FDD Frequency Domain Decomposition
CovSSI Covariance-driven Stochastic Subspace Identification
OmaAlgorithm Shared CSD / SVD base (usually subclassed)
ModalIdentificationError Domain errors from validation / identification

Signal layout is (n_samples, n_channels).

Requirements

  • Python ≥ 3.10
  • NumPy, SciPy, Pydantic, PyTorch

CPU-only PyTorch wheels are preferred for development (uv is configured for the official CPU index).

Changelog

See CHANGELOG.md.

License

MIT — see LICENSE.

Metadata

Release files for oma-python 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 oma-python 0.1.1
File Size Uploaded Provenance Actions
oma_python-0.1.1.tar.gz 24.1 kB With provenance Details for oma_python-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for oma-python 0.1.1
File Interpreter ABI Platform Actions
oma_python-0.1.1-py3-none-any.whl Python 3 none any Details for oma_python-0.1.1-py3-none-any.whl

Total release size: 48.4 kB

Release files / oma_python-0.1.1.tar.gz

Download URL oma_python-0.1.1.tar.gz
Size 24.1 kB
Tags Source
SHA-256 checksum
How to use checksums
75f95ef69c67b65f935e0970c6680d9185a02b6edb95dbbc7a796bb6ec26ca61
BLAKE2b-256 checksum
How to use checksums
8bb6a298b6f007ba1bec28443ab508d7393a3857e57fbfe0b8fb786ce9ed59d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / oma_python-0.1.1-py3-none-any.whl

Download URL oma_python-0.1.1-py3-none-any.whl
Size 24.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc4b1fe161dadd73e0c523ae61feb858ba92fcef42fde233e303279aed1db624
BLAKE2b-256 checksum
How to use checksums
4739dd98831918240393b1a3a5e578a2e98b088babee23ffc985926dc2a576e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Security for oma-python 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for oma_python-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

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