Skip to content

Stability Intelligence

Stability Intelligence is the second intelligence layer in RAPID AI. It answers: Is the system stable or drifting toward failure? While Signal Intelligence (Chapter 4) analyzes individual components and signals, Stability Intelligence fuses evidence across the entire machine system to produce a unified health assessment. Two modules work together: Module C (SSI Fusion) and the AESF (Acceleration-Entropy Stability Framework).


No single signal tells the whole story. A bearing may show elevated kurtosis while the coupling vibration is normal and the foundation is stable. Or the foundation may be loose while the bearings appear healthy — but the loose foundation is amplifying forces that will destroy the bearings within weeks. Module C fuses all component-level evidence into a unified System Stability Index (SSI) and System State.

Different machine types have different weight distributions. A centrifugal pump places more diagnostic importance on fluid flow and bearings than on coupling. A gearbox places more weight on gears and lubrication. Module C uses system profiles to encode this engineering knowledge:

Example — Pump Train Horizontal (PROFILE_PUMP_A):

BlockWeightMin Required
foundation0.15Yes
ac_motor0.10Yes
coupling0.10No
shafts0.10Yes
afb (bearings)0.25Yes
fluid_flow0.30Yes

Weights auto-normalize when optional blocks are absent. If coupling data is unavailable, the remaining weights scale up proportionally so that SSI remains on the 0-1 scale.

Each component block receives a score based on seven rules evaluated in priority order (first match wins):

RulePriorityConditionBlock ScoreBlock State
BSR0071 (highest)B_match_score >= 0.900.90critical
BSR0012trend == "accelerating" AND conf >= 0.700.85unstable
BSR0032trend == "step" AND conf >= 0.700.80unstable
BSR0053B_match >= 0.70 AND (trend == "stable" OR conf < 0.50)0.55watch
BSR0024trend == "drifting" AND conf >= 0.600.65degrading
BSR0045trend == "chaotic" AND process_corr >= 0.700.35process-driven
BSR0066 (lowest)B_match < 0.30 AND trend == "stable"0.15healthy

The distinction between BSR004 (process-driven, score 0.35) and BSR002 (degrading, score 0.65) is important. Chaotic vibration that correlates with process variables (flow changes, pressure transients) indicates a process issue, not a mechanical failure. The lower score prevents false maintenance triggers while flagging the condition for process engineering review.

SSI = Sum(weight_i * block_score_i) / Sum(weight_i) clamped to [0, 1]
ThresholdSSI RangeSystem StateSeverity
CST001< 0.30healthynormal
CST0020.30 - 0.60watchwatch
CST0030.60 - 0.80warningwarning
CST004>= 0.80alarmalarm

A crucial safety mechanism: if Module B.3 reports stability_state == "Critical_Instability", then SSI = max(SSI, 0.70) regardless of the computed value. This prevents a scenario where individual component scores appear moderate but the system’s entropy has reached critical levels — indicating impending catastrophic behavior that the component-level analysis cannot capture.

This override embodies the PLS3D principle from Chapter 2: sometimes the failure is not in any single component but in the system dynamics, and the entropy measurement catches what component-level analysis misses.

Module C produces: SSI (0-1), System_State (healthy/watch/warning/alarm), severity_level, top_contributors[] (ranked by their contribution to SSI), recommended_action, SSI_components (per-block breakdown), and data_quality_flag. The top_contributors list is essential for the dashboard — it tells the reliability engineer which components are driving the system state, enabling focused investigation rather than broad inspection.


AESF — Acceleration-Entropy Stability Framework

Section titled “AESF — Acceleration-Entropy Stability Framework”

While Module C quantifies how unhealthy the system is, AESF characterizes what kind of instability is developing. It defines the machine’s operating “climate” across four dimensions: coherence, disorder, coupling, and transient instability.

AESF was developed to address a limitation of SSI: two machines can have the same SSI score but face completely different failure trajectories. One may be experiencing gradual bearing wear (localized, predictable). The other may be experiencing foundation looseness coupled with thermal growth (systemic, chaotic). AESF distinguishes these regimes.

