跳转至

代码

ITD 实现 — NExT 互相关 → per-pair AR(4) → 特征值 → 聚类投票

int tiny_sysid_itd(const float *data, int n_ch, int n, float fs,
                   int n_modes, tiny_sysid_result_t *result)
{
    // ── Step 1: NExT 互相关 ──
    // R[lag][i][j] = sum(x_i[t] * x_j[t + lag]) / N
    float *R = calloc((L+1) * n_ch * n_ch, sizeof(float));
    for (int i = 0; i < n_ch; i++)
        for (int j = 0; j < n_ch; j++)
            for (int lag = 0; lag <= L; lag++)
                for (int t = 0; t < n - lag; t++)
                    R[lag * n_ch * n_ch + i * n_ch + j] +=
                        data[i * n + t] * data[j * n + t + lag];

    // ── Step 2: 逐通道对建 AR(4) 系统矩阵 ──
    // 对每对 (a,b):M1[4][nc], M2[4][nc] → A = M2·M1⁺
    // eig(A) → 4 个候选 (f, ζ)
    // 收集到候选池

    // ── Step 3: 聚类投票 ──
    // 10% 频率容差,最小 2 票 → 接受为真实模态

    // ── Step 4: CPSD 振型提取 ──
    // 用 Welch CPSD 在各峰值处的 SVD 获得振型
}

设计要点

  • sn=4(自回归阶数),每通道对产生 4 个候选
  • 5 通道 → C(5,2) = 10 对 × 4 候选 = 40 个原始候选
  • 聚类阈值 10%,最少 2 票确保可靠性
  • 阻尼常被高估 2-10 倍,框架内仅用于模态配对
  • 使用 WDT 超时扩展(60s)适应长时间计算