fftw on FC5?
Globe Trotter
itsme_410 at yahoo.com
Wed Apr 26 20:13:56 UTC 2006
Has anyone used fftw on FC5? I upgraded two weeks ago, and now I get FFT's all
zeros. I am not sure if I have inadvertently introduced a bug in my program
somewhere, but I am mystified, where.
So, I thought I would ask if anyone has had problems/no problems with fftw on
FC5.
Many thanks and best wishes,
Trotter.
Here is a sample function and a calling program:
#include<stdio.h>
#include<math.h>
#include<complex.h>
#include<fftw3.h>
/* calculates the FFT of a complex periodic 1-, 2- and 3-dimensional arrays,
using FFTW, described at www.fftw.org. Note that the FFT's are scaled
which means that applying the FFT and then its inverse provides the
sequence back. This is a variation from the output of FFTW.
*/
int fft(int n,fftw_complex *f,int sign)
{
/* calculates the forward and backward Fast Fourier Transform of a complex
1-dimensional sequence (using FFTW, the Fastest Fourier Transform of the
West).
The third argument sign takes one of FFTW_FORWARD and FFTW_BACKWARD.
Note that the input sequence is replaced by its forward or inverse FFT on
return. */
fftw_complex *ff,*out;
fftw_plan p;
int i;
if (!abs(sign)) {
printf("ERROR: Please specify one of FFTW_FORWARD or FFTW_BACKWARD for
forward/inverse transform\n");
exit(1);
}
ff = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
for (i=0;i<n;i++) ff[i]=f[i];
p = fftw_plan_dft_1d(n, ff, out, sign, FFTW_MEASURE);
fftw_execute(p); /* repeat as needed */
for (i=0;i<n;i++) f[i]=out[i]/sqrt((double)n);
fftw_destroy_plan(p);
fftw_free(ff);
fftw_free(out);
return 0;
}
int main(void)
{
fftw_complex *ff;
int i,dum,n=216;
double a;
FILE *ffile;
ff = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
ffile=fopen("mu","r");
for (i=0;i<n;i++) {
fscanf(ffile,"%lE\n",&a);
ff[i]=a;
}
fclose(ffile);
dum=fft(n,ff,FFTW_FORWARD);
ffile=fopen("mu.fftf","w");
for (i=0;i<n;i++) {
fprintf(ffile,"%f %f\n",creal(ff[i]),cimag(ff[i]));
}
fclose(ffile);
dum=fft(n,ff,FFTW_BACKWARD);
ffile=fopen("mu.fftb","w");
for (i=0;i<n;i++) {
fprintf(ffile,"%f %f\n",creal(ff[i]),cimag(ff[i]));
}
fclose(ffile);
fftw_free(ff);
return 0;
}
Comment: By the way, the malloc is as in the FFTW manual. I prefer the cleaner,
more C-ish
ff = fftw_malloc(n * sizeof *ff);
myself.
Best, Trotter
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the users
mailing list