Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>2008-02-13 09:41:37 +0300
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>2008-02-13 09:41:37 +0300
commit06c67dbce2f214d58981ce4ed84bc2ec06d57bd8 (patch)
treeb9f2020b8bb031d7b28af2e68f4323f0d8eea2a2 /libcelt/bands.c
parent5215623dcd5a26474239f6f817c153b7f3e02d73 (diff)
Simplified exp_spreading by unifying both directions. Have to admit I don't
fully understand why that works!
Diffstat (limited to 'libcelt/bands.c')
-rw-r--r--libcelt/bands.c51
1 files changed, 14 insertions, 37 deletions
diff --git a/libcelt/bands.c b/libcelt/bands.c
index 329d7cf..1bb228d 100644
--- a/libcelt/bands.c
+++ b/libcelt/bands.c
@@ -43,47 +43,24 @@ static void exp_rotation(float *X, int len, float theta, int dir, int stride, in
int i, k;
float c, s;
c = cos(theta);
- s = sin(theta);
- if (dir > 0)
+ s = dir*sin(theta);
+ 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];
- x2 = X[i+stride];
- 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;
- }
+ 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 (k=0;k<iter;k++)
+ for (i=len-2*stride-1;i>=0;i--)
{
- for (i=0;i<len-2*stride;i++)
- {
- float x1, x2;
- x1 = X[i];
- x2 = X[i+stride];
- 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;
- }
+ float x1, x2;
+ x1 = X[i];
+ x2 = X[i+stride];
+ X[i] = c*x1 - s*x2;
+ X[i+stride] = c*x2 + s*x1;
}
}
}