Signal Intelligence
Chapter 4 — Signal Intelligence
Section titled “Chapter 4 — Signal Intelligence”Signal Intelligence is the first intelligence layer in RAPID AI. It answers the fundamental question: What is the machine doing? Raw sensor signals enter the pipeline and emerge as validated, classified, and entropy-scored fault evidence. Three modules and one sub-module work together: Module A (GUARD), Module B (Fault Detection), Module B.2 (Trend Analysis), and Module B.3 (SEDL Entropy).
Module A — GUARD (Signal Validation and Feature Extraction)
Section titled “Module A — GUARD (Signal Validation and Feature Extraction)”Purpose
Section titled “Purpose”Module A is the gatekeeper. It ensures signal reliability before any analysis begins. A diagnostic system is only as trustworthy as its input data. Module A applies 16 guard rules to detect flatline sensors, corrupted data, clipped signals, sensor saturation, and environmental anomalies. Data that fails hard gates is blocked entirely. Data that triggers soft penalties passes through with a degraded quality score that reduces confidence in all downstream results.
Feature Extraction
Section titled “Feature Extraction”From the raw time-domain vibration signal, Module A computes the statistical features that every downstream module depends on:
RMS = sqrt(Sum(x_i^2) / N)Peak = max(|x|)Crest Factor = Peak / RMSKurtosis = E[((x - mu) / sigma)^4] - 3 (excess kurtosis; Gaussian = 0)The Quality Score is computed as the product of all triggered soft-penalty rules:
Quality Score = Product(penalty_i) for all triggered rulesEach penalty_i is a multiplicative factor less than 1.0, so accumulating soft penalties progressively degrades quality. Hard-block rules set Quality Score = 0.
The 16 Guard Rules (DG001-DG019)
Section titled “The 16 Guard Rules (DG001-DG019)”Phase 1 — Hard blocks (pre-computation). These stop the pipeline:
| Rule | Condition | Action | Rationale |
|---|---|---|---|
| DG001 | std_dev < 0.001 | Block (flatline) | Sensor disconnected or frozen |
| DG002 | nan_fraction > 5% | Block (corrupt) | Data transmission failure |
| DG005 | Sampling rate outside 1,000-100,000 Hz | Block (invalid) | Cannot compute valid FFT |
| DG006 | n_samples < 256 | Block (insufficient) | Not enough data for statistics |
| DG011 | saturation_run_count > 3 | Block (saturated) | Sensor at range limit |
Phase 2 — Soft penalties (post-statistics). These degrade confidence:
| Rule | Condition | Penalty | Rationale |
|---|---|---|---|
| DG003 | clip_fraction > 1% | Warn (clipping) | Peak values truncated |
| DG007 | dc_offset_ratio > 3.0 | Warn (DC offset) | Signal bias from mounting or electronics |
| DG008 | aliasing_indicator > 0.1 | Warn | Sampling below Nyquist |
| DG010 | outlier_burst_count > 5 | Warn (burst noise) | Electromagnetic interference |
| DG015 | snr_db < 10.0 | Warn (low SNR) | Signal too close to noise floor |
| DG016 | Temperature outside (-50, 250) C | Warn | Environmental anomaly |
ISO 20816 Zone Classification
Section titled “ISO 20816 Zone Classification”Module A classifies the measured velocity RMS against ISO 20816-1 zones, which provide the first-pass severity assessment:
| Machine Group | Zone A (mm/s) | Zone B | Zone C | Zone D |
|---|---|---|---|---|
| Small (<=15 kW) | < 0.71 | 0.71-1.8 | 1.8-4.5 | > 4.5 |
| Medium (15-75 kW) | < 1.12 | 1.12-2.8 | 2.8-7.1 | > 7.1 |
| Large rigid (75-300 kW) | < 1.8 | 1.8-4.5 | 4.5-11.2 | > 11.2 |
| Large flexible (>300 kW) | < 2.8 | 2.8-7.1 | 7.1-18.0 | > 18.0 |
For pumps specifically, ISO 10816-7 defines separate thresholds by hazard category: Category I (hazardous service) uses tighter boundaries (A/B at 2.3, B/C at 4.5, C/D at 7.1 mm/s) while Category II (general service) uses wider boundaries (A/B at 3.5, B/C at 7.1, C/D at 11.0 mm/s).
Zones map to severity scores: A = 0.05, B = 0.25, C = 0.60, D = 0.90.
DSP Cross-Validation
Section titled “DSP Cross-Validation”When external Digital Signal Processing results are available (e.g., from a specialized analyzer), Module A can cross-validate them against internally computed features. A trust threshold of 0.7 determines acceptance, with a per-metric tolerance of +/- 0.15. This allows RAPID AI to leverage existing plant instrumentation while maintaining diagnostic independence.
Outputs
Section titled “Outputs”Module A passes downstream: extracted features (RMS, Peak, Kurtosis, Crest Factor, spectral features), quality_score (0.0-1.0), ISO zone classification, and pass/block status. Every downstream module multiplies its confidence by quality_score, ensuring that poor data quality propagates honestly through the entire pipeline.
Module B — Fault Detection (119 Initiator Rules)
Section titled “Module B — Fault Detection (119 Initiator Rules)”Purpose
Section titled “Purpose”Module B is the diagnostic core of Signal Intelligence. It applies 119 physics-based fault rules across 12 component categories to detect failure initiators — the physical root conditions that begin degradation. Each rule encodes the directional vibration ratios, statistical indicators, and supplementary evidence that identify a specific failure mechanism.
The Physics of Directional Ratios
Section titled “The Physics of Directional Ratios”The foundational diagnostic principle is that directional vibration ratios reveal the failure mechanism more reliably than absolute amplitudes. A bearing vibrating at 3.5 mm/s might be perfectly healthy on a large flexible machine or dangerously damaged on a small rigid one. But a Horizontal-to-Vertical ratio of 3.0 tells you something definitive about the load path regardless of machine size.
RAPID AI uses three directional measurements — Axial (A), Horizontal (H), and Vertical (V) — to form diagnostic ratios:
- Axial loading (misalignment, thermal growth) pushes A/H upward
- Radial loading (imbalance, looseness) pushes H/V upward
- Isotropic conditions (lubrication failure) drive H/V toward 1.0
The isotropic signature is particularly important. A healthy bearing has directional bias because the machine structure is not symmetric. When the lubrication film collapses, metal-to-metal contact creates vibration equally distributed in all directions — the bearing’s own structural stiffness is no longer the dominant path. Isotropy (H/V approaching 1.0), combined with high kurtosis, is the signature of lubrication failure.
Component Categories and Rule Counts
Section titled “Component Categories and Rule Counts”| Category | Rule IDs | Count | Example Rule |
|---|---|---|---|
| Anti-Friction Bearing (AFB) | AFB01-AFB16 | 16 | A/H > 1.2; V/H < 0.8 — Excessive preload |
| Journal Bearing (JB) | JB01-JB12 | 12 | H/V > 1.3; temp > 70 — Low oil film |
| Tilting-Pad Journal Bearing (TPJB) | TPJB01-TPJB13 | 13 | H/V > 1.4; A/H > 0.6 — Pad misalignment |
| Coupling | COUP01-COUP08 | 9 | A/H > 1.3; 2x peak — Angular misalignment |
| AC Motor | AC01-AC09 | 9 | H/V 0.8-1.2; HF > 3 — Broken rotor bar |
| DC Motor | DC01-DC07 | 7 | Commutator, brush wear, armature imbalance |
| Gears | GEAR01-GEAR10 | 10 | Mesh frequency sidebands, tooth wear |
| Foundation | FND01-FND10 | 10 | Looseness, structural resonance, soft foot |
| Belts | B01-B05 | 5 | Belt frequency, tension, wear |
| Chains | C01-C04 | 4 | Chain frequency, elongation, sprocket wear |
| Fluid/Flow | FL01-FL10, FC01-FC05 | 15 | Cavitation, recirculation, vane pass |
| Shafts | S01-S09 | 9 | Crack, bow, runout |
AFB Diagnostic Walkthrough
Section titled “AFB Diagnostic Walkthrough”The 16 AFB rules demonstrate the depth of physics-based reasoning. Consider a bearing showing A/H > 1.2 and V/H < 0.8: the axial direction dominates while vertical is suppressed. This reveals increased axial stiffness — the bearing is being squeezed axially by excessive preload. This is AFB01, and the correct action is to check preload torque and verify shims/spacers — not to replace the bearing.
Key diagnostic patterns:
| Rule | Ratio Signature | Supplementary | Diagnosis |
|---|---|---|---|
| AFB01 | A/H > 1.2, V/H < 0.8 | Crest > 1.4 | Excessive preload |
| AFB03 | H/V 0.9-1.1, kurtosis > 5 | CF > 2.0, temp > 60C | Lubrication starvation |
| AFB06 | H/V 1.2-2.0, A/H < 0.3 | Stable 1x peak | Unbalance |
| AFB07 | A/H > 1.3 | 2x peak observed | Misalignment |
| AFB09 | H > 3.0x baseline, H/V > 3.0 | CF > 1.8 | Resonance |
| AFB12 | Kurtosis > 6.0, CF > 3.0 | HF 8-15 kHz bursts | VFD bearing currents |
Severity Cascades
Section titled “Severity Cascades”Each rule includes a three-stage severity cascade that tracks degradation progression:
- Early stage: Ratio threshold exceeded, low supplementary evidence. Severity 0.2-0.4.
- Mid stage: Amplitude rising above baseline, supplementary indicators confirming. Severity 0.5-0.7.
- Late stage: Crest factor elevated, multiple indicators aligned. Severity 0.8-1.0.
Execution Model
Section titled “Execution Model”Rules are evaluated sequentially against the extracted features. All 121 rules are tested — the system evaluates every failure hypothesis, not just the most obvious one. (A previous ThreadPoolExecutor(max_workers=4) implementation was removed because the GIL prevents true parallelism for CPU-bound Python work.) The output is a ranked list of matched initiators with severity scores and confidence weights.
Vibration Fault Signature Gallery
Section titled “Vibration Fault Signature Gallery”Purpose: This gallery provides the characteristic vibration signatures that RAPID AI’s 275+ SENSE rules are designed to detect. Each pattern maps directly to specific fault rules and FRETTLSM causal factors.
Mass Unbalance (1X Dominant)
Section titled “Mass Unbalance (1X Dominant)”Frequency Domain:
- Dominant 1X (1x running speed) peak
- 1X amplitude proportional to unbalance mass x eccentricity
- Minimal harmonics (2X < 25% of 1X indicates pure unbalance)
- Phase: single-plane unbalance shows stable ~0 degrees or ~180 degrees at 1X
Time Domain:
- Sinusoidal at running speed
- Low crest factor (< 3.0)
- Low kurtosis (< 3.5)
Severity Indicators:
| Level | 1X Amplitude (mm/s) | ISO Zone | Action |
|---|---|---|---|
| Acceptable | < 1.8 | A-B | Monitor |
| Marginal | 1.8 - 4.5 | C | Plan balance |
| Unacceptable | > 4.5 | D | Immediate balance |
RAPID AI Rules: UNB01-UNB06 FRETTLSM: Force (mass distribution), Surface (erosion/buildup)
Common Misdiagnoses:
- Misalignment mistaken for unbalance: check axial component (A/H < 0.3 for pure unbalance) and 2X amplitude (2X < 25% of 1X for pure unbalance). If axial is elevated or 2X is significant, suspect misalignment.
- Bent shaft: shows 1X dominant but amplitude does not respond to balance weights; phase is locked to the shaft, not the trial weight position. Check for 1X amplitude that is stable across multiple balance runs.
- Eccentric rotor (electrical): disappears instantly on power cut (mechanical unbalance coasts down). Perform a power-cut test to differentiate.
Misalignment (1X + 2X Pattern)
Section titled “Misalignment (1X + 2X Pattern)”Angular Misalignment:
- Elevated 1X axial
- Axial-to-radial ratio > 0.5 (key discriminator from unbalance)
- Phase: 180 degrees across coupling in axial direction
Parallel (Offset) Misalignment:
- 2X radial dominant (often > 1X)
- Elevated axial vibration
- 2X/1X ratio > 0.5 indicates significant offset
- Harmonics up to 4X possible in severe cases
Combined Pattern:
- Both 1X and 2X elevated in radial AND axial
- Phase shifts across coupling in all directions
- Temperature rise at coupling and bearings
Time Domain:
- Waveform shows 2 peaks per revolution (2X dominance)
- Moderate crest factor (3.0-4.5)
Severity Indicators:
| Measurement | Acceptable | Marginal | Unacceptable |
|---|---|---|---|
| Axial/Radial ratio | < 0.3 | 0.3 - 0.5 | > 0.5 |
| 2X/1X ratio | < 0.3 | 0.3 - 0.75 | > 0.75 |
| Coupling temp rise | < 10 C | 10 - 25 C | > 25 C |
RAPID AI Rules: ALN01-ALN08 FRETTLSM: Force (coupling load), Foundation (thermal growth), Temperature
Common Misdiagnoses:
- Unbalance mistaken for misalignment: pure unbalance has minimal axial content and no significant 2X. If 2X/1X < 0.3 and A/H < 0.3, suspect unbalance rather than misalignment.
- Cocked bearing: produces axial vibration similar to angular misalignment but at a single bearing location. Check if axial elevation is localized to one bearing or spans the coupling.
- Pipe strain: external forces from connected piping mimic misalignment symptoms. Check if vibration changes when pipe supports are loosened — if it improves, pipe strain is the initiator.
Rolling Element Bearing Defects
Section titled “Rolling Element Bearing Defects”Bearing Defect Frequencies:
BPFO = (N/2) x RPM x (1 - Bd/Pd x cos(alpha)) Outer raceBPFI = (N/2) x RPM x (1 + Bd/Pd x cos(alpha)) Inner raceBSF = (Pd/(2xBd)) x RPM x (1 - (Bd/Pd x cos(alpha))^2) Ball spinFTF = (RPM/2) x (1 - Bd/Pd x cos(alpha)) Cage
Where: N = number of rolling elements Bd = ball diameter Pd = pitch diameter alpha = contact angleStage 1 — Early Degradation (kurtosis 4-5):
- Subtle high-frequency ringing (natural frequency of bearing race)
- Envelope analysis shows BPFO/BPFI sidebands
- Still within ISO Zone A-B
- Pain point: Often missed without envelope analysis capability
Stage 2 — Developing Fault (kurtosis 5-7):
- Clear bearing defect frequency peaks emerge
- Sidebands at +/-1X around defect frequency
- Broadband noise floor rising
- Temperature starting to trend up
Stage 3 — Advanced Degradation (kurtosis 7-10):
- Harmonics of defect frequency (2xBPFO, 3xBPFO, etc.)
- Broadband noise elevated
- Significant temperature rise
- Pain point: At this stage, damage is irreversible — replacement is required
Stage 4 — Failure Imminent (kurtosis > 10):
- Defect frequencies may disappear (geometry lost)
- Broadband “haystack” spectrum
- Extreme noise and heat
- 1X often reduces (shaft “floating” in damaged bearing)
Common Bearing Quick Reference:
| Bearing | N (elements) | BPFO (x RPM) | BPFI (x RPM) | BSF (x RPM) | FTF (x RPM) |
|---|---|---|---|---|---|
| 6205 | 9 | 3.585 | 5.415 | 2.357 | 0.398 |
| 6305 | 7 | 2.935 | 4.065 | 1.871 | 0.419 |
| 6208 | 9 | 3.578 | 5.422 | 2.328 | 0.398 |
| 6310 | 8 | 3.052 | 4.948 | 1.951 | 0.382 |
Note: Multipliers are approximate. Exact values depend on internal geometry, contact angle, and clearance class. Always verify against manufacturer data for the specific bearing variant installed.
RAPID AI Rules: BRG01-BRG12 (outer race), BRG13-BRG20 (inner race), BRG21-BRG28 (rolling element), BRG29-BRG32 (cage) FRETTLSM: Lubrication, Surface, Material, Force
Common Misdiagnoses:
- Gear mesh mistaken for bearing defect: gear mesh frequencies can fall near bearing defect frequencies. Check for RPM-synchronous sidebands (gears) vs. non-synchronous patterns (bearings). Gear mesh sidebands are evenly spaced at 1X of the faulty gear.
- Flow-induced noise mistaken for bearing: cavitation and turbulence produce broadband high-frequency energy similar to Stage 3-4 bearing damage. Check if the high-frequency energy correlates with flow rate changes — bearing damage is flow-independent.
- Electrical discharge machining (EDM): VFD-induced shaft currents produce bearing damage with a characteristic frosted/pitted appearance on both races. The vibration signature may mimic early bearing damage but does not follow the normal 4-stage progression. Check for even pitting distribution and install shaft grounding brushes.
Gear Mesh Faults
Section titled “Gear Mesh Faults”Normal Gear Mesh:
- Gear Mesh Frequency (GMF) = N_teeth x RPM
- Clean sidebands at +/-1X around GMF
- Uniform sideband pattern (symmetric)
Worn Gears:
- Multiple harmonics of GMF (2x, 3x, 4x GMF)
- Elevated broadband noise around GMF harmonics
- Non-uniform sidebands (amplitude modulation)
Cracked/Broken Tooth:
- Strong amplitude modulation of GMF
- Sidebands spaced at +/-RPM of faulty gear
- Time-domain: sharp impulse once per revolution
- Very high crest factor (> 6.0)
- Kurtosis spike (> 8.0)
Misaligned Gears:
- 2x GMF > 1x GMF
- Axial vibration elevated at GMF
- Non-contact pattern on tooth face
RAPID AI Rules: GR01-GR15 FRETTLSM: Force (tooth loading), Lubrication (film breakdown), Surface (pitting/spalling)
Common Misdiagnoses:
- Bearing defect mistaken for gear fault: bearing defect frequencies can modulate the gear mesh frequency, producing sidebands that appear gear-related. Check if the sideband spacing matches a bearing defect frequency rather than shaft RPM.
- Misaligned gears confused with worn gears: misaligned gears show 2x GMF > 1x GMF with axial vibration, while worn gears show broadband modulation around multiple GMF harmonics. Check tooth contact pattern (misalignment shows edge loading; wear shows full-face contact with pitting).
- Process load variation: variable load on a healthy gearbox modulates GMF amplitude, mimicking a developing fault. Check if sideband amplitude correlates with load changes — a true fault produces consistent sidebands regardless of load.
Mechanical Looseness
Section titled “Mechanical Looseness”Type A — Structural (base/foundation):
- Sub-harmonics (0.5X, 1.5X)
- Multiple harmonics (1X through 10X+)
- Directional: primarily vertical
- Phase unstable
Type B — Component (bearing/housing):
- Directional vibration (one direction much higher)
- Truncated waveform (flat top or bottom)
- 2X often dominant
Type C — Rotating (shaft/rotor):
- Sub-harmonics (0.5X, 0.33X)
- Erratic vibration levels
- Phase changes with speed
Time Domain:
- High crest factor (> 4.5)
- Waveform clipping or asymmetry
- Impact signatures
RAPID AI Rules: FND01-FND10 (foundation), LOO01-LOO06 (component) FRETTLSM: Foundation, Force (bolt torque), Material (fatigue)
Common Misdiagnoses:
- Looseness dismissed as “noise”: sub-harmonics (0.5X, 1.5X) are often filtered out or dismissed as measurement artifacts. If sub-harmonics are present with multiple integer harmonics, the pattern is diagnostic of looseness — not noise.
- Structural resonance mistaken for looseness: both produce multiple harmonics, but resonance shows speed-dependent amplitude variation and phase instability near the resonant frequency. Run a speed sweep (coast-down or VFD ramp) to distinguish — looseness amplitude is proportional to speed squared; resonance amplitude peaks at a specific speed.
- Misalignment producing 2X mistaken for Type B looseness: both show elevated 2X, but misalignment has consistent phase relationship across the coupling while looseness has unstable phase. Check phase stability over multiple measurements.
Electrical Faults (Motors)
Section titled “Electrical Faults (Motors)”Rotor Bar Defects:
- Sidebands at 1X +/- 2 x slip x line_freq
- Sideband amplitude indicates severity:
-
-50 dB relative to 1X: 1-2 broken bars
-
-40 dB: 3-5 broken bars
-
-35 dB: multiple bars, imminent failure
-
Stator Eccentricity:
- 2x line frequency (2FL) dominant
- If 2FL varies with load: electrical origin
- If 2FL constant: mechanical origin
VFD-Induced Issues:
- Broadband noise from PWM switching
- Sub-harmonics if carrier frequency too low
- Resonance excitation across speed range
- Pain point: VFDs expose resonances that were hidden at fixed speed
Severity Scale (Rotor Bar Defects by Sideband Amplitude Relative to 1X):
| dB Relative to 1X | Interpretation | Estimated Bars |
|---|---|---|
| > -55 dB | Healthy | 0 |
| -55 to -50 dB | Suspect | Possible 1 |
| -50 to -44 dB | Developing | 1-2 broken bars |
| -44 to -40 dB | Significant | 2-3 broken bars |
| -40 to -35 dB | Severe | 3-5 broken bars |
| < -35 dB | Critical | Multiple bars, imminent failure |
RAPID AI Rules: AC01-AC09 (AC motors), DC01-DC07 (DC motors) FRETTLSM: Reactive/Electromagnetic, Temperature
Common Misdiagnoses:
- Mechanical 2X mistaken for electrical 2FL: for a 2-pole motor at 60 Hz supply, 2FL = 120 Hz and 2X is approximately 118-119.3 Hz. Without adequate frequency resolution (< 1 Hz), the two peaks merge. The definitive test: if the vibration at the suspect frequency disappears instantly on power cut (does not coast down), it is electrical. Mechanical 2X coasts down with the rotor.
- Soft foot producing 2FL-like vibration: a motor with soft foot can amplify the normal 2FL magnetic vibration to abnormal levels. The 2FL is always present in motors — soft foot changes the transmission path, making it appear as a fault when the motor itself is healthy. Check for soft foot before condemning the motor.
- VFD harmonic interference: VFDs produce switching harmonics that can excite structural resonances, producing vibration signatures that appear electrical but are actually structural. Check if the vibration frequency tracks with VFD carrier frequency or motor speed — carrier-frequency-related vibration is VFD-induced, not motor-induced.
Module B.2 — Trend Analysis (5 Trend Classes)
Section titled “Module B.2 — Trend Analysis (5 Trend Classes)”Purpose
Section titled “Purpose”Module B.2 tracks how parameters evolve over time. Failure begins when trends shift, not necessarily when amplitude rises. A bearing vibrating at 2.0 mm/s that has been stable for a year is healthy. A bearing vibrating at 2.0 mm/s that was at 1.2 mm/s last month is in trouble. Module B.2 captures this temporal dimension.
Slope Computation
Section titled “Slope Computation”All trend analysis operates in the log domain to linearize exponential degradation:
slope_log = polyfit(t, ln(values), degree=1)[0]slope_first = polyfit(t[:N/2], ln(values[:N/2]))[0]slope_second = polyfit(t[N/2:], ln(values[N/2:]))[0]slope_change = slope_second - slope_firstThe split-half slope computation detects acceleration: if the second half is steeper than the first, the degradation is accelerating, which dramatically reduces remaining useful life.
Non-Linearity Index
Section titled “Non-Linearity Index”NLI = min(1.0, std(ln_residuals) * 5.0)When NLI >= 0.6, the degradation trajectory is non-linear and unpredictable. The RUL estimate is adjusted: RUL_adj = RUL_base * (1 - NLI). A highly non-linear trend with NLI = 0.8 reduces the RUL estimate by 80%.
Trend Classification Cascade
Section titled “Trend Classification Cascade”The cascade evaluates in order, most specific first. First match wins:
| Condition | Class | Severity Score |
|---|---|---|
max_jump > 0.5 (log-domain) | Step | 0.80 |
| `volatility > 0.3 AND | slope | < 0.02` |
| ` | slope | > 0.05 AND |
| ` | slope | > 0.02` |
| else | Stable | max(0.0, |
Step changes (severity 0.80) indicate sudden events — a bearing impact, a coupling failure, a process excursion. Accelerating trends are the most dangerous because they indicate feedback-driven degradation where the fault is making itself worse. Chaotic patterns with low slope often indicate process-driven variation rather than mechanical degradation.
Module B.3 — SEDL Entropy Analysis
Section titled “Module B.3 — SEDL Entropy Analysis”Purpose
Section titled “Purpose”Module B.3 detects the decay of order within the system. Healthy machines concentrate energy in predictable frequencies (low entropy); degrading machines spread energy chaotically (high entropy). This module answers: Is the system becoming disordered?
The Physics of Entropy in Machines
Section titled “The Physics of Entropy in Machines”Shannon entropy, applied to mechanical systems, measures how energy is distributed across the measurement space. A healthy machine running at 3000 RPM concentrates its vibration energy at 50 Hz (1x), with small amounts at harmonics. The spectral entropy is low because most of the probability mass is concentrated in a few bins. As the machine degrades — bearings develop defects, looseness develops, lubrication fails — energy spreads across more frequencies. The spectral entropy rises.
This is directly connected to the Theory of Imperfections: when energy can flow freely through the system, it follows predictable paths (low entropy). When imperfections block or redirect energy flow, the energy disperses into unpredictable paths (high entropy).
Three Entropy Metrics
Section titled “Three Entropy Metrics”Spectral Entropy: SE = -Sum(p_i * ln(p_i)) / ln(N)Temporal Entropy: TE = -Sum(p_i * ln(p_i)) / ln(N)Directional Entropy: DE = -Sum(p_i * ln(p_i)) / ln(3)- SE measures disorder in the frequency-domain energy distribution. SE = 0 means a single pure tone; SE = 1 means flat broadband noise.
- TE measures irregularity in the time-domain waveform. Higher TE indicates impulsive, non-repeating events.
- DE measures disorder across the three measurement directions H, V, A. Normalized by ln(3) since there are exactly 3 axes. Rising DE indicates loss of the normal directional bias.
Stability Index
Section titled “Stability Index”SI = 1 - (0.5 * SE + 0.3 * TE + 0.2 * DE) clamped to [0, 1]The weights reflect that spectral entropy is the strongest stability indicator (0.5), followed by temporal irregularity (0.3), then directional disorder (0.2). Higher SI = more stable = energy flowing more freely.
SEDL State Rules (SR01-SR05)
Section titled “SEDL State Rules (SR01-SR05)”Evaluated in priority order (highest priority first):
| Rule | Condition | State | Severity |
|---|---|---|---|
| SR05 | SI <= 0.40 | Critical_Instability | alarm |
| SR04 | SE >= 0.65 AND (TE >= 0.60 OR DE >= 0.60) | Chaotic | warning |
| SR03 | dSE/dt >= 0.02 AND SI in (0.40, 0.60) | Destabilizing | warning |
| SR02 | SE in (0.35, 0.65) AND dSE/dt < 0.02 AND SI > 0.60 | Drifting | watch |
| SR01 | SE <= 0.35 AND TE < 0.50 AND SI >= 0.70 | Stable | normal |
The entropy slope dSE/dt is particularly diagnostic: a sustained positive slope means the system is losing order over time, even if the current entropy is not yet alarming. This is the temporal equivalent of the trend analysis in Module B.2 — it detects the direction of change, not just the current value.
Outputs
Section titled “Outputs”Module B.3 produces: SE, TE, DE, dSE/dt, WE (weighted entropy), SI (stability index), stability_state, severity_level, and a list of triggered rules. These feed into Module C for system-level fusion and into the confidence compounding formula described in Chapter 3.
4.5 — DSP Freeze Specification
Section titled “4.5 — DSP Freeze Specification”The DSP Freeze Specification (frozen 2026-02-22) locks all signal processing parameters, deliverables, and acceptance criteria. No experimental changes to sampling rate, filter configuration, FFT size, window type, or band definitions may be made without documented, reviewed approval. This section records what the sensor/edge device is expected to deliver, what RAPID AI actually consumes, and where the gaps remain.
Mandatory DSP Deliverables
Section titled “Mandatory DSP Deliverables”The DSP implementation must deliver 15 metrics. RAPID AI’s relationship to each varies — some are consumed directly, some are recomputed from raw data for independence, and some are not yet consumed:
| # | Deliverable | Per-Axis | RAPID AI Status |
|---|---|---|---|
| 1 | Raw Time Waveform | Yes | Used — SignalInput.values |
| 2 | RMS (band-limited) | Yes | Recomputed — Module A computes from raw |
| 3 | Peak (true peak) | Yes | Recomputed — Module A computes from raw |
| 4 | Crest Factor (Peak/RMS) | Yes | Recomputed — Module A computes from raw |
| 5 | Overall RMS (vector magnitude) | Optional | Recomputed — Module A overall_rms |
| 6 | Spike Energy / HF Energy | Yes | Not Used — no schema field, no rules |
| 7 | Envelope RMS | Yes | Not Used — no schema field, no rules |
| 8 | Envelope Peak | Yes | Not Used — no schema field, no rules |
| 9 | FFT Spectrum (single-sided) | Yes | Partial — Module B.3 uses raw spectra |
| 10 | Kurtosis (LF band) | Yes | Recomputed — Module A, single-band only |
| 11 | Kurtosis (HF band) | Yes | Not Used — no HF/LF band separation |
| 12 | Sampling config report | — | Partial — sampling_rate_hz only |
| 13 | Filter config report | — | Not Used |
| 14 | Windowing config report | — | Not Used |
| 15 | Calibration & scaling report | — | Not Used |
The recomputation strategy is deliberate. RAPID AI recomputes RMS, Peak, Crest Factor, and Kurtosis from the raw waveform rather than trusting the DSP device’s values. This preserves diagnostic independence — the system does not inherit upstream calculation errors or undocumented filter settings.
Current Spectral Implementation
Section titled “Current Spectral Implementation”As of 2026-03-11, Module A computes the following spectral features from the raw waveform:
- FFT spectrum with Hann window (single-sided amplitude)
- Dominant frequency and amplitude
- 1x/2x/3x harmonic amplitudes (when RPM is known)
- 2x/1x harmonic ratio (misalignment indicator)
- Spectral kurtosis (transient/impulsive detection)
- Spectral centroid (frequency center of gravity)
- Sub-synchronous energy ratio (oil whirl, cage fault detection)
- High-frequency energy ratio (early bearing damage detection)
- ISO 20816-1 zone classification (A/B/C/D by machine class)
Remaining Gaps
Section titled “Remaining Gaps”| DSP Deliverable | Status | Enhancement Path |
|---|---|---|
| Envelope RMS/Peak | Not yet | Add envelope analysis (bandpass, Hilbert transform, RMS) |
| Spike Energy / HF Energy | Not yet | Define HF band, compute band-limited energy |
| Kurtosis (HF band) | Not yet | Band-split signal, compute kurtosis per band |
| Filter/Window config | Not validated | Accept as DSP metadata for cross-validation |
| Calibration report | Not validated | Trust boundary — accept sensor sensitivity |
Technical Boundaries (Frozen)
Section titled “Technical Boundaries (Frozen)”These parameters are locked. Any change requires formal review and documented approval:
| Parameter | Value | Notes |
|---|---|---|
| Sampling Rate | 6,400 Hz | Fixed unless formally revised |
| Effective Fmax | SR / 2.5 = 2,560 Hz | Nyquist safety margin |
| Anti-aliasing Filter | Cutoff <= Fmax | Mandatory analog filter |
| Window Length | >= 1.0 sec | Minimum unless justified |
| Min FFT Samples | 1,024 (preferred 2,048) | |
| Window Type | Hann (default) | Hamming optional, selectable |
| DC Removal | Subtract mean of window | Time-domain mean removal |
| Gravity Removal | Acceleration only | Must be documented |
| Band-limited RMS | 1 Hz — 1,000 Hz | Default band |
| Envelope Band | 1,000 — 5,000 Hz | Carrier band specification |
| FFT Scaling | Single-sided amplitude | Amplitude-corrected |
| Data Type | Floating point | No integer truncation in DSP |
The 6,400 Hz sampling rate yields an effective Fmax of 2,560 Hz after the 2.5x Nyquist safety margin. This covers the diagnostic bandwidth for most rotating machinery up to ~150,000 RPM (2,500 Hz fundamental). The Hann window is the default because it provides a good balance between frequency resolution and spectral leakage — Hamming is available for applications where sidelobe suppression is more important than mainlobe width.
Acceptance Criteria
Section titled “Acceptance Criteria”These are non-negotiable. A DSP implementation that fails any of these criteria is rejected:
| Criterion | Requirement |
|---|---|
| Flatline Test | RMS near zero with sensor disconnected (<= baseline noise threshold) |
| Repeatability | Same condition produces <= +/- 5% RMS variation |
| 1X Frequency Match | FFT 1X peak matches RPM within +/- 1% |
| No Artificial 0-1 Hz Peaks | After DC removal — no residual DC leakage |
| Crest Factor | Must be > 1.0 for any dynamic signal |
| Clipping Detection | No saturation during normal operation |
| Envelope Test | Known impulse produces visible HF band increase |
| Calibration Consistency | Sensor sensitivity matches within +/- 5% of spec |
Module A’s guard rules (DG001-DG019) already validate several of these in production: flatline detection (DG001), clipping detection (DG003), NaN corruption (DG002), insufficient samples (DG006), and kurtosis outliers. The DSP acceptance criteria and the guard rules are complementary — the acceptance criteria define what a conforming DSP device must produce; the guard rules detect when a deployed device violates those expectations at runtime.
4.6 — Production Thresholds
Section titled “4.6 — Production Thresholds”Every threshold in RAPID AI’s Signal Intelligence layer is defined in a single source of truth: rapid/engine/settings.py. This section documents the complete threshold reference for signal processing, severity classification, guard rules, and feature scoring. No threshold should be hardcoded elsewhere in the codebase.
Signal Integrity Constants
Section titled “Signal Integrity Constants”| Constant | Value | Used In |
|---|---|---|
NAN_FRACTION_THRESHOLD | 0.01 (1%) | Module A — NaN penalty trigger |
FLATLINE_STDDEV_THRESHOLD | 1e-6 | Module A — flatline detection |
Note: the guard rule DG002 uses a 5% NaN fraction for hard blocking. The 1% threshold here triggers a soft penalty — signals with 1-5% NaN content pass through with degraded quality rather than being blocked outright.
Allowed Units
Section titled “Allowed Units”| Signal Type | Valid Units |
|---|---|
velocity | mm/s, inch/s, in/s |
acceleration | g, m/s2, m/s² |
displacement | um, µm, mm, mil |
Allowed Sampling Rates (Hz)
Section titled “Allowed Sampling Rates (Hz)”| Signal Type | Valid Rates |
|---|---|
velocity | 256, 512, 1024, 2048, 2560, 5120, 6400, 10240, 25600, 51200 |
acceleration | 256, 512, 1024, 2048, 2560, 5120, 6400, 10240, 25600, 51200 |
displacement | 256, 512, 1024, 2048, 2560, 5120, 6400 |
Displacement signals cap at 6,400 Hz because displacement amplitude falls off as 1/f^2 — frequencies above ~3,000 Hz have negligible displacement content and would be dominated by noise.
Kurtosis and Crest Factor Severity
Section titled “Kurtosis and Crest Factor Severity”| Constant | Value | Effect |
|---|---|---|
SEV_KURT_ALARM | 7.0 | severity score -> 0.85 |
SEV_KURT_WARNING | 5.0 | severity score -> 0.65 |
SEV_KURT_WATCH | 4.0 | reference only — not used in Module A scoring |
SEV_CREST_ALARM | 5.0 | reference — not used in current Module A scoring |
SEV_CREST_WARNING | 4.0 | reference — not used in current Module A scoring |
Excess kurtosis >= 7.0 is a strong indicator of impulsive events (bearing spalling, gear tooth fracture). The 5.0 warning threshold catches early-stage impulsive defects. Crest factor thresholds are defined but not yet wired into Module A’s severity scoring — they are reserved for future envelope analysis integration.
ISO Zone Score Map
Section titled “ISO Zone Score Map”| Zone | Score | Description |
|---|---|---|
| A | 0.05 | Good — within acceptable limits |
| B | 0.25 | Satisfactory — for continuous operation |
| C | 0.60 | Unsatisfactory — short-term only |
| D | 0.90 | Unacceptable — imminent damage risk |
Harmonics and DSP Constants
Section titled “Harmonics and DSP Constants”| Constant | Value | Purpose |
|---|---|---|
HARMONIC_RATIO_MISALIGNMENT | 1.5 | 2x/1x ratio threshold for misalignment flag |
DSP_TRUST_ACCEPT | 0.7 | External DSP accepted if trust >= 0.7 |
DSP_TRUST_TOLERANCE | 0.15 | Individual metric match tolerance (+/- 15%) |
A 2x/1x harmonic ratio >= 1.5 is the classical misalignment signature: the second harmonic (2x running speed) dominates the fundamental when angular or offset misalignment forces a twice-per-revolution load variation. The DSP trust thresholds govern cross-validation — when external DSP results are available, each metric must agree within 15%, and the overall trust score must reach 0.7 for acceptance.
Severity Classification Bands
Section titled “Severity Classification Bands”| Level | Score Range |
|---|---|
normal | [0.00, 0.30) |
watch | [0.30, 0.50) |
warning | [0.50, 0.80) |
alarm | [0.80, 0.95) |
critical | [0.95, 1.01) |
These bands apply across all modules. A severity score of 0.79 is the highest possible warning; 0.80 crosses into alarm territory. The upper bound of 1.01 (not 1.0) handles floating-point edge cases.
Feature Severity Thresholds (Baseline Ratios)
Section titled “Feature Severity Thresholds (Baseline Ratios)”| Constant | Value | Trigger |
|---|---|---|
baseline_ratio_alarm | 2.0 | Score -> alarm when current/baseline >= 2.0 |
baseline_ratio_warning | 1.5 | Score -> warning when current/baseline >= 1.5 |
baseline_ratio_watch | 1.2 | Score -> watch when current/baseline >= 1.2 |
These ratios compare a current measurement against its historical baseline. A value that has doubled (ratio >= 2.0) is an alarm. A 50% increase (ratio >= 1.5) is a warning. A 20% increase (ratio >= 1.2) is worth watching. The baseline is typically the mean of the first 30 days of stable operation after installation or overhaul.
Guard Rule Thresholds (DG001-DG019)
Section titled “Guard Rule Thresholds (DG001-DG019)”The complete guard rule threshold reference. Rules DG001-DG006 and DG011 are hard blocks (pipeline stops). All others are soft penalties (quality score degradation):
| Rule ID | Condition Key | Operator | Threshold | Severity |
|---|---|---|---|---|
| DG001 | std_dev | < | 0.001 | block |
| DG002 | nan_inf_fraction | > | 0.05 | block |
| DG003 | clip_fraction | > | 0.01 | warn |
| DG004 | max_zero_run | > | 10 | warn |
| DG005 | sampling_rate | out_of_range | (1000, 100000) | block |
| DG006 | n_samples | < | 256 | block |
| DG007 | dc_offset_ratio | > | 3.0 | warn |
| DG008 | aliasing_indicator | > | 0.1 | warn |
| DG009 | timestamp_gap_count | > | 0 | warn |
| DG010 | outlier_burst_count | > | 5 | warn |
| DG011 | saturation_run_count | > | 3 | block |
| DG012 | dropout_periodicity_score | > | 0.7 | warn |
| DG013 | coherence_loss_score | > | 0.8 | warn |
| DG014 | jitter_coefficient | > | 0.05 | warn |
| DG015 | snr_db | < | 10.0 | warn |
| DG016 | temperature | out_of_range | (-50, 250) | warn |
This is the complete set. The earlier section on Module A listed the 11 rules most commonly triggered in practice; this table includes 5 additional rules (DG004 max zero run, DG009 timestamp gaps, DG012 dropout periodicity, DG013 coherence loss, DG014 jitter) that detect subtler data quality issues — intermittent dropouts, periodic data loss patterns, phase coherence degradation, and sampling clock instability. These are particularly important for wireless sensor networks where transmission reliability varies.
4.7 — Slope and Trend Thresholds
Section titled “4.7 — Slope and Trend Thresholds”Module B.2 classifies trends using a priority cascade with precisely defined thresholds. This section documents the complete threshold set and the escalation logic that connects trend classification to system-state changes.
Trend Classification Cascade
Section titled “Trend Classification Cascade”The cascade evaluates conditions in priority order. First match wins — no further conditions are tested:
| Priority | Condition | Class | Severity Score |
|---|---|---|---|
| 1 | max_jump > 0.5 (log-domain) | Step | 0.80 |
| 2 | `volatility > 0.3 AND | norm_slope | < 0.02` |
| 3 | ` | norm_slope | > 0.05 AND |
| 4 | ` | norm_slope | > 0.02` |
| 5 | else | Stable | max(0.0, |
Trend Threshold Constants
Section titled “Trend Threshold Constants”All constants are sourced from settings.py and used in analytics.compute_trend():
| Constant | Value | Purpose |
|---|---|---|
step_jump | 0.5 | Max consecutive diff > 50% of mean triggers Step classification |
chaotic_volatility | 0.3 | Coefficient of variation of diffs > 0.3 triggers Chaotic candidate |
chaotic_slope_max | 0.02 | Chaotic only if |
accel_slope | 0.05 | norm_slope > 0.05 triggers Accelerating classification |
accel_change | 0.02 | Reserved — secondary acceleration check |
drift_slope | 0.02 | norm_slope > 0.02 triggers Drift classification |
nli_multiplier | 5.0 | Non-linearity intensity: NLI = min(1.0, std(ln_residuals) * 5.0) |
The step_jump threshold of 0.5 in log-domain corresponds to a ~65% instantaneous change in the raw value (e^0.5 = 1.65). This is calibrated to distinguish genuine sudden events (bearing impact, coupling failure) from normal process variation. The chaotic_volatility threshold of 0.3 means the standard deviation of consecutive differences exceeds 30% of their mean — high scatter without a consistent directional trend, typically caused by process-driven load variation rather than mechanical degradation.
Escalation Thresholds
Section titled “Escalation Thresholds”These thresholds govern when trend analysis forces a system-state escalation, overriding the current SSI (System Stability Index) classification:
| Constant | Value | Trigger |
|---|---|---|
escalation_unstable | 0.05 | SSI slope >= 0.05 forces escalation to Unstable state |
escalation_degrading | 0.02 | SSI slope >= 0.02 forces escalation to Degrading state |
The escalation logic is a safety net. Even if the current SSI score falls within the “stable” band ([0.0, 0.30)), a sustained upward SSI slope of 0.02 or greater forces the system into “degrading” status. A slope of 0.05 or greater forces “unstable.” This prevents the system from reporting stability while the trend is clearly adverse — the rate of change matters as much as the current value. An SSI slope of 0.05 means the stability index is worsening by 5 percentage points per evaluation period, which at that rate would traverse the entire stable-to-critical range in roughly 20 evaluation periods.
Reference Implementation: Signal Processing Pipeline
Section titled “Reference Implementation: Signal Processing Pipeline”"""RAPID AI — Module A: Signal Validation & Feature ExtractionReference implementation of the GUARD pipeline."""import numpy as npfrom dataclasses import dataclassfrom enum import Enum
class GuardVerdict(Enum): PASS = "pass" BLOCK = "block" WARN = "warn"
@dataclass(frozen=True)class SignalFeatures: rms: float peak: float crest_factor: float kurtosis: float quality_score: float iso_zone: str verdict: GuardVerdict
def extract_features(signal: np.ndarray, fs: float) -> SignalFeatures: """Extract statistical features from raw vibration signal.
Args: signal: Raw time-domain vibration signal fs: Sampling frequency in Hz
Returns: SignalFeatures with computed metrics and quality assessment """ # Hard blocks (Phase 1) if np.std(signal) < 0.001: # DG001: Flatline return SignalFeatures(0, 0, 0, 0, 0.0, "X", GuardVerdict.BLOCK)
nan_fraction = np.sum(np.isnan(signal)) / len(signal) if nan_fraction > 0.05: # DG002: Corrupt return SignalFeatures(0, 0, 0, 0, 0.0, "X", GuardVerdict.BLOCK)
if not (1000 <= fs <= 100000): # DG005: Invalid sample rate return SignalFeatures(0, 0, 0, 0, 0.0, "X", GuardVerdict.BLOCK)
if len(signal) < 256: # DG006: Insufficient samples return SignalFeatures(0, 0, 0, 0, 0.0, "X", GuardVerdict.BLOCK)
# Feature extraction clean = signal[~np.isnan(signal)] rms = np.sqrt(np.mean(clean**2)) peak = np.max(np.abs(clean)) crest = peak / rms if rms > 0 else 0 mu = np.mean(clean) sigma = np.std(clean) kurt = np.mean(((clean - mu) / sigma)**4) - 3 if sigma > 0 else 0
# Soft penalties (Phase 2) quality = 1.0 clip_frac = np.sum(np.abs(clean) > 0.99 * peak) / len(clean) if clip_frac > 0.01: # DG003 quality *= 0.85
# ISO 20816-1 zone classification (medium machines 15-75 kW) velocity_rms = rms # assumes mm/s if velocity_rms < 1.12: zone = "A" elif velocity_rms < 2.8: zone = "B" elif velocity_rms < 7.1: zone = "C" else: zone = "D"
verdict = GuardVerdict.WARN if quality < 1.0 else GuardVerdict.PASS return SignalFeatures(rms, peak, crest, kurt, quality, zone, verdict)
# --- ISO Zone Severity Mapping ---ISO_ZONE_SCORES = {"A": 0.05, "B": 0.25, "C": 0.60, "D": 0.90}
# --- Kurtosis Severity ---def kurtosis_severity(kurt: float) -> float: """Map excess kurtosis to severity score per RAPID AI thresholds.""" if kurt >= 7.0: return 0.85 # Alarm elif kurt >= 5.0: return 0.65 # Warning elif kurt >= 4.0: return 0.40 # Watch else: return 0.10 # NormalReference Implementation: FFT & Spectral Analysis
Section titled “Reference Implementation: FFT & Spectral Analysis”def compute_spectrum(signal: np.ndarray, fs: float) -> tuple[np.ndarray, np.ndarray]: """Compute single-sided amplitude spectrum.
Returns: (frequencies, amplitudes) arrays """ n = len(signal) # Apply Hanning window to reduce spectral leakage windowed = signal * np.hanning(n) fft_vals = np.fft.rfft(windowed) freqs = np.fft.rfftfreq(n, d=1.0/fs) amplitudes = 2.0 * np.abs(fft_vals) / n return freqs, amplitudes
def find_harmonics(freqs: np.ndarray, amps: np.ndarray, fundamental: float, n_harmonics: int = 8, tolerance: float = 0.03) -> list[dict]: """Extract harmonic amplitudes relative to fundamental frequency.
Args: fundamental: Running speed in Hz (RPM / 60) n_harmonics: Number of harmonics to extract tolerance: Frequency matching tolerance (fraction of fundamental) """ harmonics = [] for n in range(1, n_harmonics + 1): target = n * fundamental tol = tolerance * fundamental mask = (freqs >= target - tol) & (freqs <= target + tol) if np.any(mask): peak_amp = np.max(amps[mask]) harmonics.append({"order": n, "frequency_hz": target, "amplitude": peak_amp}) return harmonicsThe Signal Intelligence layer transforms raw sensor data into structured diagnostic evidence. The next layer — Stability Intelligence — fuses this evidence across multiple components and dimensions to assess the system as a whole.
Standards Alignment
Section titled “Standards Alignment”| Standard | Relevance to This Chapter |
|---|---|
| ISO 10816-1/ISO 20816-1 — Mechanical vibration evaluation | Module A directly implements ISO 20816-1 zone classification (A/B/C/D) for broadband vibration severity assessment across four machine groups (small, medium, large rigid, large flexible). |
| ISO 10816-7 — Rotodynamic pumps | Module A applies ISO 10816-7 pump-specific thresholds by hazard category (Category I for hazardous service, Category II for general service), with tighter boundaries for safety-critical pump applications. |
| ISO 7919 — Shaft vibration | The directional ratio analysis (A/H, H/V) and shaft-proximity measurements referenced in the AFB and coupling rules align with ISO 7919’s shaft vibration measurement methodology. |
| ISO 13374 — Condition monitoring data processing | Module A implements ISO 13374 Level 2 (Data Manipulation), Module B implements Level 3 (State Detection), and Modules B.2/B.3 extend beyond the standard with trend classification and entropy-based stability assessment. |
| ISO 17359 — General guidelines for condition monitoring | The 16 guard rules (DG001-DG019) implement ISO 17359’s data quality requirements, ensuring that only validated, trustworthy data enters the diagnostic pipeline. |
Changelog
Section titled “Changelog”| Version | Date | Author | Changes |
|---|---|---|---|
| 2.3.0 | 2026-03-17 | Rick D | Added common bearing quick reference table, severity scale for rotor bar defects, and common misdiagnoses for all 6 fault patterns |
| 2.2.0 | 2026-03-17 | Rick D | Added Vibration Fault Signature Gallery with 6 fault pattern categories |
| 2.1.0 | 2026-03-17 | Rick D | Added standards alignment, living doc metadata, changelog |
| 2.0.0 | 2026-03-17 | Rick D | Enriched with production codebase content |
| 1.0.0 | 2026-03-17 | Rick D | Initial chapter creation |
Next: Chapter 5 — Stability Intelligence Previous: Chapter 3 — The Architecture