Skip to content

CODE

SSI Implementation — Pairwise Toeplitz SVD → Shift Invariance → Cross-Order Voting

static int jacobi_svd(float *A, int m, int n, float *S, float *Vt, int max_iter);
static void mat_mul_f32(const float *A, const float *B, float *C, int m, int k, int n);

int tiny_sysid_ssi(const float *data, int n_ch, int n, float fs,
                   int n_modes, tiny_sysid_result_t *result)
{
    // Step 1: Cross-correlation → block Toeplitz
    // Step 2: Jacobi SVD of Toeplitz
    // Step 3: For each order n = 2,4,...,16:
    //   O_n = U_n · √S_n,  A_n = O_up⁺ · O_dn  (shift invariance)
    //   eig(A_n) → candidates
    // Step 4: Pool + cluster (10% tolerance)
}

SSI-PW variant: process 2 channels at a time → more robust for weak modes.