Damage Detection¶
TinyDamage — Structural Damage Assessment from Modal Parameters
Compare current modal results against a healthy baseline to detect, localize, and assess damage. Three levels, one API call.
Architecture¶
-
Level 1 — Detection
Compare frequency / MAC / damping Damage index [0, 1] Flagged metrics
-
Level 2 — Localization
COMAC per DOF analysis Per-DOF damage probability Most likely damaged location
-
Level 3 — Severity
Frequency shift → stiffness loss Severity classification Confidence estimate
Quick Start¶
#include "tiny_damage.h"
// 1. Store baseline from healthy structure
tiny_sysid_result_t healthy;
tiny_sysid_identify(data_ref, n_ch, ns, fs, 4, TINY_SYSID_METHOD_FDD, &healthy);
tiny_damage_set_baseline(&healthy);
// 2. Analyze current data
tiny_sysid_result_t current;
tiny_sysid_identify(data_dmg, n_ch, ns, fs, 4, TINY_SYSID_METHOD_FDD, ¤t);
// 3. One-shot assessment
tiny_damage_detect_t det;
tiny_damage_locate_t loc;
tiny_damage_assess_t sev;
tiny_damage_run(¤t, &det, &loc, &sev);
if (det.damaged) {
printf("DOF %d damaged, stiffness loss %.1f%%, confidence %.0f%%\n",
loc.dof, sev.stiff_loss, sev.confidence * 100);
}
Use Case Index¶
-
Set healthy baseline
→
tiny_damage_set_baseline()— store modal results from healthy structure -
Routine damage check
→
tiny_damage_detect()— compare current vs baseline, get damage index -
Locate the damage
→
tiny_damage_locate()— COMAC per-DOF analysis, find most likely location -
Assess severity
→
tiny_damage_assess()— stiffness loss estimate + severity grade -
One-shot assessment
→
tiny_damage_run()— detect + locate + assess in a single call
Intuition¶
Why Can Damage Be Detected from Modal Parameters?¶
Structural damage (cracks, loosening, corrosion) changes stiffness and mass distribution, which alters vibration characteristics.
| Parameter | Damage effect | Physical cause | |
|---|---|---|---|
| Frequency | Decreases | Stiffness loss → lower natural frequency | |
| MAC (mode shape) | Shape changes | Local stiffness change alters mode shape | |
| Damping | Increases | Crack friction adds energy dissipation |
Frequency Shift → Stiffness Loss¶
Intuition: \(f \propto \sqrt{k/m}\), differentiate: \(\Delta f/f \approx \frac{1}{2} \Delta k/k\). So 5% freq drop ≈ 10% stiffness loss.
COMAC — Per-DOF Mode Shape Correlation¶
Three Levels¶
Level 1 — Detection¶
| Metric | Threshold | Meaning |
|---|---|---|
| Frequency shift | > 5% | Significant stiffness change |
| MAC loss | > 15% (MAC < 0.85) | Significant shape change |
| Damping change | > 100% (doubled) | Significant damping increase |
Damage index: normalized average of three metrics → [0, 1]
Verdict: index > 0.5 or >= 2 metrics exceed thresholds → damaged = true
Level 2 — Localization¶
COMAC per DOF → damage probability vector → select highest-probability DOF.
Level 3 — Severity¶
[\Delta k/k \approx -2 \cdot \Delta f/f\] (average across all modes)
| Level | Stiffness loss | Code | Confidence |
|---|---|---|---|
| Healthy | < 5% | DMG_NONE | 30% |
| Mild | 5–20% | DMG_MILD | 60% |
| Moderate | 20–50% | DMG_MODERATE | 80% |
| Severe | > 50% | DMG_SEVERE | 90% |
API¶
void tiny_damage_set_baseline(const tiny_sysid_result_t *r);
void tiny_damage_detect(const tiny_sysid_result_t *cur, tiny_damage_detect_t *out);
void tiny_damage_locate(const tiny_sysid_result_t *cur, tiny_damage_locate_t *out);
void tiny_damage_assess(const tiny_sysid_result_t *cur, tiny_damage_assess_t *out);
void tiny_damage_run(const tiny_sysid_result_t *cur,
tiny_damage_detect_t *d,
tiny_damage_locate_t *l,
tiny_damage_assess_t *a);
Dependency Chain¶
System Identification (TinySysid) → tiny_damage
TinySysid produces: TinyDamage consumes:
- frequencies - frequency shifts
- mode shapes (MAC) - MAC/COMAC changes
- damping ratios - damping ratio changes
TinyDamage sits directly above TinySysid in the application layer, consuming tiny_sysid_result_t to produce damage assessment results.
Code Structure¶
include/ tiny_damage.h · tiny_damage_config.h
detect/ damage detection algorithm (index, threshold verdict)
locate/ damage localization (COMAC per-DOF)
severity/ severity assessment (stiffness loss, grade, confidence)
test/ test suite
Related¶
- Detection Algorithm →
- Detection Code →
- Localization Algorithm →
- Localization Code →
- Severity Assessment →
- Severity Code →
Notes¶
Baseline stability
Take 3+ baseline measurements on different days under similar conditions. Use the median. Temperature/humidity can cause 1-3% frequency shifts.
MAC sensitivity reference
5-channel system, well-separated modes: MAC > 0.95 = no change, MAC < 0.8 = investigate.
Pairs with System Identification
tiny_damage takes raw tiny_sysid_result_t. Use ERA or FDD for high-quality modal parameters before passing to damage assessment.