Simplified exp_spreading by unifying both directions. Have to admit I don't

fully understand why that works!
This commit is contained in:
Jean-Marc Valin 2008-02-13 17:41:37 +11:00
parent 5215623dcd
commit 06c67dbce2

View file

@ -43,47 +43,24 @@ static void exp_rotation(float *X, int len, float theta, int dir, int stride, in
int i, k; int i, k;
float c, s; float c, s;
c = cos(theta); c = cos(theta);
s = sin(theta); s = dir*sin(theta);
if (dir > 0) for (k=0;k<iter;k++)
{ {
for (k=0;k<iter;k++) for (i=0;i<len-stride;i++)
{ {
for (i=0;i<len-stride;i++) float x1, x2;
{ x1 = X[i];
float x1, x2; x2 = X[i+stride];
x1 = X[i]; X[i] = c*x1 - s*x2;
x2 = X[i+stride]; X[i+stride] = c*x2 + s*x1;
X[i] = c*x1 - s*x2;
X[i+stride] = c*x2 + s*x1;
}
for (i=len-2*stride-1;i>=0;i--)
{
float x1, x2;
x1 = X[i];
x2 = X[i+stride];
X[i] = c*x1 - s*x2;
X[i+stride] = c*x2 + s*x1;
}
} }
} else { for (i=len-2*stride-1;i>=0;i--)
for (k=0;k<iter;k++)
{ {
for (i=0;i<len-2*stride;i++) float x1, x2;
{ x1 = X[i];
float x1, x2; x2 = X[i+stride];
x1 = X[i]; X[i] = c*x1 - s*x2;
x2 = X[i+stride]; X[i+stride] = c*x2 + s*x1;
X[i] = c*x1 + s*x2;
X[i+stride] = c*x2 - s*x1;
}
for (i=len-stride-1;i>=0;i--)
{
float x1, x2;
x1 = X[i];
x2 = X[i+stride];
X[i] = c*x1 + s*x2;
X[i+stride] = c*x2 - s*x1;
}
} }
} }
} }