Skip to content

CODE

Severity Implementation — Frequency Shift → Stiffness Loss → Classification

void tiny_damage_assess(const tiny_sysid_result_t *cur, tiny_damage_assess_t *out)
{
    memset(out, 0, sizeof(*out));
    if (!g_has_baseline || !cur) return;

    int nm = min(cur->n_modes, g_baseline.n_modes);
    float sum = 0; int nv = 0;

    for (int m = 0; m < nm; m++) {
        float fd = 100.0f * (cur->frequencies[m] - g_baseline.frequencies[m])
                   / g_baseline.frequencies[m];
        if (fabsf(fd) < 0.1f) continue;
        float dk = -2.0f * fd;
        if (dk < 0) dk = 0;
        sum += dk; nv++;
    }

    float loss = (nv > 0) ? (sum / nv) : 0;
    out->stiff_loss = (loss < 0) ? 0 : loss;

    if      (loss < 5.0f)   { out->level = DMG_NONE;     out->confidence = 0.3f; }
    else if (loss < 20.0f)  { out->level = DMG_MILD;     out->confidence = 0.6f; }
    else if (loss < 50.0f)  { out->level = DMG_MODERATE; out->confidence = 0.8f; }
    else                    { out->level = DMG_SEVERE;   out->confidence = 0.9f; }
}