日期:2014-05-16  浏览次数:20806 次

windows平台安装fftw
FFTW是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用的上佳选择。
1. 从网站http://www.fftw.org上下载最新的预编译文件:
  • 32-bit version: fftw-3.3.3-dll32.zip (2.4MB)
  • 64-bit version: fftw-3.3.3-dll64.zip (2.8MB)


    2.In order to link to them from Visual C++, you will need to create .lib "import libraries" using the lib.exe program included with VC++.  Run:

         lib /def:libfftw3-3.def
         lib /def:libfftw3f-3.def
         lib /def:libfftw3l-3.def

    其实这是VC自带的工具,我机器上安装了VS2012,lib.exe的路径如下:
       C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin

    64位的情况应该使用如下的命令:

    lib /machine:x64 /def:libfftw3l-3.def


       打开Windows的命令提示行窗口(CMD窗口)以管理员模式运行,改变当前目录到D:\Program Files\Microsoft Visual Studio 8\VC\bin(使用cd命令)
       把\vs安装目录\Common7\IDE 里面的mspdb80.dll,mspdbcore.dll,mspdbsrv.exe,msobj80.dll 复制到上面的bin文件夹里,把libfftw3-3.def,libfftw3f-3.def,libfftw3l-3.def也拷到bin下面。 

    3.在cmd进入上面提到的bin目录,并运行
      lib /machine:x64 /def:libfftw3-3.def
      lib /machine:x64 /def:libfftw3f-3.def
      lib /machine:x64 /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.下面是从别的博客上找到的一个测试代码:

    #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;
    }