说明¶
ERA — Eigensystem Realization Algorithm:综合精度最高的 OMA 方法
基于 NExT(自然激励技术)+ Hankel 矩阵 + SVD + 平衡实现。从时域响应中提取状态空间模型,再从中识别模态参数。综合精度最高。
算法直觉¶
ERA 在做什么?¶
想象你在黑暗中投篮球。你只能看到球(输出),看不到你的手(输入)。你想知道篮筐的"振动特性"(结构模态)。
ERA 的做法: 1.NExT :把随机响应转换成类似"自由衰减"的信号(互相关函数) 2.Hankel 矩阵 :把时间序列排成一个块矩阵——矩阵的行数代表"过去",列数代表"未来" 3.SVD :分解这个矩阵,保留最大的奇异值——去掉噪声,保留系统的主要动态 4.** 平衡实现** :从 SVD 结果重建系统矩阵 \(A\),它的特征值就是系统的极点
为什么 ERA 精度最高?¶
- 使用 大矩阵 (Hankel 75×50)做 SVD,信息量大
- NExT 预处理提升了信噪比
- 平衡实现保证数值稳定性
- Jacobi SVD 在嵌入式平台上收敛快(~15 sweeps)
算法流程¶
1. NExT(自然激励技术)
└─ 互相关函数 → 类似自由衰减
2. 构建 Hankel 矩阵
├─ H₀: [p·n_ch × q·n_ch](默认 p=15, q=10)
└─ H₁: 延迟 1 步
3. SVD: H₀ = U·Σ·Vᵀ
└─ 选择阶数 n(σ[k] > 0.5%·σ[0])
4. 平衡实现
├─ A = Σ⁻¹/²·Uᵀ·H₁·V·Σ⁻¹/²
└─ λ = eig(A) → 离散极点
5. 离散 → 连续模态参数
└─ 频率、阻尼、振型
设计详解¶
1. Hankel 矩阵构造¶
Hankel 矩阵 H₀ 大小为 \((p \cdot n\_ch) \times (q \cdot n\_ch)\) = 75 × 50。
为什么 p=15, q=10? - 行列比 75/50 ≈ 1.5 → SVD 时列数决定最大可辨识阶数:\(\min(75, 50) = 50\) - 实际系统阶数远小于 50(5 通道系统最多 10 个模态 = 20 阶),所以选择后截断 - p,q 越大→包含更多时间信息→对噪声更鲁棒→内存更大
替代选项: | p,q | Hankel 大小 | 内存 | 弱模态捕捉 | ESP32 耗时 | |-----|------------|------|-----------|-----------| | (10, 5) | 50×25 | 5 KB | 一般 | ~1s | | (15, 10) | 75×50 | 15 KB | 好 | ~2s | | (20, 15) | 100×75 | 30 KB | 更好 | ~3s | | (30, 20) | 150×100 | 60 KB | 最好 | ~5s (PSRAM) |
默认 (15,10) 在 5 通道 3000 点测试中频率误差 < 2%,阻尼误差 < ±2%。
2. Jacobi SVD(完整分解)¶
ERA 需要完整 SVD(所有奇异值/向量),因此用 Jacobi 而非幂迭代。
为什么 Jacobi 不是 QR/Householder?
| 方法 | 稳定性 | 收敛速度 | 嵌入式适用性 |
|---|---|---|---|
| Jacobi | 最稳定 | O(n³),~15-20 sweeps | ✓ 无动态分配,浮点友好 |
| QR | 需要 Householder | O(n³) | 依赖外部库 |
| 分治 | 复杂实现 | O(n²log n) | 递归栈开销大 |
Jacobi 的优势在于无额外内存分配和秩判断自然——Givens 旋转逐对清零,收敛过程中可中途停止。
3. 阶数选择¶
0.5% 意味着至少保留能量为主奇异值 0.5% 的所有模态。对 5 通道系统,这通常保留 8-12 阶(对应 4-6 个模态),远超所需的 4 个模态。
4. 平衡实现¶
ERA 的平衡实现简化为:截断 Hankel 的 SVD → 用 H₁ 构造系统矩阵 A。这是因为 ERA 假设系统是可控且可观的,平衡步骤在嵌入式平台上可略去。
关键参数¶
| 参数 | 默认 | 说明 |
|---|---|---|
| p (block rows) | 15 | Hankel 行块数 |
| q (block cols) | 10 | Hankel 列块数 |
| SVD 方法 | Jacobi | 全 SVD(非幂迭代) |
| 阶数选择 | > 0.5%·S[0] | 保留主要动态 |
何时使用 ERA¶
- 需要最高综合精度(频率/阻尼/振型)
- 数据 ≥ 20s(推荐 60s)
- 作为最终确认方法