FFTW编译使用过程

来源:互联网 发布:员工管理系统数组java 编辑:程序博客网 时间:2024/05/16 14:30

现在时间是2017.09.22 

FFTW号称是世界上最快的FFT变换,因为算法优化需要,现在移植记录一下使用过程


1.下载FFTW3.3.6

             www.fftw.org/download.html

解压:tar -zxvf fftw-3.3.6-pl2.tar.gz

chmod +x bootstrap.sh./bootstrap.sh  ./configure CXX=arm-hisiv300-linux-g++ CC=arm-hisiv300-linux-gcc --host=arm-linux LIBS="-lm"  make  make install  



出现如下问题

fft.c: In function 'fftw3_fft':
fft.c:1221:14: error: subscripted value is neither array nor pointer nor vector
         in[i][0] = xr[i];
              ^
fft.c:1222:14: error: subscripted value is neither array nor pointer nor vector
         in[i][1] = xi[i];
              ^
fft.c:1230:24: error: subscripted value is neither array nor pointer nor vector
         xr[i]  = out[i][0];
                        ^
fft.c:1231:24: error: subscripted value is neither array nor pointer nor vector
         xi[i]  = out[i][1];


解决:看文档上说一下定义

//typedef double fftw_complex[2];
如果在#include "fftw3.h"前添加了#include <complex.h>表示需要你的编译器支持C99,否则请不要加#include <complex.h>(我是ARM,不支持c99,不要加#include <complex.h>


//FFT_Tables没什么用,下面是使用案例//FFTW使用//#include <complex.h>  //HI3531A不支持C99 不需要加这个头#include "fftw3.h"void fftw3_fft( FFT_Tables *fft_tables, double *xr, double *xi, int logm){//    fftw_complex *in, *out;//    fftw_plan p;int N = 1<<logm;int i = 0;fftw_complex *fftw_in, *fftw_out;fftw_plan fftw_p;fftw_in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * 1024 );fftw_out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * 1024 );// 输入数据in赋值for (i = 0; i<N; i++) {fftw_in[i][0] = xr[i];fftw_in[i][1] = xi[i];}fftw_p = fftw_plan_dft_1d(N, fftw_in, fftw_out, FFTW_FORWARD, FFTW_MEASURE);fftw_execute(fftw_p); // 执行变换for (i = 0; i<N; i++) {xr[i]  = fftw_out[i][0];  //实部xi[i]  = fftw_out[i][1];  //虚部}fftw_destroy_plan(fftw_p);fftw_free(fftw_in);fftw_free(fftw_out);}






























原创粉丝点击