diff options
author | Jean-Marc Valin <Jean-Marc.Valin@csiro.au> | 2008-02-13 09:41:37 +0300 |
---|---|---|
committer | Jean-Marc Valin <Jean-Marc.Valin@csiro.au> | 2008-02-13 09:41:37 +0300 |
commit | 06c67dbce2f214d58981ce4ed84bc2ec06d57bd8 (patch) | |
tree | b9f2020b8bb031d7b28af2e68f4323f0d8eea2a2 /libcelt/bands.c | |
parent | 5215623dcd5a26474239f6f817c153b7f3e02d73 (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.c | 51 |
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; } } } |