26#include <grass/config.h>
28#if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H)
40#define c_re(c) ((c)[0])
41#define c_im(c) ((c)[1])
47#include <grass/gmath.h>
69int fft2(
int i_sign,
double (*data)[2],
int NN,
int dimc,
int dimr)
79 norm = 1.0 / sqrt(NN);
82 plan = fftw_plan_dft_2d(dimr, dimc, data, data,
83 (i_sign < 0) ? FFTW_FORWARD : FFTW_BACKWARD,
88 fftw_destroy_plan(plan);
90 plan = fftw2d_create_plan(dimc, dimr,
91 (i_sign < 0) ? FFTW_FORWARD : FFTW_BACKWARD,
92 FFTW_ESTIMATE | FFTW_IN_PLACE);
94 fftwnd_one(plan, data, data);
96 fftwnd_destroy_plan(plan);
99 for (i = 0; i < NN; i++) {
126int fft(
int i_sign,
double *DATA[2],
int NN,
int dimc,
int dimr)
131 data = (fftw_complex *)G_malloc(NN *
sizeof(fftw_complex));
133 for (i = 0; i < NN; i++) {
134 c_re(data[i]) = DATA[0][i];
135 c_im(data[i]) = DATA[1][i];
138 fft2(i_sign, data, NN, dimc, dimr);
140 for (i = 0; i < NN; i++) {
141 DATA[0][i] = c_re(data[i]);
142 DATA[1][i] = c_im(data[i]);
void G_free(void *buf)
Free allocated memory.