Reply by Steven G. Johnson●April 2, 20082008-04-02
On Apr 2, 3:52 am, Nico <nicolas.au...@free.fr> wrote:
> I have a 2D signal (x,y) in an array, and I would like to fourier
> transform it along one and only one dimension, x for example.
> ....
It looks fine to me; I'm not sure what your question is or why you
think it is wrong. Why not just try it for a small sample dataset?
(Note that the nembed parameters are really only important for one-
dimensional transforms, for cases where you are performing a multi-
dimensional transform of a portion of a multi-dimensional array.
Here, your transforms are 1d so these parameters are ignored anyway
and you could just pass NULL.)
Regards,
Steven G. Johnson
Reply by Nico●April 2, 20082008-04-02
Hello,
I have a 2D signal (x,y) in an array, and I would like to fourier
transform it along one and only one dimension, x for example.
I have (nx+1) and (ny+1) points in the x and y direction respectively.
the data is stored in a 1D array so that the (i,j) point is simply i +
j*(nx+1)
I think that the advanced interface should be good for my problem, but I
don't understand some of the parameters required to make the plan.
fftw_plan fftw_plan_many_dft_r2c(int rank, const int *n, int howmany,
double *in, const int *inembed,
int istride, int idist,
fftw_complex *out, const int
*onembed,
int ostride, int odist,
unsigned flags);
int rank : 1
const int *n; I think the only element n[0] is the logical size of the
array, so I would say n[0] = nx
int howmany; is the number of transform, since I want the FFT along the
x direction, there is ny+1 FFT to compute, so howmany=ny+1
double *in; this is my input array, I'm not sure, should I give all
(nx+1)(ny+1) points to the planner, or only (nx)(ny+1) (because the
(nx+1)th point is the same as the first one.)
const int *inembed; What is the difference between this parameter and *n
? should it be nx+1 ? nx ?
int stride; I think this one is 1 in my case.
int idist; And this one should be nx+1 since I want the fourier
transform along x, i.e. along each line of nx+1 points.
fftw_complex *out; In my case it should be an array of (nx/2+1)*(ny+1)
fftw_complex, right ?
const int *onembed; nx/2+1 ?
int ostride; 1 I think
int odist; nx/2+1 I think ?
unsigned flag; ok I choose what I want here...
Thanks for telling me where I'm wrong :)
Nico