AESF takes eight normalized (0-1) features from the signal processing pipeline:

FeatureDomainWhat It Measures
E001: SpectralEntropy_LFLow frequency (0-10 Hz)Structural looseness drift
E002: SpectralEntropy_MFMid frequency (10-1000 Hz)Modal coupling, running speed harmonics
E003: SpectralEntropy_HFHigh frequency (>1000 Hz)Impacts, cavitation, friction
E004: Line_to_Noise_RatioFull spectrumCoherence of expected forcing lines
E005: Spectral_FlatnessFull spectrumHow noise-like the spectrum is
E006: Kurtosis_TWFTime domainImpulsiveness of waveform
E007: Crest_FactorTime domainPeak-to-RMS ratio
E008: Jerk_IndexTime domainDerivative of acceleration — abrupt instability

AESF computes four indices, each scaled 0-100:

Stability Index (SI) — measures coherence. How well does the machine’s energy stay organized in expected spectral lines?

SI = 100 * (0.40 * LNR_n + 0.30 * LP_n + 0.20 * RLE_n + 0.10 * (1 - J_n))

High SI means energy is concentrated in known forcing frequencies (1x, 2x, gear mesh, blade pass). Low SI means energy is spreading into unexpected locations.

Entropy Index (EI) — measures disorder. How much spectral energy is in noise versus discrete lines?

EI = 100 * (0.35 * SE_n + 0.25 * SF_n + 0.20 * BB_n + 0.20 * IMP_n)

High EI means the spectrum is becoming flat and noise-like — energy is dispersing rather than concentrating.

Coupling Severity Score (CSS) — measures interaction. Are sidebands growing? Is energy migrating between frequency bands?

CSS = 100 * (0.40 * SB_n + 0.25 * HS_n + 0.20 * CBM_n + 0.15 * PI_n)

High CSS indicates that failure mechanisms are coupling across components — for example, bearing damage modulating gear mesh frequencies.

Jerk Instability Index (JII) — measures abruptness. Are there sudden transient events?

JII = 100 * (0.50 * J_n + 0.25 * CF_n + 0.25 * K_n)

High JII indicates impulsive events that may not show up in averaged measurements — cage failures, loose parts striking intermittently, incipient rubbing.

Four rules identify specific fault clusters from the AESF indices:

RulePatternLikely FaultGating Action
ER001Entropy rising + LNR falling + harmonics risingLooseness / RubCheck structural joints
ER002HF entropy rising + high kurtosisBearing / ImpactRun envelope analysis
ER003MF/HF broadband rising with process variableFlow instabilityCheck cavitation / turbulence
ER004Flatness high + broadband dominantDiffuse disorderEscalate inspection

These patterns encode decades of diagnostic experience. ER002, for instance, captures the classic bearing damage signature: high-frequency entropy increases (damage creates broadband noise in the HF band) while kurtosis rises (damage creates impulsive events). Neither metric alone is diagnostic, but together they point specifically to bearing impact damage.

StateSIEICSSJIIDescriptionAction
S080-1000-200-200-20Coherent StableNormal monitoring
S160-8020-4020-4020-40Localized DisturbanceInvestigate early fault
S240-6040-6040-6040-60Coupled RedistributionDetailed diagnostic
S320-4060-8060-8060-80Diffuse DisorderPlan maintenance
S40-2080-10080-10080-100Critical TransitionImmediate action

The progression from S0 to S4 maps to the PLS3D framework from Chapter 2:

  • S0 = Point level awareness (isolated, stable readings)
  • S1 = Line level (single parameter trending)
  • S2 = Surface level (multiple parameters correlating)
  • S3 = 3D volume (system-wide disorder)
  • S4 = Beyond 3D (the system is transitioning toward a fundamentally different operating regime)

