系统识别¶
TinySysid — 边缘设备上的运行模态分析
六种 output-only 模态识别方法,全部在 ESP32-S3 上运行。从快速频率扫描到高精度阻尼估计,覆盖 OMA 的完整工作流。
架构速览¶
-
PP 峰值拾取
平均 PSD → 局部峰值 → 振型
速度最快,无矩阵运算
适合快速频率扫描 -
FDD 频域分解
每频点 CPSD → SVD → SV1 谱
SVD 自动分离信号/噪声子空间
频率 + 振型精度高 -
EFDD 增强频域分解
FDD + IFFT + 对数衰减阻尼
在 FDD 基础上增加阻尼估计
适合需近似阻尼的场景 -
ITD 时域法
NExT + 逐通道对 AR 模型
能检出 SVD 方法遗漏的弱模态
适合弱激发模态检测 -
ERA 特征系统实现
NExT + Hankel SVD + 平衡实现
综合精度最高
频率/阻尼/振型全套输出 -
SSI 子空间识别
Toeplitz SVD + 位移不变性 + 跨阶投票
阻尼最准(数据充足时)
适合高质量阻尼估计
处理流水线¶
所有 OMA 方法共享一个从原始数据到模态参数的通用流水线,区别在于时域/频域分支的选择。
┌─ Welch 平均 PSD ── 峰值检测 ── 频率 + sqrt(PSD) 振型 ← PP
│
数据 → 预处理 → FFT ──┼─ Welch 平均 CPSD ── 每频点 SVD ── SV1 谱峰值 ── 频率 + 左奇异向量振型 ← FDD
│ └── IFFT + 对数衰减 ── 阻尼 ← EFDD
│
└─ NExT 互相关 ── 系统矩阵 ── 特征值 ── 极点 → 频率/阻尼 + CPSD 振型 ← ITD / ERA / SSI
设计思路:频域方法(PP/FDD/EFDD)计算快、适合短数据,但分辨率受限于 FFT 长度;时域方法(ITD/ERA/SSI)利用互相关函数扩展有效数据长度,精度更高但计算量大。建议先用频域方法扫描,再用时域方法精化。
场景索引¶
-
快速频率扫描
→PP ,50 ms 完成 5ch×3000 点
-
频率 + 振型确认
→FDD ,SVD 抗噪,振型可靠
-
含阻尼的频率估计
→EFDD ,近似阻尼
-
弱模态检测
→ITD ,逐对 AR 不遗漏
-
最高综合精度
→ERA ,频率/阻尼/振型最准
-
高质量阻尼
→SSI ,跨阶投票,数据充足时最可靠
快速开始¶
#include "tiny_sysid.h"
float data[5 * 1500]; // 5 channel × 1500 samples
float fs = 50.0f; // sampling rate
int n_modes = 4; // extract 4 modes
tiny_sysid_result_t result;
// 调用任意方法
tiny_sysid_identify(data, 5, 1500, fs, n_modes,
TINY_SYSID_METHOD_FDD, &result);
// 打印结果
tiny_sysid_print_result(&result);
数据长度需求¶
| 方法 | 最少 | 推荐 |
|---|---|---|
| PP, FDD | 500 (10s) | 1500 (30s) |
| EFDD | 1000 (20s) | 3000 (60s) |
| ITD | 500 (10s) | 1500 (30s) |
| ERA | 1000 (20s) | 3000 (60s) |
| SSI | 3000 (60s) | 6000 (120s) |