Projects Newly released projects
rota-order
Newly released project. First released in October 2026; the README calls it pre-alpha. Not yet seen to be widely used in the community. Check its validation before relying on it.
Order analysis of noise and vibration from rotating machinery such as engines, electric motors and gearboxes. It finds the shaft speed from a tachometer or from the signal itself, resamples signals to the shaft angle, computes Campbell and order maps, extracts and removes orders with a Vold-Kalman filter, resynthesises sound from order tables and plots these results. On top of this it computes the ECMA-418-1:2024 tone-to-noise ratio and prominence ratio of machine orders along a run-up, and its wrappers compute loudness, sharpness, roughness and tonality with MoSQITo, sottek-hearing-model or SQAT and bin the results along rpm.
| Full name | ROTA: Rotational Order Tracking and Analysis |
|---|---|
| Repository | https://github.com/ZhenxianLi/rota-order |
| Documentation | https://github.com/ZhenxianLi/rota-order#readme |
| Language | Python |
| Kind | Library/Toolbox Functions to call from your own code: a Python package, a MATLAB toolbox, or a C, C++, C#, Rust or Julia library. |
| Group | newly released First released less than about a year ago, and not yet seen to be widely used in the community. |
| Licence | GPL-3.0-or-later |
| Package | PyPI rota-order |
| Install | pip install rota-order |
| Latest release | 0.7.0 (2026-10) |
| Last commit | 2026-10-28 active |
| Maintainers | Zhenxian LI |
| AI assistance | disclosed (The README says that Claude (Anthropic) was used as an assistant during development.) |
| How to cite | The README points to CITATION.cff ("Cite this repository" on GitHub); a Zenodo DOI is planned for version 1.0. The repository has a CITATION.cff file. Name the version or commit you used. |
| Entry checked | 28 October 2026 |
What it implements
| Metric | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|
| Zwicker loudness | ISO 532-1:2017 time-varying, through MoSQITo's loudness_zwtv; since 0.6.0 | rota.bridges.mosqito.loudness | own tests only | new Computed by MoSQITo. |
| Zwicker loudness | ISO 532-1:2017 time-varying, through SQAT v2.0's Loudness_ISO532_1 in MATLAB; since 0.6.0 | rota.bridges.sqat.loudness | own tests only | new Computed by SQAT. |
| Sottek Hearing Model loudness | ECMA-418-2:2025 (4th ed.) through sottek-hearing-model's shm_loudness_ecma_from_comp; since 0.6.0 | rota.bridges.sottek_hearing_model.loudness | own tests only | new Computed by sottek-hearing-model. |
| Sharpness | DIN 45692:2009 through MoSQITo's sharpness_din_from_loudness; since 0.6.0 | rota.bridges.mosqito.sharpness | own tests only | new Computed by MoSQITo. |
| Sharpness | DIN 45692:2009 through SQAT v2.0's Sharpness_DIN45692_from_loudness in MATLAB; since 0.6.0 | rota.bridges.sqat.sharpness | own tests only | new Computed by SQAT. |
| Roughness (Daniel & Weber) | Daniel & Weber (1997) through MoSQITo's roughness_dw; since 0.6.0 | rota.bridges.mosqito.roughness | own tests only | new Computed by MoSQITo. |
| Roughness (Daniel & Weber) | Daniel & Weber (1997) through SQAT v2.0's Roughness_Daniel1997 in MATLAB; since 0.6.0 | rota.bridges.sqat.roughness | own tests only | new Computed by SQAT. |
| Sottek Hearing Model roughness | ECMA-418-2:2025 (4th ed.) through sottek-hearing-model's shm_roughness_ecma; since 0.6.0 | rota.bridges.sottek_hearing_model.roughness | own tests only | new Computed by sottek-hearing-model. |
| Sottek Hearing Model tonality | ECMA-418-2:2025 (4th ed.) through sottek-hearing-model's shm_tonality_ecma; since 0.6.0 | rota.bridges.sottek_hearing_model.tonality | own tests only | new Computed by sottek-hearing-model. |
| Sottek Hearing Model tonality | ECMA-418-2:2025 (4th ed.) through SQAT v2.0's Tonality_ECMA418_2 in MATLAB; since 0.6.0 | rota.bridges.sqat.tonality | own tests only | new Computed by SQAT. |
| Tone-to-noise ratio and prominence ratio | ECMA-418-1:2024 (3rd ed.) tones in a power spectrum, and orders of a rotating machine along a run-up; since 0.5.0 | rota.tonal.tone_prominence, rota.tonal.order_prominence, rota.tonal.prominence_criterion | standard or paper data (formula examples; no published TNR or PR value) also compared with MoSQITo | new The "prominent" flag applies the numeric criterion only; the aural check of audibility (Sections 11.8 and 12.8) is not assessed. |
How it was validated
As reported by the project; LISQM has not run the code. Two implementations that agree can still share the same error. Kinds of evidence.
- Zwicker loudness · ISO 532-1:2017 (time-varying, through MoSQITo's loudness_zwtv)
own tests only
- Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives on the same signal, also after resampling to 48 kHz, that the calibration factor scales the loudness, and that
vs_rpmgives what binning the values by hand gives.
- Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives on the same signal, also after resampling to 48 kHz, that the calibration factor scales the loudness, and that
- Zwicker loudness · ISO 532-1:2017 (time-varying, through SQAT v2.0's Loudness_ISO532_1 in MATLAB)
- Sharpness · DIN 45692:2009 (through SQAT v2.0's Sharpness_DIN45692_from_loudness in MATLAB)
- Roughness (Daniel & Weber) · Daniel & Weber (1997) (through SQAT v2.0's Roughness_Daniel1997 in MATLAB)
- Sottek Hearing Model tonality · ECMA-418-2:2025 (4th ed.) (through SQAT v2.0's Tonality_ECMA418_2 in MATLAB)
own tests only
- Tests with a stub engine check the call passed to SQAT and the conversion of its output; the comparison with a direct SQAT call runs only where MATLAB and SQAT v2.0 are installed.
- Sottek Hearing Model loudness · ECMA-418-2:2025 (4th ed.)
- Sottek Hearing Model roughness · ECMA-418-2:2025 (4th ed.)
own tests only
- Tests, which run only where sottek-hearing-model is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of the package gives.
- Sharpness · DIN 45692:2009 (through MoSQITo's sharpness_din_from_loudness)
own tests only
- Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives, also when the sharpness is computed from an earlier loudness result.
- Roughness (Daniel & Weber) · Daniel & Weber (1997) (through MoSQITo's roughness_dw)
own tests only
- Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives.
- Sottek Hearing Model tonality · ECMA-418-2:2025 (4th ed.) (through sottek-hearing-model's shm_tonality_ecma)
own tests only
- Tests, which run only where sottek-hearing-model is installed (the project's continuous integration does not install it), check that the wrappers return what direct calls of the package give, that one speed bin reproduces the package's single values, and that the dominant tonal frequency of a tone in noise maps to its order.
- Tone-to-noise ratio and prominence ratio · ECMA-418-1:2024 (3rd ed.)
standard or paper data (formula examples; no published TNR or PR value) also compared with MoSQITo
- Tests check worked examples printed in ECMA-418-1:2024: the critical bandwidth at 500 Hz and 1 kHz (Clause 10), the band edges at 1 kHz (Clause 12.2) and the proximity spacing at 150 and 850 Hz (Clause 11.6). The criteria are checked at 100 Hz, 1 kHz and 5 kHz.
- TNR and PR of tones at 140 Hz, 1 kHz and 3 kHz in white noise are compared with the values that the standard's formulas give for the known tone and noise powers, within 0.5 dB; on spectra built line by line they agree to within 1e-9 dB for TNR and 0.03 dB for PR. No TNR or PR value published in the standard is checked.
- For an order in a synthetic run-up,
order_prominencegives the TNR within 1 dB of the analytic value in every speed bin, with a mean error below 0.4 dB. - A test compares the TNR of tones at 130 Hz to 4 kHz in flat noise with MoSQITo's
tnr_ecma_stand requires agreement within 1.5 dB. MoSQITo follows ECMA-74:2019, so the comparison crosses editions. The test runs only where MoSQITo is installed, which the project's continuous integration does not do.
Before you compare numbers
Implementations of the same metric can give different numbers without either being wrong. Check these choices first.
- The method
vs_rpmof a wrapper's result bins it along rpm after leaving out the start of the signal: by default it takes in each speed bin the 95th percentile of the loudness (N5), the median of the sharpness and the 90th percentile of the roughness, after 0.6 s for loudness and sharpness and 1.5 s for roughness. Keyword arguments override these choices. - For the ECMA-418-2 metrics,
vs_rpmtakes by default the mean of the loudness and the tonality in each speed bin, the tonality only above 0.02 tu_HMS, and the 90th percentile of the roughness, after about 0.3 s (0.6 s for SQAT's tonality). - Input in any unit is turned into sound pressure in Pa by an explicit calibration factor and resampled to 48 kHz.
For single metrics:
- Tone-to-noise ratio and prominence ratio (ECMA-418-1:2024 (3rd ed.))
order_prominenceanalyses orders on the order-tracked (angle-domain) spectrum, so that an order stays one spectral line in every frame of a run-up. The docstring and a test show that a fixed time window long enough for the resolution the standard asks for at low frequency spreads a fast-sweeping order over the band and biases its TNR low, by about 19 dB in the test case.- Where the text of the 3rd edition is inconsistent, the module notes how it is read: the secondary tone is added in Formulae (A.7) and (A.8), the tone spacing is |f_s − f_p|, 500 Hz takes arithmetic centring, the criteria cover 89.1 Hz to 11 200 Hz, and the misprints of Formulae (21) and (23) are resolved with their Annex B counterparts.
Notes
- The order analysis follows the published literature cited in each docstring and is tested on synthetic signals with known speed, angle and order amplitudes; the README gives the tolerances, for example 0.2 dB for order amplitudes on stationary segments.
- Versions 0.6.0 (the wrappers of
rota.bridges) and 0.7.0 (the figures ofrota.plot) were released on 2026-10-28, both tagged and on PyPI. - The README places the psychoacoustic metrics themselves (loudness, sharpness, roughness, tonality) outside the project's scope. The wrappers of
rota.bridgescall the public functions of the toolboxes at run time, never copy their code, and state each toolbox's licence and how its authors ask to be cited. - The repository was renamed from ROTA to rota-order in October 2026; the old address redirects.
Before you rely on it
- Very new (first released in October 2026) and not yet seen to be widely used in the community; no independent verification has been published.
- The README calls the current version pre-alpha and says that functions and signatures may still change before 1.0.
- The SQAT wrappers need a licensed local MATLAB with the Signal Processing Toolbox and a checkout of SQAT v2.0.
Sources
- https://github.com/ZhenxianLi/rota-order/blob/main/README.md
- https://github.com/ZhenxianLi/rota-order/blob/main/LICENSE
- https://github.com/ZhenxianLi/rota-order/blob/main/CITATION.cff
- https://github.com/ZhenxianLi/rota-order/blob/main/CHANGELOG.md
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/_prominence.py
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/bridges/__init__.py
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/bridges/_common.py
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/bridges/mosqito.py
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/bridges/sottek_hearing_model.py
- https://github.com/ZhenxianLi/rota-order/blob/main/src/rota/bridges/sqat.py
- https://github.com/ZhenxianLi/rota-order/blob/main/tests/test_prominence.py
- https://github.com/ZhenxianLi/rota-order/blob/main/tests/test_bridge_mosqito.py
- https://github.com/ZhenxianLi/rota-order/blob/main/tests/test_bridge_shm.py
- https://github.com/ZhenxianLi/rota-order/blob/main/tests/test_bridges.py
- https://github.com/ZhenxianLi/rota-order/blob/main/tests/test_bridges_sqat.py
- https://github.com/ZhenxianLi/rota-order/blob/main/pyproject.toml
- https://github.com/ZhenxianLi/rota-order/blob/main/.github/workflows/tests.yml
- https://pypi.org/project/rota-order/