损伤检测¶
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, ¤t);
// 3. 损伤评估(检测 + 定位 + 评估 一次完成)
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 可能损伤,刚度损失 %.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) | 形状变化 | 局部刚度改变影响振型分布 | |
| 阻尼 | 上升 | 裂缝摩擦增加能量耗散 |
频率偏移 → 刚度损失¶
直觉:频率 \(f \propto \sqrt{k/m}\),取对数微分得到 \(\Delta f/f \approx \frac{1}{2} \Delta k/k\)。所以 5% 的频率下降 ≈ 10% 的刚度损失。
COMAC — 逐自由度振型相关性¶
MAC 比较整体振型,COMAC 比较每个自由度的振型分量。如果某个 DOF 的 COMAC 较低,说明这个位置的振型变化最大。
三级架构详解¶
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 模块。