自己编的FFT速度太慢,不会优化。MATLAB吧上的大神说有开源的fftw可以用,而且MATLAB也是用的这个,下载地址:http://www.fftw.org/install/windows.html
目前最新是fftw-3.3.4-dll32
之前网上很多方法编译,没有成功,老是提示需要SDK7.1或者生成失败,昨晚上终于成功了。
打开VS2010,工具->命令提示,cd D:\Program Files\fftw-3.3.4-dll32进入目录,输入:
32位版本:
lib /def:libfftw3f-3.def
lib /def:libfftw3-3.def
lib /def:libfftw3l-3.def
64位版本:
lib /machine:x64 /def:libfftw3f-3.def
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3l-3.def
生成了libfftw3-3.lib、libfftw3l-3.lib、libfftw3f-3.lib三个LIB文件 。新建VC++项目,以控制台为例:
#include "stdafx.h"
#include "fftw3.h"
#include
#define N 8
#include "fftw3.h"
#include
#define N 8
int _tmain(int argc, _TCHAR* argv[])
{
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
{
din[i][0] = i+1;
din[i][1] = 0;
}
}
p = fftw_plan_dft_1d(N, din, out, FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
fftw_cleanup();
for(i=0;i
{
printf("%f,%f\n",din[i][0],din[i][1]);
}
printf("\n");
for(i=0;i
{
printf("%f,%f\n",out[i][0],out[i][1]);
}
{
}
右击项目,选择属性。
向C/C++选项下的常规-》附加包含目录中添加 fftw.h所在的目录。
添加lib,将fftw目录下生成的三个lib的文件名添加到 “链接器-》输入-》附加依赖项”。
将fftw所在的目录 添加到 “链接器-》常规-》附加库目录”。
编译、执行。若提示找不到某个dll,直接将其拷入项目文件夹中。成功!