AESF provides something that SSI alone cannot: a characterization of the failure trajectory. Two machines at SSI = 0.65 (warning state) may be in very different situations:

  • Machine A: SI = 70, EI = 30, CSS = 20, JII = 15 — State S1. Energy is still coherent, but a localized disturbance (probably a single-point bearing defect) is developing. The failure is predictable and manageable.

  • Machine B: SI = 35, EI = 55, CSS = 60, JII = 45 — State S2/S3. Energy is dispersing, coupling between components is increasing, and transient events are occurring. The failure is systemic and accelerating. This machine needs immediate attention.

SSI tells you the severity. AESF tells you the character. Together, they provide the stability intelligence that Module D needs to select the right health stage and RUL model.


How Stability Intelligence Feeds Engineering Intelligence

Section titled “How Stability Intelligence Feeds Engineering Intelligence”

The outputs of Module C and AESF flow into the Engineering Intelligence layer (Chapter 6):

  • SSI feeds Module D for health stage classification and RUL estimation
  • System_State feeds Module E for priority scoring and action selection
  • AESF State feeds Module D for mechanism inference (certain failure mechanisms are more likely in certain AESF states)
  • Top contributors feed Module E for targeted maintenance actions
  • CSS (coupling severity) feeds Module G as a trigger for contradiction analysis — high coupling severity often indicates design contradictions

To appreciate why fusion matters, consider a real-world scenario.

A horizontal centrifugal pump (P-101A) shows the following evidence from Signal Intelligence:

  • Module B: AFB03 matched (lubrication starvation) with confidence 0.45 — below the 0.70 RCM activation threshold
  • Module B.2: Trend class = “drifting” with slope 0.03 (just above the drift threshold of 0.02), severity 0.24
  • Module B.3: SE = 0.42, TE = 0.38, DE = 0.31. SI = 0.62. State: Drifting (SR02). Entropy slope dSE/dt = 0.015

No single evidence source is alarming. The AFB03 match is below confidence threshold. The trend is barely drifting. The entropy is in the middle range. A traditional threshold-based system would show green.

But Module C fuses these signals using the confidence compounding formula:

confidence = 1 - (1 - 0.45)(1 - 0.24)(1 - 0.38) = 0.74

The combined confidence is 0.74 — above the 0.70 RCM activation threshold. Module C assigns a block score of 0.65 (BSR002: drifting with confidence >= 0.60), and the weighted SSI computation places the system at 0.38 (watch state). The system transitions from “looks fine” to “investigate” — a transition that individual metrics could not trigger alone.

This is the diagnostic power of fusion: multiple weak signals compound into actionable intelligence. The pump bearing is not yet in trouble, but it is moving in a direction that, if unchecked, will lead to trouble. The maintenance planner receives a watch alert with the specific physics: “Bearing lubrication condition showing early signs of degradation. Kurtosis slightly elevated, trend drifting upward, entropy increasing. Recommend lubrication service at next available window.”

Three months later, the same pump shows AFB03 confidence at 0.72, accelerating trend with slope 0.08, and SI dropped to 0.44. The fused confidence is now 0.93. SSI has reached 0.71 (warning state). The system escalates to ACT002 (lubrication service) with priority 72 (within 24 hours). The bearing is saved because the fusion layer caught the degradation trajectory while individual metrics were still below alarm.

This scenario plays out across hundreds of assets simultaneously. The fusion layer is what makes it possible to monitor a large plant without drowning in false alarms or missing genuine developing faults.


The Stability Intelligence layer transforms component-level evidence into system-level understanding. The next chapter shows how that understanding is converted into engineering decisions: health staging, maintenance planning, reliability modeling, and design-out engineering.


5.5 — SEDL Entropy Formulas (Production)

Section titled “5.5 — SEDL Entropy Formulas (Production)”

The SEDL (Spectral-Entropy Diagnostic Layer) in Module B.3 computes three entropy measures from the raw signal, each normalized to the [0, 1] interval so that maximum disorder always equals 1.0 regardless of signal length or axis count.

