跳转至

说明

损伤检测 — 判定结构是否出现损伤

将当前模态参数与基线对比,输出损伤指数 [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 位掩码设计

out->flags = (f ? 1 : 0) | (m ? 2 : 0) | (d ? 4 : 0);
// 位 0 = 频率,位 1 = MAC,位 2 = 阻尼

位掩码比单独布尔量更紧凑,且便于批量判断:

if (out->flags & 1) // 频率超标
if (out->flags >= 2) // ≥ 2 个指标超标 → damaged

4. 边缘计算限制

  • 所有计算在 SRAM 上完成:检测函数仅使用栈变量和 tinysysidresult_t,无动态分配
  • 逐模态对比:O(Nmodes × Nch) ~ 4×5 = 20 浮点运算 → < 1μs
  • 不依赖外部存储:适合在 ESP32 上实时运行