FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库目录一 FFTW 简介 官网翻译 二 软件特点 官网翻译 三 资源信息四 VS2015 下的 FFTW 库使用 首先是 x86 版本 然后是 x64 版本 五 Qt 版本下的移植官网网址 http ww

大家好,欢迎来到IT知识分享网。

目录

一、FFTW简介(官网翻译)

二、软件特点(官网翻译)

三、资源信息

四、VS2015下的FFTW库使用

(首先是x86版本)

(然后是x64版本)

五、Qt版本下的移植


官网网址:FFTW Home Page

这个已经能正常使用,不会继续研究了,这个FFTW只给预编译版本,没法学习源代码。且商用还需要花钱购买许可。

如果需要我已经移植好的源码,见如下链接:

https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=1&ut_sk=1.AAhiIP37iQwDANlHHj81FWR6__52.Copy.detail.1.&forceFlush=1

一、FFTW简介(官网翻译)

FFTW(The Fastest Fourier Transform in the West)是一个计算一维或者多维DFT(the discrete Fourier transform)的c程序子库,支持任意输入长度,可以是实数或者复数数据。官方当前版本最新是3.3.8(截至2019年8月1日)。

作者是MIT的博士生Matteo Frigo(wiki:Matteo Frigo – Chessprogramming wiki)

和Steven G. Johnson(wiki:https://en.wikipedia.org/wiki/Steven_G._Johnson,个人主页:Professor Steven G. Johnson)。

FFTW——一个用纯c语言写的高效FFT算法库          FFTW——一个用纯c语言写的高效FFT算法库

软件的基准是:工作在各种平台上且效果优于其他典型的FFT软件,与vendor-tuned codes也有得一拼(可能是另一种FFT软件)且FFTW是可移植的,不需修改就能在其他架构上直接使用,而vendor-tuned codes不行。

二、软件特点(官网翻译)

PS:这个开源的软件没有开源源码,只有预编译版本的文件。也就是只能用,不能学习。且如果商用的话,还得花钱买许可。有点背离我使用它的初衷了,这里将VS2015下使用以及QT中使用的方法写出来,然后果断换一个有源码的库。

三、资源信息

访谈在b站:爱剪辑-FFTW作者访谈_哔哩哔哩_bilibili

下载页面:FFTW Download Page

四、VS2015下的FFTW库使用

这个fftw库在windows下的编译真的好复杂,老是出错。这里介绍一下成功在vs2015中编译x86和x64平台测试成功的经验,以及使用qt平台编译成功的经验

(首先是x86版本)

1.下载32位的预编译代码并解压该zip文件

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

2.使用vs2015的x86命令提示操作生成lib文件

lib文件有三种精度的,这里我们把它全部生成出来

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

3.拷贝3种精度的dll文件到C:\Windows\SysWOW64下

FFTW——一个用纯c语言写的高效FFT算法库

4.新建vs2015的c++工程

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

5.将解压并生成了lib文件的文件夹拷贝到工程目录下

FFTW——一个用纯c语言写的高效FFT算法库

6.导入头文件fftw3.h并新建测试代码FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

测试代码如下:

#pragma comment(lib, "D:\\qt4.8.0\\userfile\\cplusfile\\Project3\\fftw-3.3.5-dll32\\libfftw3-3.lib") #pragma comment(lib, "D:\\qt4.8.0\\userfile\\cplusfile\\Project3\\fftw-3.3.5-dll32\\libfftw3f-3.lib") #pragma comment(lib, "D:\\qt4.8.0\\userfile\\cplusfile\\Project3\\fftw-3.3.5-dll32\\libfftw3l-3.lib") #include <stdio.h> #include <stdlib.h> #include <fftw3.h> #define N 5 int main() { fftw_complex *in, *out; fftw_plan p; in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); int n; for (n = 0; n < N; n++) { in[n][0] = 1; in[n][1] = 2; } fftw_execute(p); fftw_destroy_plan(p); for (n = 0; n < N; n++) { printf("%3.2lf+%3.2lfi ", out[n][0], out[n][1]); } printf("\n"); fftw_free(in); fftw_free(out); system("pause"); return 0; } 

7.进行lib文件的路径设置

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

8.当你自己使用时,需要改lib文件的路径

FFTW——一个用纯c语言写的高效FFT算法库

9.最终运行成功的标志

FFTW——一个用纯c语言写的高效FFT算法库

(然后是x64版本)

区别1:下载并使用64位的zip文件。

区别2:使用vs2015的x64命令提示符工具生成lib文件

FFTW——一个用纯c语言写的高效FFT算法库

区别3:vs2015的工程需要使用x64平台,然后修改lib文件路径

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

其他的同x86平台下的操作。

五、Qt版本下的移植

我使用的qt版本如下:

FFTW——一个用纯c语言写的高效FFT算法库

昨天加今天上午一直搞不好,结果自从使用vs2015成功移植32位的fftw库后,下午非常快地成功了。前期对于下载的x64zip文件的处理都是相同的,主要是需要在qt中添加dll和lib文件。

1.下载x64fftw的zip文件并解压,然后与前面使用vs2015添加x64的fftw库一样生成lib文件

生成的指令需要指定位x64的机器,如下:

FFTW——一个用纯c语言写的高效FFT算法库

2.新建一个qt的纯c++项目

需要注意的是,选择Mingw,而非msvc2015(我还没测试过)。

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

3.将下载解压以及生成了lib文件的的fftw库文件夹拷贝到工程目录下,并导入头文件fftw3.h

FFTW——一个用纯c语言写的高效FFT算法库

FFTW——一个用纯c语言写的高效FFT算法库

4.将dll文件拷贝到C:\Windows\System32

lib文件和dll文件都是需要的,如果不放在该目录下,也需要在pro中指示dll文件路径

FFTW——一个用纯c语言写的高效FFT算法库

或者在工程的debug目录下放dll文件

FFTW——一个用纯c语言写的高效FFT算法库

5.编写测试代码

#include <iostream> #include "fftw-3.3.5-dll64/fftw3.h" #include <stdlib.h> #include <stdio.h> #define N 5 using namespace std; int main() { fftw_complex *in, *out; fftw_plan p; in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); int n; for (n = 0; n < N; n++) { in[n][0] = 1; in[n][1] = 2; } fftw_execute(p); fftw_destroy_plan(p); for (n = 0; n < N; n++) { printf("%3.2lf+%3.2lfi ", out[n][0], out[n][1]); } printf("\n"); fftw_free(in); fftw_free(out); return 0; } 

6.在pro文件中添加lib库

FFTW——一个用纯c语言写的高效FFT算法库

7.运行的结果如下图说明成功

FFTW——一个用纯c语言写的高效FFT算法库

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130237.html

(0)
上一篇 2025-08-18 17:15
下一篇 2025-08-18 17:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信