All three entropies use the same Shannon formula with domain-specific normalization:

SE = −Σ(p_i × ln(p_i)) / ln(N) Spectral Entropy (frequency-domain)
TE = −Σ(p_i × ln(p_i)) / ln(N) Temporal Entropy (time-domain)
DE = −Σ(p_i × ln(p_i)) / ln(3) Directional Entropy (3 axes: H, V, A)
  • SE (Spectral Entropy): The probability distribution p_i is constructed from the power spectral density. When energy concentrates in a few discrete lines (1x, 2x, BPFO), SE is low. When energy spreads into broadband noise, SE approaches 1.0. Division by ln(N) normalizes against the number of frequency bins.

  • TE (Temporal Entropy): The probability distribution p_i is constructed from windowed time-domain amplitude bins. A clean sinusoidal signal has low TE; a signal with random impulses, amplitude modulation, or chaotic behavior has high TE. Division by ln(N) normalizes against the number of time bins.

  • DE (Directional Entropy): The probability distribution p_i is constructed from the energy ratio across the three measurement axes (Horizontal, Vertical, Axial). A machine with energy concentrated in one axis (e.g., purely vertical vibration from imbalance) has low DE. A machine with energy distributed equally across all three axes has DE approaching 1.0. Division by ln(3) normalizes against the three possible directions.

The three entropies combine into a single Stability Index using production-frozen weights:

SI = 1 − (0.5·SE + 0.3·TE + 0.2·DE)

Clamped to [0, 1]. Higher SI means more stable behavior.

ComponentWeightRationale
SE (Spectral Entropy)0.5Spectral disorder is the strongest early indicator of mechanical degradation
TE (Temporal Entropy)0.3Temporal disorder captures impulsive and modulated events
DE (Directional Entropy)0.2Directional spread indicates structural looseness and mode coupling

The weighting reflects an engineering judgment validated against field data: spectral entropy is the most sensitive early indicator (it rises before amplitude thresholds are exceeded), while directional entropy provides confirmatory evidence of structural looseness.

Module B.3 applies five state rules in strict priority order (highest priority first, first match wins). These rules classify the entropy regime for downstream fusion:

RuleConditionStateSeverity
SR05SI ≤ 0.40Critical_Instabilityalarm
SR04SE ≥ 0.65 AND (TE ≥ 0.60 OR DE ≥ 0.60)Chaoticwarning
SR03dSE/dt ≥ 0.02 AND SI < 0.60Destabilizingwarning
SR02SE > 0.35 AND SE < 0.65 AND dSE/dt < 0.02Driftingwatch
SR01SE ≤ 0.35 AND TE < 0.50 AND SI ≥ 0.70Stablenormal

Reading the rules:

  • SR05 fires when the combined stability index drops below 0.40 — the system has lost coherence across all three entropy dimensions. This is the trigger for the Critical Instability override in Module C (SSI floor = 0.70).
  • SR04 fires when spectral entropy is high and at least one other entropy dimension is also elevated. High SE alone might indicate broadband process noise; SR04 requires corroboration from temporal or directional disorder to declare chaotic state.
  • SR03 captures the rate of change. Even if current SI is moderate (below 0.60 but above 0.40), a rising spectral entropy slope (dSE/dt ≥ 0.02) indicates destabilization in progress. This rule catches developing faults before they reach SR05.
  • SR02 is the drift zone: moderate spectral entropy with a slow or flat trend. The machine is not healthy but not actively deteriorating.
  • SR01 is the healthy state: all entropy dimensions are low and SI is high. All three conditions must be met — low SE alone is insufficient if temporal entropy is elevated (which would indicate impulsive events masked in the frequency domain).

5.6 — Block Score Rules (BSR001–BSR007)

Section titled “5.6 — Block Score Rules (BSR001–BSR007)”

The block score rules are the bridge between Signal Intelligence (per-component evidence) and Stability Intelligence (system-level health). Each component block is evaluated against all seven rules in strict priority order. The first matching rule sets the block’s score and state.

