linux 和 Windows下FFTW库的安装

我整理了FFTW在windows和linux下安装的过程,我自己也在这两个系统中安装成功了,还是遇到不少问题的,我接下来把网上搜到的资料和自己遇到的问题一一告诉大家,让大家少走弯路。


windows 下安装:

转载于:http://www.cnblogs.com/zyx2007/archive/2012/02/28/2371780.html

参考这篇文章,然后在我的VS 2012上面安装成功了。。

  FFTW是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用的上佳选择。



1. 从网站http://www.fftw.org上下载最新的预编译文件:
    32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8MB)
    64-bit version: fftw-3.2.2-dll64.zip (2.2MB)
2.安装lib.exe
   其实这是VC自带的工具,在VC6.0和VS05中都有的,我机器上安装了VS2012,  则lib.exe的路径如下:
   D:\soft setup\Visual studio 2012\VC\bin   (VS2012的目录)
   (不需要使用CMD 直接用鼠标点击)进入目录D:\soft setup\Visual studio 2012\VC\bin
    把D:\soft setup\Visual studio 2012\Common7\IDE 里面的mspdb80.dll,mspdbcore.dll,mspdbsrv.exe,msobj80.dll 复制到上面的D:\soft setup\Visual studio 2012\VC\bin文件夹里,把你下载的fftw中的文件libfftw3-3.def,libfftw3f-3.def,libfftw3l-3.def也拷到bin下面。

  然后输入lib.exe(即运行),会有如下提示:

  

  这时候你的lib命令就可以使用了。

 

3.在cmd进入上面提到的bin目录,并运行
  lib /machine:i386 /def:libfftw3-3.def
  lib /machine:i386 /def:libfftw3f-3.def
  lib /machine:i386 /def:libfftw3l-3.def

 

4.将libfftw3f-3.dll libfftw3-3.dll libfftw3l-3.dll放入windows/system32中,然后将生成的库文件libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib放入vc中的lib文件夹,把fftw3.h放入include文件夹。

 

5.在你新建工程的时候,记得#include”fftw3.h“,然后设置参数:”项目“==>"项目属性"==>"配置属性"==>"链接器"==>"输入"==>"附加依赖项",将以下三项添加进去:

   libfftw3-3.lib

   libfftw3f-3.lib

   libfftw3l-3.lib

6.完成。

7. 如果出现找不到那些dll,计算机无法运行的话,就有可能是你的系统是64位,你只要把上面四个dll文件再复制一份放到SysWoW64文件夹里面就好了。

8.如果不想VS2012那些讨厌的预编译头文件的话,直接在项目属性/ 的c/c++中预编译头中的第一个选择:预编译头,选择不使用编译头就OK了。

9.那些讨厌 stdafx.h等都可以删掉了。

10. 如果遇到第三步骤通不过,不能找到lib文件的错误,则可以试图找其它方式编译出来三个lib文件,然后继续步骤三以下的步骤,同样可以实现安装,有时候,换个笔记本电脑就可以得到lib。比如我的笔记本就可以编译出来,而师兄的就不行。

11.下面是从别的博客上找到的一个测试代码:

#include "fftw3.h"

int main()

{
    fftw_complex *in, *out;
    fftw_plan p;
    int N= 8;
    int i;
    int j;
    in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
    out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
    for( i=0; i < N; i++)
    {
        in[i][0] = 1.0;
        in[i][1] = 0.0;
        printf("%6.2f ",in[i][0]);
    }
    printf("\n");
    p=fftw_plan_dft_1d(N,in,out, FFTW_FORWARD, FFTW_ESTIMATE);
    fftw_execute(p); /* repeat as needed*/
    for(j = 0;j < N;j++)
    {
        printf("%6.2f ",out[j][0]);
    }
    printf("\n");
    fftw_destroy_plan(p);
    fftw_free(in); 
    fftw_free(out);
    return 0;
}

结果如下:


linux下安装:

文章来自于:http://blog.csdn.net/wbgxx333/article/details/36625977

但是在安装中遇到了几个问题

1. 要在root权限下安装,不然/usr/bin下安装不通过

2.安装后搜不到fftw3.h头文件,其实安装在这个路径下面

/usr/local/fftw

所以你的编译命令这样写就可以通过:


或者makefile 写成这样:

INCLUDESLIB = -lfftw3

INCLUDESH = -I/usr/local/fftw/include

LIBS = -L/usr/local/fftw/lib


main: test_fftw.o

g++ -o test_fftw test_fftw.cpp $(INCLUDESH) $(INCLUDESLIB) $(LIBS)
test_fftw.o:
g++ -c test_fftw.cpp $(INCLUDESH)
clean:
rm -f *.o
.PHONY:clean

也是可以成功的。

最后附上文章:

FFTW(the Fastest Fourier Transform in the West)库是由MIT(Massachusetts Institute of Technology)的Matteo Frigo和Steven G. Johnson开发的,用于一维和多维实数或复数的离散傅里叶变换。
1. 下载 fftw-2_1_3_tar.gz              (www.fftw.org, or www.rpmfind.net )
2. tar zxvf fftw-2_1_3_tar.gz            展开压缩文件
3. 在Linux中安装FFTW:
a.    ./configure --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks   

其中,--enable-type-prefix    参数是为了同时使用single precision(单精度)和double precision(双精度),如果不使用它,最后只有以rfftw开头的文件被安装(real fftw);

