/* Levinson recursion for linear prediction (LP) */ void LPFormantTracker::levinson(dtype * R, dtype * aa, const int size) { dtype ki, t; dtype E = R[0]; int i0, j0; if (R[0] == 0.0) { for(i0=1; i0<size; i0++) aa[i0] = 0.0; aa[0] = 1; return; } for(i0=1; i0<size; i0++) { ki = R[i0]; // Update reflection coefficient: for (j0=1; j0<i0; j0++) ki += aa[j0] * R[i0-j0]; ki /= -E; E *= (1 - ki*ki); // Update polynomial: for (j0 = 1; j0 <= RSL(i0 - 1, 1); j0++) { t = aa[j0]; aa[j0] += ki * aa[i0 - j0]; aa[i0 - j0] += ki * t; } if (i0%2 == 0) aa[RSL(i0, 1)] *= 1+ki; // Record reflection coefficient aa[i0] = ki; } // end of for loop aa[0] = 1.0; }
static void rsem_AA3(void) { WSL(X1); RSL(X2); // this one should fail }
static void rsem_AA2(void) { RSL(X1); WSL(X2); // this one should fail }
static void rsem_AA1(void) { RSL(X1); RSL(X1); // this one should fail }
static void rsem_AA3(void) { WSL(X1); RSL(X2); }
static void rsem_AA2(void) { RSL(X1); WSL(X2); }
static void rsem_AA1B(void) { RSL(X1); RSL(X2); }
static void rsem_AA1(void) { RSL(X1); RSL(X1); }