Qiao CZ Good Good Study, Day Day Up

Windows下安装fftw的方法

最近由于某些原因需要在Windows下面使用fftw,参照网上的教程并没有安装成功。最后经过一番努力后终于安装成功,下面是我的安装过程:

获取fftw

首先由官网获取fftw最新版,并解压。

生成并安装相关文件

在解压文件夹下用CMD运行1如下指令2

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

但是在我的电脑上这一步由于设置路径的原因并没有成功,于是我使用了简单粗暴的方法,即将libfftw3-3.deflibfftw3f-3.def以及libfftw3l-3.def全部复制到VS下的bin文件夹中。下面是我电脑上的路径:

C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin

之后再在该路径下运行上述指令将生成的三个.lib文件,将这三个放到如下目录:

C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/lib

之后可以选择清理下bin中的文件。将解压文件夹中的libfftw3-3.dlllibfftw3f-3.dll以及libfftw3l-3.dll文件复制到相应的系统文件中,这样以后执行比较方便。如果是32位系统就放到C:/Windows/System32中,如果是64位系统则放置在C:/Windows/SysWOW64中。最后将fftw3.h放入如下目录3即可。

C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/include

这样就初步完成了fftw的安装。

Visual Studio中使用fftw

下面在Visual Studio中使用fftw,首先建立一个项目test,之后选择项目test属性链接器输入附加依赖项,在其中添加我们的3个lib文件4

libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib

下面是一个测试代码5

#include "fftw3.h"  
#include <stdio.h>  
#define N 8  
int main()
{
  int i;
  fftw_complex *din, *out;
  fftw_plan p;
  din = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
  out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
  if ((din == NULL) || (out == NULL))
  {
    printf("Error:insufficient available memory\n");
  }
  else
  {
    for (i = 0; i < N; i++)
    {
      din[i][0] = i + 1;
      din[i][1] = 0;
    }
  }
  p = fftw_plan_dft_1d(N, din, out, FFTW_FORWARD, FFTW_ESTIMATE);
  fftw_execute(p); /* repeat as needed */
  fftw_destroy_plan(p);
  fftw_cleanup();
  for (i = 0; i < N; i++)/*OUTPUT*/
  {
      printf("%f,%fi\n", din[i][0], din[i][1]);
  }
  printf("\n");
  for (i = 0; i < N; i++)/*OUTPUT*/
  {
      printf("%f,%fi\n", out[i][0], out[i][1]);
  }

  if (din != NULL) fftw_free(din);
  if (out != NULL) fftw_free(out);
  getchar();
  return 0;
}

结果应为:

1.000000,0.000000i
2.000000,0.000000i
3.000000,0.000000i
4.000000,0.000000i
5.000000,0.000000i
6.000000,0.000000i
7.000000,0.000000i
8.000000,0.000000i

36.000000,0.000000i
-4.000000,9.656854i
-4.000000,4.000000i
-4.000000,1.656854i
-4.000000,0.000000i
-4.000000,-1.656854i
-4.000000,-4.000000i
-4.000000,-9.656854i

在成功运行后可以去官网学习一下fftw的文档

参考资料