--prefix=                      参数是设定安装目录;

--with-gcc                    使用gcc编译器;

--disable-fortran         参数为了不包含Fortran调用的机制;

--enable-i386-hacks   为Pentium和x86以后的CPU优化gcc的编译速度。
b.make                          编译

c.make install               安装,这一次安装完后,在安装目录中存在以dfftw和drfftw开头文件,但没有sfftw开头的文件

d.make clean              还需要安装一次,先清除

e../configure --enable-float --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks

其中,--enable-float      为了生成单精度计算的头文件和库文件,即以sfftw开头的文件。
f.make                      重新编译

g.make install            再一次安装,安装完后,目录中便会同时存在sfftw和dfftw开头的文件(用于复数函数/complex function的FFT变换)和srfftw与drfftw开头的文件(用于实数函数的FFT变换)


例如,如果需要用到双精度的实数FFT变换/FFTs,那么在编译的链接命令中需要按如下顺序加入
-ldrfftw -ldfftw参数


下面的是如何使用的一个例子

#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 1;
}
结果是:

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 安装FFTWLinux方法是: 1. 打开终端。 2. 安装FFTW的依赖,使用以下命令:“sudo apt-get install libfftw3-dev”。 3. 下载FFTW的压缩包,可以从其官方网站上下载。 4. 解压缩FFTW的压缩包,使用以下命令:“tar -zxvf fftw-.tar.gz”。 5. 进入解压后的文件夹,使用以下命令:“cd fftw-”。 6. 配置安装选项,使用以下命令:“./configure”。 7. 编译FFTW程序,使用以下命令:“make”。 8. 安装FFTW程序,使用以下命令:“sudo make install”。 9. 完成。现在FFTW已经成功安装Linux系统上了。 ### 回答2: fftw是一个用于计算快速傅里叶变换的常用,能够进行高效的信号频域处理,应用广泛。在Linux系统中,安装fftw非常简单。下面我们将使用Ubuntu为例,介绍如何在Linux安装fftw。 1.打开终端,输入以下命令: sudo apt-get update 这个命令可以用来更新你的系统。 2.安装fftw3 sudo apt-get install fftw3-dev 安装fftw3的开发。在终端中运行上面的命令,这样,Ubuntu系统就会自动从网络上下载并安装fftw3。 3.编译运行 安装完成后,使用下面的代码编译一个简单的程序来验证安装: #include <fftw3.h> #include <stdio.h> int main(){ fftw_complex *in, *out, *out2; fftw_plan p, p2; int N=10, i; in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N); out2 = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); p2 = fftw_plan_dft_1d(N, out, out2, FFTW_BACKWARD, FFTW_ESTIMATE); for(i=0;i<N;i++){ in[i][0]=i; in[i][1]=0; } fftw_execute(p); fftw_execute(p2); for(i=0;i<N;i++){ printf("%f %f ", out[i][0]/N, out[i][1]/N); //第一次变换的结果 printf("%f %f\n", out2[i][0]/N, out2[i][1]/N); //第二次变换的结果 } fftw_destroy_plan(p); fftw_destroy_plan(p2); fftw_free(in); fftw_free(out); fftw_free(out2); return 0; } 将代码保存为test.c,编译: gcc -o test test.c -lfftw3 -lm -l表示文件,fftw3 是的名称,-lm 是数学运算的选项。 4.运行你的程序 ./test 如果程序可以运行并且没有出现任何的错误,那么你已经成功的安装fftw并且配置好了你的系统。现在,你可以将这些代码放在你的程序中,并且可以运用这个高效的来进行信号的处理。 ### 回答3: fftw(Fastest Fourier Transform in the West)是一款快速傅里叶变换,广泛应用于科学计算领域。在Linux系统安装fftw需要经过几个步骤: 第一步:下载fftw的源码包。可以在fftw官网(http://www.fftw.org/download.html)下载最新版本的源码包,也可以使用命令行下载: $ wget http://www.fftw.org/fftw-3.3.9.tar.gz 这里以fftw-3.3.9版本为例进行讲解。 第二步:安装必要的依赖fftw需要依赖于g77、gfortran、make和gcc等编译工具,因此需要先安装这些软件,可以使用以下命令进行安装。 $ sudo apt-get install g77 gfortran make gcc 第三步:解压源码包并进入目录。 $ tar -zxvf fftw-3.3.9.tar.gz $ cd fftw-3.3.9 第四步:配置编译选项。可以使用以下命令进行配置: $ ./configure --enable-float 可以选择禁用默认的静态和动态,只编译需要的类型:单精度浮点类型 $ ./configure --enable-shared --enable-sse2 --enable-float 也可以选择编译所有类型: $ ./configure --enable-shared --enable-sse2 这里选择禁用默认的静态和动态,只编译需要的类型:单精度浮点类型。 第五步:编译和安装。使用以下命令编译程序。 $ make 编译过程可能需要一些时间,结束后使用以下命令将程序安装系统中: $ sudo make install 至此,fftw已经成功安装系统中,可以使用fftw完成相关的科学计算操作。 以上是在Linux系统安装fftw的步骤,可以根据实际需求进行配置和编译。在安装过程中如果遇到问题,可以查看相应的错误提示,并参考网上的解决方案进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值