ref: 5c6b26451650fa43935a0d526615698b024f1be7
parent: 3a00b1e7e1ee5357b5860e9b43f1468e0ff2e32d
author: Paul Brossier <[email protected]>
date: Sun Dec 22 15:29:12 EST 2013
src/spectral/ooura_fft8g.c: use float when double is not needed
--- a/src/spectral/fft.c
+++ b/src/spectral/fft.c
@@ -84,7 +84,7 @@
#else // using OOURA
// let's use ooura instead
-extern void rdft(int, int, double *, int *, double *);
+extern void rdft(int, int, smpl_t *, int *, smpl_t *);
#endif /* HAVE_ACCELERATE */
#endif /* HAVE_FFTW3 */
@@ -109,8 +109,8 @@
double *in, *out;
#endif
#else // using OOURA
- double *in, *out;
- double *w;
+ smpl_t *in, *out;
+ smpl_t *w;
int *ip;
#endif /* HAVE_ACCELERATE */
#endif /* HAVE_FFTW3 */
@@ -170,10 +170,10 @@
s->winsize = winsize;
s->fft_size = winsize / 2 + 1;
s->compspec = new_fvec(winsize);
- s->in = AUBIO_ARRAY(double, s->winsize);
- s->out = AUBIO_ARRAY(double, s->winsize);
+ s->in = AUBIO_ARRAY(smpl_t, s->winsize);
+ s->out = AUBIO_ARRAY(smpl_t, s->winsize);
s->ip = AUBIO_ARRAY(int , s->fft_size);
- s->w = AUBIO_ARRAY(double, s->fft_size);
+ s->w = AUBIO_ARRAY(smpl_t, s->fft_size);
s->ip[0] = 0;
#endif /* HAVE_ACCELERATE */
#endif /* HAVE_FFTW3 */
--- a/src/spectral/ooura_fft8g.c
+++ b/src/spectral/ooura_fft8g.c
@@ -1,3 +1,9 @@
+// 2 modifications made for aubio:
+// - replace all 'double' with 'smpl_t'
+// - include "aubio_priv.h" (for config.h and types.h)
+
+#include "aubio_priv.h"
+
/*
Fast Fourier/Cosine/Sine Transform
dimension :one
@@ -14,12 +20,12 @@
dfct: Cosine Transform of RDFT (Real Symmetric DFT)
dfst: Sine Transform of RDFT (Real Anti-symmetric DFT)
function prototypes
- void cdft(int, int, double *, int *, double *);
- void rdft(int, int, double *, int *, double *);
- void ddct(int, int, double *, int *, double *);
- void ddst(int, int, double *, int *, double *);
- void dfct(int, double *, double *, int *, double *);
- void dfst(int, double *, double *, int *, double *);
+ void cdft(int, int, smpl_t *, int *, smpl_t *);
+ void rdft(int, int, smpl_t *, int *, smpl_t *);
+ void ddct(int, int, smpl_t *, int *, smpl_t *);
+ void ddst(int, int, smpl_t *, int *, smpl_t *);
+ void dfct(int, smpl_t *, smpl_t *, int *, smpl_t *);
+ void dfst(int, smpl_t *, smpl_t *, int *, smpl_t *);
-------- Complex DFT (Discrete Fourier Transform) --------
@@ -39,7 +45,7 @@
[parameters]
2*n :data length (int)
n >= 1, n = power of 2
- a[0...2*n-1] :input/output data (double *)
+ a[0...2*n-1] :input/output data (smpl_t *)
input data
a[2*j] = Re(x[j]),
a[2*j+1] = Im(x[j]), 0<=j<n
@@ -52,7 +58,7 @@
length of ip >=
2+(1<<(int)(log(n+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n/2-1] :cos/sin table (double *)
+ w[0...n/2-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -84,7 +90,7 @@
[parameters]
n :data length (int)
n >= 2, n = power of 2
- a[0...n-1] :input/output data (double *)
+ a[0...n-1] :input/output data (smpl_t *)
<case1>
output data
a[2*k] = R[k], 0<=k<n/2
@@ -101,7 +107,7 @@
length of ip >=
2+(1<<(int)(log(n/2+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n/2-1] :cos/sin table (double *)
+ w[0...n/2-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -130,7 +136,7 @@
[parameters]
n :data length (int)
n >= 2, n = power of 2
- a[0...n-1] :input/output data (double *)
+ a[0...n-1] :input/output data (smpl_t *)
output data
a[k] = C[k], 0<=k<n
ip[0...*] :work area for bit reversal (int *)
@@ -139,7 +145,7 @@
length of ip >=
2+(1<<(int)(log(n/2+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n*5/4-1] :cos/sin table (double *)
+ w[0...n*5/4-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -169,7 +175,7 @@
[parameters]
n :data length (int)
n >= 2, n = power of 2
- a[0...n-1] :input/output data (double *)
+ a[0...n-1] :input/output data (smpl_t *)
<case1>
input data
a[j] = A[j], 0<j<n
@@ -186,7 +192,7 @@
length of ip >=
2+(1<<(int)(log(n/2+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n*5/4-1] :cos/sin table (double *)
+ w[0...n*5/4-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -209,10 +215,10 @@
[parameters]
n :data length - 1 (int)
n >= 2, n = power of 2
- a[0...n] :input/output data (double *)
+ a[0...n] :input/output data (smpl_t *)
output data
a[k] = C[k], 0<=k<=n
- t[0...n/2] :work area (double *)
+ t[0...n/2] :work area (smpl_t *)
ip[0...*] :work area for bit reversal (int *)
length of ip >= 2+sqrt(n/4)
strictly,
@@ -219,7 +225,7 @@
length of ip >=
2+(1<<(int)(log(n/4+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n*5/8-1] :cos/sin table (double *)
+ w[0...n*5/8-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -245,11 +251,11 @@
[parameters]
n :data length + 1 (int)
n >= 2, n = power of 2
- a[0...n-1] :input/output data (double *)
+ a[0...n-1] :input/output data (smpl_t *)
output data
a[k] = S[k], 0<k<n
(a[0] is used for work area)
- t[0...n/2-1] :work area (double *)
+ t[0...n/2-1] :work area (smpl_t *)
ip[0...*] :work area for bit reversal (int *)
length of ip >= 2+sqrt(n/4)
strictly,
@@ -256,7 +262,7 @@
length of ip >=
2+(1<<(int)(log(n/4+0.5)/log(2))/2).
ip[0],ip[1] are pointers of the cos/sin table.
- w[0...n*5/8-1] :cos/sin table (double *)
+ w[0...n*5/8-1] :cos/sin table (smpl_t *)
w[],ip[] are initialized if ip[0] == 0.
[remark]
Inverse of
@@ -275,13 +281,13 @@
*/
-void cdft(int n, int isgn, double *a, int *ip, double *w)
+void cdft(int n, int isgn, smpl_t *a, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void bitrv2(int n, int *ip, double *a);
- void bitrv2conj(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void cftbsub(int n, double *a, double *w);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void bitrv2conj(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void cftbsub(int n, smpl_t *a, smpl_t *w);
if (n > (ip[0] << 2)) {
makewt(n >> 2, ip, w);
@@ -300,17 +306,17 @@
}
-void rdft(int n, int isgn, double *a, int *ip, double *w)
+void rdft(int n, int isgn, smpl_t *a, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void makect(int nc, int *ip, double *c);
- void bitrv2(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void cftbsub(int n, double *a, double *w);
- void rftfsub(int n, double *a, int nc, double *c);
- void rftbsub(int n, double *a, int nc, double *c);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void makect(int nc, int *ip, smpl_t *c);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void cftbsub(int n, smpl_t *a, smpl_t *w);
+ void rftfsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void rftbsub(int n, smpl_t *a, int nc, smpl_t *c);
int nw, nc;
- double xi;
+ smpl_t xi;
nw = ip[0];
if (n > (nw << 2)) {
@@ -347,18 +353,18 @@
}
-void ddct(int n, int isgn, double *a, int *ip, double *w)
+void ddct(int n, int isgn, smpl_t *a, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void makect(int nc, int *ip, double *c);
- void bitrv2(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void cftbsub(int n, double *a, double *w);
- void rftfsub(int n, double *a, int nc, double *c);
- void rftbsub(int n, double *a, int nc, double *c);
- void dctsub(int n, double *a, int nc, double *c);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void makect(int nc, int *ip, smpl_t *c);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void cftbsub(int n, smpl_t *a, smpl_t *w);
+ void rftfsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void rftbsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void dctsub(int n, smpl_t *a, int nc, smpl_t *c);
int j, nw, nc;
- double xr;
+ smpl_t xr;
nw = ip[0];
if (n > (nw << 2)) {
@@ -406,18 +412,18 @@
}
-void ddst(int n, int isgn, double *a, int *ip, double *w)
+void ddst(int n, int isgn, smpl_t *a, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void makect(int nc, int *ip, double *c);
- void bitrv2(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void cftbsub(int n, double *a, double *w);
- void rftfsub(int n, double *a, int nc, double *c);
- void rftbsub(int n, double *a, int nc, double *c);
- void dstsub(int n, double *a, int nc, double *c);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void makect(int nc, int *ip, smpl_t *c);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void cftbsub(int n, smpl_t *a, smpl_t *w);
+ void rftfsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void rftbsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void dstsub(int n, smpl_t *a, int nc, smpl_t *c);
int j, nw, nc;
- double xr;
+ smpl_t xr;
nw = ip[0];
if (n > (nw << 2)) {
@@ -465,16 +471,16 @@
}
-void dfct(int n, double *a, double *t, int *ip, double *w)
+void dfct(int n, smpl_t *a, smpl_t *t, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void makect(int nc, int *ip, double *c);
- void bitrv2(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void rftfsub(int n, double *a, int nc, double *c);
- void dctsub(int n, double *a, int nc, double *c);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void makect(int nc, int *ip, smpl_t *c);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void rftfsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void dctsub(int n, smpl_t *a, int nc, smpl_t *c);
int j, k, l, m, mh, nw, nc;
- double xr, xi, yr, yi;
+ smpl_t xr, xi, yr, yi;
nw = ip[0];
if (n > (nw << 3)) {
@@ -561,16 +567,16 @@
}
-void dfst(int n, double *a, double *t, int *ip, double *w)
+void dfst(int n, smpl_t *a, smpl_t *t, int *ip, smpl_t *w)
{
- void makewt(int nw, int *ip, double *w);
- void makect(int nc, int *ip, double *c);
- void bitrv2(int n, int *ip, double *a);
- void cftfsub(int n, double *a, double *w);
- void rftfsub(int n, double *a, int nc, double *c);
- void dstsub(int n, double *a, int nc, double *c);
+ void makewt(int nw, int *ip, smpl_t *w);
+ void makect(int nc, int *ip, smpl_t *c);
+ void bitrv2(int n, int *ip, smpl_t *a);
+ void cftfsub(int n, smpl_t *a, smpl_t *w);
+ void rftfsub(int n, smpl_t *a, int nc, smpl_t *c);
+ void dstsub(int n, smpl_t *a, int nc, smpl_t *c);
int j, k, l, m, mh, nw, nc;
- double xr, xi, yr, yi;
+ smpl_t xr, xi, yr, yi;
nw = ip[0];
if (n > (nw << 3)) {
@@ -653,11 +659,11 @@
#include <math.h>
-void makewt(int nw, int *ip, double *w)
+void makewt(int nw, int *ip, smpl_t *w)
{
- void bitrv2(int n, int *ip, double *a);
+ void bitrv2(int n, int *ip, smpl_t *a);
int j, nwh;
- double delta, x, y;
+ smpl_t delta, x, y;
ip[0] = nw;
ip[1] = 1;
@@ -689,10 +695,10 @@
}
-void makect(int nc, int *ip, double *c)
+void makect(int nc, int *ip, smpl_t *c)
{
int j, nch;
- double delta;
+ smpl_t delta;
ip[1] = nc;
if (nc > 1) {
@@ -711,10 +717,10 @@
/* -------- child routines -------- */
-void bitrv2(int n, int *ip, double *a)
+void bitrv2(int n, int *ip, smpl_t *a)
{
int j, j1, k, k1, l, m, m2;
- double xr, xi, yr, yi;
+ smpl_t xr, xi, yr, yi;
ip[0] = 0;
l = n;
@@ -811,10 +817,10 @@
}
-void bitrv2conj(int n, int *ip, double *a)
+void bitrv2conj(int n, int *ip, smpl_t *a)
{
int j, j1, k, k1, l, m, m2;
- double xr, xi, yr, yi;
+ smpl_t xr, xi, yr, yi;
ip[0] = 0;
l = n;
@@ -920,12 +926,12 @@
}
-void cftfsub(int n, double *a, double *w)
+void cftfsub(int n, smpl_t *a, smpl_t *w)
{
- void cft1st(int n, double *a, double *w);
- void cftmdl(int n, int l, double *a, double *w);
+ void cft1st(int n, smpl_t *a, smpl_t *w);
+ void cftmdl(int n, int l, smpl_t *a, smpl_t *w);
int j, j1, j2, j3, l;
- double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+ smpl_t x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
l = 2;
if (n >= 16) {
@@ -972,12 +978,12 @@
}
-void cftbsub(int n, double *a, double *w)
+void cftbsub(int n, smpl_t *a, smpl_t *w)
{
- void cft1st(int n, double *a, double *w);
- void cftmdl(int n, int l, double *a, double *w);
+ void cft1st(int n, smpl_t *a, smpl_t *w);
+ void cftmdl(int n, int l, smpl_t *a, smpl_t *w);
int j, j1, j2, j3, j4, j5, j6, j7, l;
- double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
+ smpl_t wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
@@ -1089,12 +1095,12 @@
}
-void cft1st(int n, double *a, double *w)
+void cft1st(int n, smpl_t *a, smpl_t *w)
{
int j, k1;
- double wn4r, wtmp, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,
+ smpl_t wn4r, wtmp, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,
wk4r, wk4i, wk5r, wk5i, wk6r, wk6i, wk7r, wk7i;
- double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
+ smpl_t x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
@@ -1304,12 +1310,12 @@
}
-void cftmdl(int n, int l, double *a, double *w)
+void cftmdl(int n, int l, smpl_t *a, smpl_t *w)
{
int j, j1, j2, j3, j4, j5, j6, j7, k, k1, m;
- double wn4r, wtmp, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,
+ smpl_t wn4r, wtmp, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,
wk4r, wk4i, wk5r, wk5i, wk6r, wk6i, wk7r, wk7i;
- double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
+ smpl_t x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,
y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,
y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
@@ -1547,10 +1553,10 @@
}
-void rftfsub(int n, double *a, int nc, double *c)
+void rftfsub(int n, smpl_t *a, int nc, smpl_t *c)
{
int j, k, kk, ks, m;
- double wkr, wki, xr, xi, yr, yi;
+ smpl_t wkr, wki, xr, xi, yr, yi;
m = n >> 1;
ks = 2 * nc / m;
@@ -1572,10 +1578,10 @@
}
-void rftbsub(int n, double *a, int nc, double *c)
+void rftbsub(int n, smpl_t *a, int nc, smpl_t *c)
{
int j, k, kk, ks, m;
- double wkr, wki, xr, xi, yr, yi;
+ smpl_t wkr, wki, xr, xi, yr, yi;
a[1] = -a[1];
m = n >> 1;
@@ -1599,10 +1605,10 @@
}
-void dctsub(int n, double *a, int nc, double *c)
+void dctsub(int n, smpl_t *a, int nc, smpl_t *c)
{
int j, k, kk, ks, m;
- double wkr, wki, xr;
+ smpl_t wkr, wki, xr;
m = n >> 1;
ks = nc / n;
@@ -1620,10 +1626,10 @@
}
-void dstsub(int n, double *a, int nc, double *c)
+void dstsub(int n, smpl_t *a, int nc, smpl_t *c)
{
int j, k, kk, ks, m;
- double wkr, wki, xr;
+ smpl_t wkr, wki, xr;
m = n >> 1;
ks = nc / n;