RulePriorityConditionScoreState
BSR0071 (highest)B_match ≥ 0.900.90critical
BSR0012Trend = Accelerating AND conf ≥ 0.700.85unstable
BSR0032Trend = Step AND conf ≥ 0.700.80unstable
BSR0023Trend = Drift AND conf ≥ 0.600.65degrading
BSR0054B_match ≥ 0.70 AND (Stable OR conf < 0.50)0.55watch
BSR0045Trend = Chaotic AND proc_corr ≥ 0.700.35process-driven
BSR0066 (lowest)B_match < 0.30 AND Stable0.15healthy

Design notes:

  • BSR007 fires on high fault-pattern match alone — if the pattern library says “this is a known fault with 90%+ confidence,” the block goes to critical regardless of trend.
  • BSR001 and BSR003 share priority 2 but BSR001 evaluates first. An accelerating trend is scored higher (0.85) than a step change (0.80) because acceleration implies an ongoing mechanism, whereas a step may have already stabilized at a new operating point.
  • BSR005 captures a subtle scenario: the pattern match is high (≥ 0.70) but the trend is stable or confidence is low. The machine shows a known fault signature that is not currently progressing. This warrants monitoring (watch) rather than immediate action.
  • BSR004 assigns a deliberately low score (0.35) when chaotic vibration correlates with process variables. This prevents maintenance triggers for what is fundamentally a process engineering issue.

The System Stability Index aggregates block scores using machine-profile weights:

SSI = Σ(weight_i × block_score_i)

Clamped to [0, 1]. Weights are defined by the machine profile (e.g., PROFILE_PUMP_A assigns 0.25 to bearings, 0.30 to fluid flow). When optional blocks are absent, remaining weights auto-normalize.

SSI RangeSystem StateSeverity
< 0.30stablenormal
0.30 – 0.60degradingwatch
0.60 – 0.80unstablewarning
≥ 0.80criticalalarm

Special rule: If more than 50% of blocks have process_correlation ≥ 0.70, the system state is overridden to process-driven regardless of SSI value. This prevents maintenance escalation when the root cause is operational rather than mechanical.

Module D uses SSI to assign a health stage and associated RUL (Remaining Useful Life) band:

SSI RangeHealth StageRUL Band
≥ 0.80Critical< 7 days
0.60 – 0.80Unstable1–4 weeks
0.30 – 0.60Degrading1–6 months
< 0.30Healthy> 6 months

These bands are initial estimates that Module F refines using Weibull analysis and condition-adjusted reliability models. The health stage determines which RUL model is applied: Healthy uses the linear model, Degrading uses the drift-adjusted model, and Unstable/Critical use the accelerating model with NLI adjustment.

Even within a health stage, the rate of SSI change can trigger escalation to the next stage:

if Degrading AND SSI_slope > 0.05 → escalate to Unstable
if Healthy AND SSI_slope > 0.02 → escalate to Degrading

These escalation rules ensure that a rapidly deteriorating machine is not left in a lower health stage simply because the SSI magnitude has not yet crossed the threshold. A machine at SSI = 0.45 (Degrading) with a slope of 0.06 will reach Unstable territory within a few measurement windows — the slope escalation rule catches this trajectory and escalates proactively.


The formulas in this section operate across the full pipeline, connecting Signal Intelligence outputs to Stability Intelligence decisions. They govern how evidence is combined, how confidence propagates, and how state transitions are managed.

S_eff = S_fusion × Q_data

The effective severity is the product of the fused severity score and the data quality score from the Guard stage. Poor data quality suppresses severity — a high severity reading from a noisy or clipped signal is downweighted proportionally. This prevents false alarms from degraded sensors while preserving genuine fault signals from healthy instrumentation.

C_final = Q_data × (1 − ∏(1 − C_i))

