1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include "ltfat.h"
#include "ltfat_types.h"
/**
* FFreal routines
*/
LTFAT_EXTERN void
LTFAT_NAME(fftreal)(LTFAT_REAL *f, const ltfatInt L, const ltfatInt W,
LTFAT_COMPLEX *cout)
{
LTFAT_FFTW(plan) p = LTFAT_NAME(fftreal_init)(f, L, W, cout, FFTW_ESTIMATE);
LTFAT_NAME(fftreal_execute)(p,f,cout);
LTFAT_FFTW(destroy_plan)(p);
}
LTFAT_EXTERN void
LTFAT_NAME(fftreal_execute)(const LTFAT_FFTW(plan) p, LTFAT_REAL *f,
LTFAT_COMPLEX *cout)
{
LTFAT_FFTW(execute_dft_r2c)(p,f,cout);
}
/*
* IF anything else than FFTW_ESTIMATE is used for a flag, the planning overwrites input array !
*/
LTFAT_EXTERN LTFAT_FFTW(plan)
LTFAT_NAME(fftreal_init)(LTFAT_REAL *f, const ltfatInt L, const ltfatInt W,
LTFAT_COMPLEX *cout, unsigned flag)
{
ltfatInt L2 = (L/2)+1;
int ltfatInt = (int) L;
LTFAT_FFTW(plan) p = LTFAT_FFTW(plan_many_dft_r2c)(1, <fatInt, W,
f, NULL,
1, L,
cout, NULL,
1, L2,
flag);
return p;
}
LTFAT_EXTERN void
LTFAT_NAME(ifftreal)(LTFAT_COMPLEX *c, const ltfatInt L, const ltfatInt W,
LTFAT_REAL *f)
{
LTFAT_FFTW(plan) p = LTFAT_NAME(ifftreal_init)(c, L, W, f, FFTW_ESTIMATE);
LTFAT_NAME(ifftreal_execute)(p,c,L,W,f);
LTFAT_FFTW(destroy_plan)(p);
}
LTFAT_EXTERN void
LTFAT_NAME(ifftreal_execute)(const LTFAT_FFTW(plan) p, LTFAT_COMPLEX *c,
const ltfatInt L, const ltfatInt W,
LTFAT_REAL *f)
{
LTFAT_FFTW(execute_dft_c2r)(p,c,f);
LTFAT_REAL s = (LTFAT_REAL) (1.0/L);
for (ltfatInt ii=0; ii<L*W; ii++)
{
f[ii] *=s;
}
}
/*
* IF anything else than FFTW_ESTIMATE is used for a flag, the planning overwrites input array !
*/
LTFAT_EXTERN LTFAT_FFTW(plan)
LTFAT_NAME(ifftreal_init)(LTFAT_COMPLEX *c, const ltfatInt L, const ltfatInt W,
LTFAT_REAL *f, unsigned flag)
{
ltfatInt L2 = (L/2)+1;
int ltfatInt = (int) L;
LTFAT_FFTW(plan) p = LTFAT_FFTW(plan_many_dft_c2r)(1, <fatInt, W,
c, NULL,
1, L2,
f, NULL,
1, L,
flag);
return p;
}
|