FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT。FFTW 还包含对共享和分布式存储系统的并行变换,它可自动适应你的机器, 缓存,存储大小,寄存器个数。可以在树莓派、Android这些移动端装上FFTW库便于将数据进行频域变换、处理。以下是具体安装和配置过程
1、首先下载fftw-3.3.8.tar.gz(http://www.fftw.org/download.html) 这个安装包,连接树莓派并进入到板子中。通过samba将此文件复制到树莓派中。
2、使用tar zxvf fftw-3.3.8.tar.gz命令解压文件,然后在/usr/local目录下创建fftw目录(sudo mkdir /usr/local/fftw)也就是这个库的安装目录
3、进入到解压后的fftw库目录里,需要安装两次。第一次安装和配置如下
./configure --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks --enable-shared=yes
make
make install
make clean(这是为第二次安装做准备)
第二次安装和配置如下
./configure --enable-float --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks --enable-shared=yes
make
make install
进入到/usr/local/fftw会有四个文件夹
编写测试程序test_fftw.cpp进行验证,以下是测试代码
#include <complex>
#include <fftw3.h>
#include <math.h>
#include <iostream>
#define N 10
using namespace std;
int main(int argc, char* argv[]){
fftw_complex in[N], out[N];
fftw_plan p;
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_MEASURE);
for(int i = 0; i < N; i++){
in[i][0] = i;
in[i][1] = 0.0;
}
fftw_execute(p);
for(int i = 0; i < N; i++){
cout<< out[i][0] << " " << out[i][1] << endl;
}
complex<double> temp = 0.0;
for(int k = 0; k < N; k++){
double pi = 4 * atan(1.0);
temp += exp(complex<double>(0.0, -2.0 * pi * 3 * k / N)) * complex<double>(in[k][0], in[k][1]);
}
cout << "out[3] is " << temp << endl;
fftw_complex out1[N];
fftw_plan p1;
p1 = fftw_plan_dft_1d(N, out1, in, FFTW_BACKWARD, FFTW_MEASURE);
for(int i = 0; i < N; i++){
out1[i][0] = out[i][0];
out1[i][1] = out[i][1];
}
fftw_execute(p1);
for(int i = 0; i < N; i++){
cout << in[i][0] << " " << in[i][1] << endl;
}
fftw_destroy_plan(p);
fftw_destroy_plan(p1);
return 0;
}
编译程序g++ test_fftw.cpp -o test -lfftw3 -I /usr/local/fftw/include -L /usr/local/fftw/lib
./test运行程序,以下是结果
从结果得知库已安装成功,以上是整个树莓派安装fftw库的全过程