Where C_i = [B.2 severity_score, B.3 SI, B match confidence]. This is the canonical v1.0 compounding formula. Each module contributes independent evidence; the product ∏(1 − C_i) represents the probability that all modules are wrong simultaneously. As more modules agree, confidence rises nonlinearly. The Q_data gate ensures that confidence is suppressed when data quality is poor — no amount of module agreement can overcome unreliable input data.

Example: Three modules report confidence [0.45, 0.24, 0.38]:

C_final = Q_data × (1 − (1−0.45)(1−0.24)(1−0.38))
= Q_data × (1 − 0.55 × 0.76 × 0.62)
= Q_data × (1 − 0.259)
= Q_data × 0.741

With Q_data = 1.0 (clean signal), C_final = 0.74 — above the 0.70 RCM activation threshold even though no individual module exceeded 0.50.

If stability_state == 'Critical_Instability' → SSI_floor = 0.70

When Module B.3 fires SR05 (SI ≤ 0.40, Critical_Instability state), Module C enforces a minimum SSI of 0.70 regardless of block-level scores. This is the safety gate that connects entropy analysis to system health assessment: the entropy layer detects systemic instability that component-level analysis may miss, and the floor ensures the system state reflects this detection.

State Transition Thresholds with Hysteresis

Section titled “State Transition Thresholds with Hysteresis”

State transitions use asymmetric persistence windows to prevent oscillation at boundaries:

TransitionS_eff ThresholdPersistence (escalation)Persistence (de-escalation)Hysteresis Band
→ Degrading> 0.553 windows5 windows±0.08
→ Unstable> 0.703 windows5 windows±0.08
→ Critical> 0.852 windows5 windows±0.08

How hysteresis works:

  • Escalation (moving to a higher severity state): S_eff must exceed the threshold for the specified number of consecutive measurement windows. The → Critical transition requires only 2 windows (faster response to dangerous conditions), while → Degrading and → Unstable require 3 windows.
  • De-escalation (returning to a lower severity state): S_eff must drop below threshold − 0.08 (the hysteresis band) for 5 consecutive windows. The asymmetry is deliberate — it is harder to de-escalate than to escalate, reflecting the engineering principle that genuine improvement requires sustained evidence, not a single good reading.
  • The ±0.08 band prevents chatter: a machine at S_eff = 0.71 will not oscillate between Degrading and Unstable. Once it escalates to Unstable at 0.70, it must drop below 0.62 (0.70 − 0.08) and sustain that level for 5 windows before de-escalating.
DirectionWindows RequiredRationale
Escalation3 (standard) / 2 (→ Critical)Confirm deterioration is real, not transient
De-escalation5 (all transitions)Require sustained improvement before downgrading severity

The 3-to-escalate, 5-to-de-escalate asymmetry encodes a fundamental reliability engineering principle: it is cheaper to investigate a genuine alert than to miss a developing fault. The system is biased toward caution — once a machine enters a higher severity state, it must demonstrate sustained recovery before the alert is lowered.

Implementation note (v1.0): The stateless API processes each call independently. Persistence tracking and hysteresis are the responsibility of the client (historian, dashboard, or edge gateway). The thresholds above define the canonical transition rules for client-side implementation.


Reference Implementation: SSI Fusion & SEDL

