跳转至

损伤检测

TinyDamage — 基于模态参数变化的结构损伤评估

通过对比当前模态结果与健康基线,检测是否存在损伤、定位损伤位置、评估严重程度。三级架构,一步到位。


架构速览

  • Level 1 — 检测


    对比频率 / MAC / 阻尼 损伤指数 [0, 1] 超标指标数

  • Level 2 — 定位


    COMAC 逐自由度分析 各 DOF 损伤概率 最可能损伤位置

  • Level 3 — 评估


    频率偏移 → 刚度损失估计 严重程度分级 置信度


快速开始

#include "tiny_damage.h"

// 1. 存储健康结构的模态结果作为基线
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. 分析当前采集的数据
tiny_sysid_result_t current;
tiny_sysid_identify(data_dmg, n_ch, ns, fs, 4, TINY_SYSID_METHOD_FDD, &current);

// 3. 损伤评估(检测 + 定位 + 评估 一次完成)
tiny_damage_detect_t det;
tiny_damage_locate_t loc;
tiny_damage_assess_t sev;
tiny_damage_run(&current, &det, &loc, &sev);

if (det.damaged) {
    printf("DOF %d 可能损伤,刚度损失 %.1f%%,置信度 %.0f%%\n",
           loc.dof, sev.stiff_loss, sev.confidence * 100);
}

场景索引

  • 设定健康基线

    tiny_damage_set_baseline() — 存储健康结构的模态结果

  • 例行损伤检测

    tiny_damage_detect() — 对比当前与基线,输出损伤指数

  • 定位损伤位置

    tiny_damage_locate() — COMAC 逐 DOF 分析,找出最可能位置

  • 评估损伤程度

    tiny_damage_assess() — 刚度损失估计 + 严重程度分级

  • 一键全面评估

    tiny_damage_run() — 检测 + 定位 + 评估一次完成


算法直觉

损伤为什么能通过模态参数检测?

结构损伤(裂缝、松动、腐蚀)会改变结构的刚度和质量分布,进而改变振动特性。这些变化体现在三个可测量的参数上:

参数 损伤影响 物理原因
频率 下降 刚度降低 → 固有频率降低
振型 (MAC) 形状变化 局部刚度改变影响振型分布
阻尼 上升 裂缝摩擦增加能量耗散

频率偏移 → 刚度损失

\[ \frac{\Delta k}{k} \approx -2 \cdot \frac{\Delta f}{f} \]

直觉:频率 \(f \propto \sqrt{k/m}\),取对数微分得到 \(\Delta f/f \approx \frac{1}{2} \Delta k/k\)。所以 5% 的频率下降 ≈ 10% 的刚度损失。

COMAC — 逐自由度振型相关性

MAC 比较整体振型,COMAC 比较每个自由度的振型分量。如果某个 DOF 的 COMAC 较低,说明这个位置的振型变化最大。

\[ \operatorname{COMAC}(d) = \frac{\left(\sum_{m=1}^{N_m} \phi_{m,d}^{cur} \cdot \phi_{m,d}^{base}\right)^2} {\sum \left(\phi_{m,d}^{cur}\right)^2 \cdot \sum \left(\phi_{m,d}^{base}\right)^2} \]

三级架构详解

Level 1 — 检测

三个指标的阈值

指标 阈值 含义
频率偏移 > 5% 刚度显著变化
MAC 损失 > 15%(MAC < 0.85) 振型显著变化
阻尼变化 > 100%(翻倍) 阻尼大幅上升

损伤指数:三指标归一化后取平均 → [0, 1]

判定:损伤指数 > 0.5 或 >= 2 个指标超阈值 → damaged = true

Level 2 — 定位

COMAC 分析 → 损伤概率向量 → 选出概率最高的 DOF。

Level 3 — 评估

刚度损失估计:\(\Delta k/k \approx -2 \cdot \Delta f/f\)(取所有模态的平均)

严重程度分级

等级 刚度损失 代码 置信度
健康 < 5% DMG_NONE 30%
轻度 5–20% DMG_MILD 60%
中度 20–50% DMG_MODERATE 80%
重度 > 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);

依赖链

系统识别 (TinySysid) → tiny_damage

TinySysid 输出:                     TinyDamage 输入:
- 频率                              - 频率偏移
- 振型 (MAC)                        - MAC/COMAC 变化
- 阻尼比                             - 阻尼比变化

TinyDamage 位于 TinySysid 之上,消费 tiny_sysid_result_t 产生损伤评估结果。

代码结构

include/    tiny_damage.h · tiny_damage_config.h
detect/     损伤检测算法(指数计算、阈值判定)
locate/     损伤定位 (COMAC 逐 DOF)
severity/   损伤评估(刚度损失、等级、置信度)
test/       测试用例

相关


注意事项

基线稳定性

不同天在相似环境条件下采集 3+ 次基线,取中位数。温度/湿度变化可能引起 1–3% 的频率偏移。

MAC 灵敏度参考

5 通道系统、模态分离良好时:MAC > 0.95 无变化,MAC < 0.8 需要关注。

与系统识别配合使用

tiny_damage 直接接收 tiny_sysid_result_t,建议先用 ERA 或 FDD 获取高精度模态参数,再传给 damage 模块。