RotorVitals — Rotating-Machinery Condition Monitoring & Prognostics
An in-browser condition-monitoring and prognostics workbench for rotating machinery (bearings-first), running on real measured vibration. A source selector switches between a synthetic signal generator, real diagnosis segments (CWRU / Ottawa order-tracked / MaFaulDa), and real run-to-failure trajectories (FEMTO / XJTU / IMS). A classical DSP chain, a learned WDCNN + deep-autoencoder, and a four-model RUL ladder run live via onnxruntime-web. Honest by design: synthetic labelled as such, cross-domain transfer flagged, frequency relations exact.
Business Context
Unplanned failure of a crusher or conveyor stops a line; condition monitoring exists to convert that into a planned intervention, caught days or weeks ahead. The value here is not just a diagnosis but a defensible one: it names the failing element AND projects a remaining useful life with an uncertainty band, and it is honest about when the learned model can be trusted — showing, on real data, where deep learning wins (in-distribution) and where physics wins (cross-rig), instead of a single flattering accuracy.
Strategic Value
RotorVitals demonstrates a full condition-monitoring-to-prognostics stack running entirely client-side on public real data, with the discipline to report its own failure modes: a CWRU-trained WDCNN that nails one severity but collapses on another, and that scores near chance cross-rig on MFPT while the training-free envelope analysis transfers almost perfectly — the honest lesson that deep learning wins in-distribution and physics wins out-of-distribution. The RUL side is a genuine model ladder from closed-form to Bayesian to deep, benchmarked against 36 real run-to-failure trajectories. It is a reusable pattern for explainable, on-device, honestly-scoped monitoring of rotating equipment.
The Challenge
Rotating equipment — crushers, conveyors, pumps, fans — fails most often at the bearing, and the developing fault is buried in vibration, masked by everything else that spins. Catching it early is high-value, but the useful questions go beyond "is something wrong": which element is degrading, is the model trustworthy on data it was not trained on, and how long until failure. Most tools answer only the first, with a black-box number you cannot audit on a safety-relevant call.
Our Approach
RotorVitals is a browser workbench with a first-level source selector that decides what everything operates on: a physically-grounded synthetic generator (fault type, severity, rpm, SNR as live controls); real diagnosis segments from CWRU (the classifier's native domain), Ottawa (time-varying speed, computed-order-tracked so defect frequencies sit at constant orders and a real Campbell view is possible), and MaFaulDa; and real run-to-failure trajectories from FEMTO/PRONOSTIA, XJTU-SY and IMS. On the selected data it runs three tiers live: a classical DSP chain (envelope/SES, kurtogram/infogram, cyclostationary, cepstrum, Campbell/order, ISO velocity zones), a learned tier (a WDCNN classifier and a deep-autoencoder health indicator, both ONNX, run in-domain on CWRU and cross-domain-labelled elsewhere), and a four-model remaining-useful-life ladder (classical first-passage, particle filter, Gaussian process, and a deep-RUL CNN) projecting against the experiment's true failure time. Everything is client-side: TypeScript DSP plus onnxruntime-web, static on GitHub Pages.
Key Performance Indicators
| KPI | Baseline | Result | Impact |
|---|---|---|---|
| What the result tells you | RMS threshold: "something is wrong" | Fault TYPE at its kinematic line + a projected RUL with an uncertainty band | Plan the right intervention and its timing |
| Diagnosis honesty | Black-box accuracy on a clean rig | SNR-robustness curve + cross-dataset transfer test (WDCNN vs physics) on real data | You see where the model fails, not one flattering number |
| Data | Needs a proprietary labelled set | Live on 4 public real datasets (CWRU, Ottawa, MaFaulDa; FEMTO/XJTU/IMS) + MFPT cross-eval | Reproducible; raw archives link-only, never re-hosted |
| Compute | Server / GPU inference service | 100% client-side: TypeScript DSP + onnxruntime-web (WASM) | Static hosting, nothing to install, zero backend |
Architecture
rotorvitals pipeline
From “something is wrong” to “which element, and how long”
RotorVitals is an in-browser condition-monitoring and prognostics workbench for rotating machinery, bearings-first, running on real measured vibration. Envelope analysis (the classic bearing-fault method) is now one tier inside it. Live at rotorvitals.fasl-work.com, part of the Faena mining-analytics hub.
A source selector drives the whole workbench
- Synthetic (with controls) — a physically-grounded generator (McFadden & Smith 1984); fault type, severity, rpm and SNR are live knobs to explore the physics. Severities here are synthetic and labelled as such.
- Real: diagnosis segment — a measured window from CWRU (the classifier’s native domain), Ottawa (time-varying speed, computed-order-tracked → a real Campbell/order view), or MaFaulDa.
- Real: run-to-failure — a real trajectory from FEMTO/PRONOSTIA, XJTU-SY or IMS; a life-instant slider scrubs measured windows healthy → failure, the waterfall is the real degradation surface, and RUL projects against the experiment’s true failure time.
Three tiers, run live
Classical DSP (envelope/SES, kurtogram/infogram, cyclostationary, cepstrum, Campbell/order, ISO velocity zones) · a learned tier (a WDCNN classifier + a deep-autoencoder health indicator, both ONNX) · and a four-model RUL ladder (exponential first-passage → particle filter → Gaussian process → deep-RUL CNN), benchmarked on 36 real run-to-failure trajectories (GP gives the lowest aggregate error, ≈1 h MAE, with the transparent exponential a close second at ≈2.7 h — an aggregate over lifetimes from ~0.6 h to ~1000+ h).
Honest about the model’s limits
The learned classifier is trained on CWRU and shown in-domain there (with an entire load held out); everywhere else it is cross-domain-labelled, and its failures are on display, not hidden: trained only on 0.007″ faults it nails 0.021″ but collapses on 0.014″ (27.8%), and it scores near chance cross-rig on MFPT (0% outer-race recall) while the training-free envelope analysis transfers almost perfectly. The lesson, shown not claimed: deep learning wins in-distribution, physics wins out-of-distribution. Synthetic cases are labelled synthetic, frequency relations are exact, and the scope is rotating machinery, bearings-first — no gear claim (no gear dataset), variable speed only via the one order-tracked dataset.
Technology Stack
Visual assets for this project are not publicly available.