Section titled “Reference Implementation: SSI Fusion & SEDL”
"""RAPID AI — Module B.3 & C: Stability Intelligence
SEDL entropy calculation and SSI fusion reference implementation.
"""
import numpy as np
from dataclasses import dataclass
@dataclass(frozen=True)
class EntropyResult:
spectral_entropy: float # SE
temporal_entropy: float # TE
directional_entropy: float # DE
stability_index: float # SI
state: str
def shannon_entropy(probabilities: np.ndarray) -> float:
"""Normalized Shannon entropy H = -sum(p * ln(p)) / ln(N)"""
p = probabilities[probabilities > 0] # filter zeros
if len(p) == 0:
return 0.0
return -np.sum(p * np.log(p)) / np.log(len(p))
def compute_sedl(spectrum: np.ndarray,
time_signal: np.ndarray,
tri_axial: np.ndarray) -> EntropyResult:
"""Compute SEDL entropy metrics.
Args:
spectrum: Power spectral density array
time_signal: Time-domain signal
tri_axial: Array of shape (3,) with H, V, A RMS values
"""
# Spectral Entropy (frequency domain)
psd_norm = spectrum / np.sum(spectrum) if np.sum(spectrum) > 0 else spectrum
se = shannon_entropy(psd_norm)
# Temporal Entropy (time domain)
hist, _ = np.histogram(time_signal, bins=64, density=True)
hist_norm = hist / np.sum(hist) if np.sum(hist) > 0 else hist
te = shannon_entropy(hist_norm)
# Directional Entropy (3 axes)
dir_norm = tri_axial / np.sum(tri_axial) if np.sum(tri_axial) > 0 else tri_axial
de = -np.sum(dir_norm[dir_norm > 0] * np.log(dir_norm[dir_norm > 0])) / np.log(3)
de = np.clip(de, 0, 1)
# Stability Index
si = 1.0 - (0.5 * se + 0.3 * te + 0.2 * de)
si = np.clip(si, 0, 1)
# State classification (priority order)
if si <= 0.40:
state = "Critical_Instability"
elif se >= 0.65 and (te >= 0.60 or de >= 0.60):
state = "Chaotic"
elif se > 0.35 and se < 0.65:
state = "Drifting"
elif se <= 0.35 and te < 0.50 and si >= 0.70:
state = "Stable"
else:
state = "Drifting"
return EntropyResult(se, te, de, si, state)
# --- SSI Fusion ---
# Block weight profiles per asset type
SSI_PROFILES = {
"pump": {"vibration": 0.35, "temperature": 0.25, "process": 0.25, "electrical": 0.15},
"gearbox": {"vibration": 0.45, "temperature": 0.20, "oil_analysis": 0.25, "electrical": 0.10},
"fan": {"vibration": 0.40, "temperature": 0.20, "process": 0.20, "electrical": 0.20},
}
def compute_ssi(block_scores: dict[str, float], asset_type: str) -> float:
"""Compute System Stability Index from weighted block scores.
Args:
block_scores: Dict of {block_name: severity_score}
asset_type: One of 'pump', 'gearbox', 'fan'
Returns:
SSI value 0.0 (healthy) to 1.0 (critical)
"""
weights = SSI_PROFILES.get(asset_type, SSI_PROFILES["pump"])
ssi = sum(block_scores.get(block, 0.0) * w for block, w in weights.items())
return np.clip(ssi, 0, 1)
# SSI → System State mapping
def ssi_to_state(ssi: float) -> str:
if ssi <= 0.20: return "Normal"
elif ssi <= 0.40: return "Watch"
elif ssi <= 0.60: return "Alert"
elif ssi <= 0.80: return "Alarm"
else: return "Critical"

StandardRelevance to This Chapter
ISO 13374 — Condition monitoring and diagnostics of machinesModule C (SSI Fusion) implements ISO 13374 Level 4 (Health Assessment) by fusing component-level evidence into system-level health scores. The AESF framework extends beyond the standard by characterizing the type of instability, not just its severity.
ISO 17359 — General guidelines for condition monitoringThe profile-weighted fusion approach (different weights for different machine types) implements ISO 17359’s recommendation to tailor monitoring strategies to equipment type and criticality.
ISO 13381-1 — PrognosticsThe SSI-to-health-stage mapping and the confidence compounding formula provide the foundation for ISO 13381-1-compliant prognostic assessments, connecting current health state to remaining useful life estimation.
VersionDateAuthorChanges
2.1.02026-03-17Rick DAdded standards alignment, living doc metadata, changelog
2.0.02026-03-17Rick DEnriched with production codebase content
1.0.02026-03-17Rick DInitial chapter creation

Next: Chapter 6 — Engineering Intelligence Previous: Chapter 4 — Signal Intelligence