Using Spaxiom for Predictive Maintenance with Vibration & Acoustic Analysis
Joe Scanlin
November 2025
Spaxiom is a sensor abstraction layer and runtime that translates billions of heterogeneous sensor streams into structured, semantic events. It provides a spatial-temporal DSL for defining zones, entities, and conditions, making it easy to build context-aware applications across industries.
INTENT (Intelligent Network for Temporal & Embodied Neuro-symbolic Tasks) is Spaxiom's high-level event vocabulary. Instead of overwhelming AI agents with raw sensor data, Spaxiom emits compact, meaningful events that agents can immediately understand and act upon.
Industrial facilities have critical rotating equipment like pumps, compressors, and turbines that cost millions if they fail unexpectedly. Today's predictive maintenance relies on vendor-specific tools, manual analysis, and complex vibration data that's hard to interpret. The challenge is that each vendor's vibration analyzer, acoustic sensor, and electrical monitor uses proprietary formats that don't integrate with each other, making it impossible for AI agents to get a unified view of machine health.
Spaxiom acts as a "machinery health cortex" that combines vibration sensors, acoustic monitoring, temperature readings, and electrical measurements into one unified system. Instead of engineers having to analyze complex frequency spectrums, Spaxiom translates everything into simple health scores and actionable alerts like "bearing degradation detected in Pump P-101" or "imbalance warning in Compressor C-204." This helps maintenance teams catch problems early, schedule repairs at optimal times, and prevent catastrophic failures that shut down production.
Critical rotating equipment (pumps, fans, compressors, gearboxes, turbines) is instrumented heavily in modern industrial facilities. Traditional "predictive maintenance" stacks often revolve around vendor-specific vibration analyzers, ad-hoc thresholds, and periodic offline analysis. However, the semantics of what operators actually care about are higher-level:
Spaxiom can serve as a machinery health cortex, fusing vibration, acoustic, electrical, and thermal measurements into structured INTENT events that agents and engineers can reason over consistently across vendors and plants.
For a rotating asset m (e.g., pump P-101), typical sensors include:
Spaxiom does not need to operate at raw waveform level; instead, it consumes features precomputed either at the edge or inside a preprocessor:
From these features, Spaxiom defines higher-level INTENT events such as:
BearingAnomaly (spectral patterns consistent with bearing defect frequencies),ImbalanceDetected (elevated 1X vibration at speed-correlated frequency),CavitationRisk (acoustic + vibration signature in pumps),LoadSpike (current and torque exceeding normal envelopes),ThermalRunawayRisk (sustained temperature rise faster than expected under load).For a machine m and window [t0, t1], suppose we have:
Normalized feature integrals. Define normalized, windowed feature integrals:
where Δt = t1 - t0 and σ·m,base are baseline (healthy) standard deviations.
Similarly define:
where Tbasem(L) is the expected temperature as a function of load (learned from historical data).
Composite health score. We can define a simple machine health "anomaly score":
with weights wi ≥ 0 tuned per machine or class. High Hm indicates abnormal behavior over the window.
Discrete INTENT events. We can then create discrete INTENT events when:
yielding MachineHealthWarning or MachineHealthAlarm for machine m.
In the DSL, a rotating machine entity might encapsulate feature histories and health computation:
from spaxiom import Condition
from spaxiom.temporal import within
from spaxiom.logic import on
class RotatingMachine:
def __init__(self, name, feat_source):
self.name = name
self.feat_source = feat_source # e.g., streaming feature vectors
# Baseline stats & thresholds (could be learned)
self.sigma_1x = 0.12
self.sigma_bd = 0.08
self.warn_threshold = 2.0
self.alarm_threshold = 4.0
def feature_history(self, window_s: float):
"""
Returns a list of (dt, features) where features is a dict like:
{
"v_1x": ...,
"v_bd": ...,
"kurtosis": ...,
"temp": ...,
"load": ...,
}
"""
return self.feat_source.history(window_s=window_s)
def expected_temp(self, load: float) -> float:
# Simple linear model as placeholder; could be learned per machine
return 40.0 + 25.0 * load
def health_score(self, window_s: float) -> float:
series = self.feature_history(window_s)
if not series:
return 0.0
sum_v1x = sum_vbd = sum_k = sum_texcess = 0.0
total_dt = 0.0
for dt, f in series:
v1x = f["v_1x"] / max(self.sigma_1x, 1e-6)
vbd = f["v_bd"] / max(self.sigma_bd, 1e-6)
k = f["kurtosis"]
temp = f["temp"]
load = f["load"]
texcess = max(0.0, temp - self.expected_temp(load))
sum_v1x += v1x * dt
sum_vbd += vbd * dt
sum_k += k * dt
sum_texcess += texcess * dt
total_dt += dt
if total_dt <= 0:
return 0.0
V1x = sum_v1x / total_dt
Vbd = sum_vbd / total_dt
K = sum_k / total_dt
Tex = sum_texcess / total_dt
w1, w2, w3, w4 = 0.4, 0.3, 0.2, 0.1
return w1 * V1x + w2 * Vbd + w3 * K + w4 * Tex
# Example machine instance
pump_101 = RotatingMachine("P-101", feat_source=pump_101_feat_stream)
# Conditions that trigger warnings/alarms over the last 24 hours
warn_condition = Condition(
lambda: pump_101.health_score(window_s=24 * 3600) > pump_101.warn_threshold
)
alarm_condition = Condition(
lambda: pump_101.health_score(window_s=24 * 3600) > pump_101.alarm_threshold
)
@on(within(3600, warn_condition)) # evaluate every hour
def pump_warning_agent():
score = pump_101.health_score(window_s=24 * 3600)
emit_intent_event({
"type": "MachineHealthWarning",
"machine": pump_101.name,
"score": score,
"window_h": 24,
})
# Optional: hand off to LLM for recommended maintenance actions.
@on(within(600, alarm_condition)) # evaluate every 10 minutes
def pump_alarm_agent():
score = pump_101.health_score(window_s=24 * 3600)
emit_intent_event({
"type": "MachineHealthAlarm",
"machine": pump_101.name,
"score": score,
"window_h": 24,
})
# Optionally, trigger interlocks, derates, or automated shutdown logic.
This sketch illustrates how Spaxiom:
feat_source.history),health_score to be consumed by agents and workflows.Figure A.2: Rotating machinery health score and components for Pump P-101 over 15 days. Panel 1 shows normalized 1X vibration (orange) and bearing-band vibration (red), with bearing defects gradually increasing. Panel 2 shows spectral kurtosis (blue) and temperature excess (green), both rising as bearing condition deteriorates. Panel 3 shows the composite health score Hm (purple) crossing the warning threshold at day 9 and alarm threshold at day 11, triggering corresponding INTENT events.