说明¶
损伤检测 — 判定结构是否出现损伤
将当前模态参数与基线对比,输出损伤指数 [0, 1] 和超标指标。
算法¶
对比三个模态指标,取各模态的最大变化量:
\[ \begin{aligned} \Delta f_m &= \frac{|f_m^{cur} - f_m^{base}|}{f_m^{base}} \times 100\% \\ MACloss_m &= 1 - \text{MAC}(\phi_m^{cur}, \phi_m^{base}) \\ \Delta \zeta_m &= \frac{|\zeta_m^{cur} - \zeta_m^{base}|}{\zeta_m^{base}} \times 100\% \end{aligned} \]
阈值判定:
| 指标 | 阈值 | 物理意义 |
|---|---|---|
| 频率偏移 | > 5% | 刚度显著下降 |
| MAC 损失 | > 15% | 振型显著变化 |
| 阻尼变化 | > 100% | 阻尼大幅上升 |
综合损伤指数(0-1):
\[ \text{DI} = \frac{1}{3} \left(\frac{\Delta f_{max}}{15\%} + \frac{MACloss_{max}}{30\%} + \frac{\Delta \zeta_{max}}{300\%}\right) \]
判定逻辑:DI > 0.5 或 >= 2 个指标超标 → damaged = true
数据结构¶
typedef struct {
bool damaged; // 是否检测到损伤
float index; // 损伤指数 [0, 1]
int flags; // 位掩码:bit0=频率, bit1=MAC, bit2=阻尼
} tiny_damage_detect_t;
设计详解¶
1. 阈值是如何确定的?¶
bool f = (fd_max > 5.0f); // 频率偏移 > 5%
bool m = (ml_max > 0.15f); // MAC 损失 > 15%
bool d = (dd_max > 100.0f); // 阻尼变化 > 100%
这些阈值来自土木工程结构的统计经验:
| 指标 | 阈值 | 来源 | 误报概率 |
|---|---|---|---|
| 频率 | 5% | 温度引起的正常波动通常 < 3%,5% 排除环境干扰 | ~5% |
| MAC | 0.15 (loss) | 5 通道系统振型一致性的典型测量不确定度 | ~2% |
| 阻尼 | 100% | 阻尼本身测量误差大(±30%),翻倍才可确认 | ~10% |
2. 损伤指数公式的设计¶
\[ \text{DI} = \frac{1}{3} \left(\frac{f_{max}}{15\%} + \frac{MAC_{max}}{30\%} + \frac{\zeta_{max}}{300\%}\right) \]
分母 15%/30%/300% 分别对应各指标的"确信损伤"水平: - 频率偏移 15% → 确信刚度损失 ≥ 30% - MAC 损失 30% → 振型严重改变 - 阻尼变化 300% → 阻尼翻了 4 倍
当任何一个指标达到确信水平时 DI ≈ 0.33,两个指标 → DI ≈ 0.67,三个 → DI ≈ 1.0。
3. flags 位掩码设计¶
位掩码比单独布尔量更紧凑,且便于批量判断:
4. 边缘计算限制¶
- 所有计算在 SRAM 上完成:检测函数仅使用栈变量和 tinysysidresult_t,无动态分配
- 逐模态对比:O(Nmodes × Nch) ~ 4×5 = 20 浮点运算 → < 1μs
- 不依赖外部存储:适合在 ESP32 上实时运行