一、FFTW是什么?

FFTW(The Fastest Fourier Transform in the West )是一个用于计算离散傅里叶变换的软件库,由麻省理工学院的Mattteo Frigo和Steven G.Johnson开发的。FFTW的名字意思是西方最快的傅里叶变换。它可以在O(nlogn)时间内计算任意大小和维数的实数和复数值数组的变换。[1]

二、如何配置?

我的配置方法是:在Ubuntu系统下,使用CMake工具,在VSCODE中完成程序编写和测试。

2.1 下载和解压

官网-下载-解压
FFTW官网地址: 点击这里。在系统中解压:

2.2 用CMake编译和安装FFTW源程序

进入解压后的目录,使用命令cmake .后,设置合适的权限并安装:sudo make install,这句话的意思就是编译,并且将头文件和编译后动态库等配置文件放在指定的目录里,其中就包含我们本次使用cmake配置相当重要的*.cmake文件。没有意外的话,你应该能够看到以下打印,它详细地展示了FFTW如何存放在我们的计算机中。

这里可以FFTW配置所需要:

  • 动态库路径位于:/usr/local/lib
  • 头文件放在:/usr/local/include
  • *.cmake文件(用于CMake自动化配置)在:/usr/local/lib/cmake/fftw3/

2.3 VSCODE进行配置

配置之前,需要查看一下FFTW3Config.cmake:

# defined since 2.8.3
if (CMAKE_VERSION VERSION_LESS 2.8.3)get_filename_component (CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
endif ()# Allows loading FFTW3 settings from another project
set (FFTW3_CONFIG_FILE "${CMAKE_CURRENT_LIST_FILE}")set (FFTW3_LIBRARIES fftw3)
set (FFTW3_LIBRARY_DIRS /usr/local/lib)
set (FFTW3_INCLUDE_DIRS /usr/local/include)include ("${CMAKE_CURRENT_LIST_DIR}/FFTW3LibraryDepends.cmake")if (CMAKE_VERSION VERSION_LESS 2.8.3)set (CMAKE_CURRENT_LIST_DIR)
endif ()

前面几节我们已经知道,set命令用于设置变量名。这里就用到了FFTW就用了三个变量:FFTW3_LIBRARIES FFTW3_LIBRARY_DIRSFFTW3_INCLUDE_DIRS。使用find_package方法就可以完成配置了。

cmake_minimum_required(VERSION 3.16.3)
find_package(FFTW3)
add_executable(Demo main.cpp)
if(FFTW3_FOUND)include_directories(${FFTW3_INCLUDE_DIRS})link_directories(${FFTW3_LIBRARY_DIRS})target_link_libraries(Demo fftw3)#link_libraries(libfftw3.so)
else(FFTW3_FOUND)message(FATAL_ERROR "FFTW3 library not found")
endif(FFTW3_FOUND)

编译过程中提示一个warning

CMake Warning (dev) in CMakeLists.txt:No project() command is present.  The top-level CMakeLists.txt file mustcontain a literal, direct call to the project() command.  Add a line ofcode such asproject(ProjectName)

加上就没有任何问题了。

project(Demo)
cmake_minimum_required(VERSION 3.16.3)
find_package(FFTW3)
add_executable(Demo main.cpp)
if(FFTW3_FOUND)include_directories(${FFTW3_INCLUDE_DIRS})link_directories(${FFTW3_LIBRARY_DIRS})target_link_libraries(Demo fftw3)#link_libraries(libfftw3.so)
else(FFTW3_FOUND)message(FATAL_ERROR "FFTW3 library not found")
endif(FFTW3_FOUND)

2.4 编写程序并测试

#include <iostream>
#include <cmath>
#include <complex>
#include <fstream>
#include <fftw3.h>using namespace std;
const int N=100;typedef double arr[2];int main()
{ofstream of1("/home/junwu/Desktop/FFTWTest/in.txt");ofstream of2("/home/junwu/Desktop/FFTWTest/out.txt");of1.precision(6);of2.precision(6);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);for(int i=0;i<N;i++){//of1<<sin(i)+sin(10*i)+sin(100*i)<<","<<0.0<<endl;in[i][0]=sin(i)+sin(10*i)+sin(100*i);in[i][1]=0;}p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);fftw_execute(p); /* repeat as needed */for(int i=0;i<N;i++){of1<<in[i][0]<<","<<in[i][1]<<endl;of2<<out[i][0]<<","<<out[i][1]<<endl;}fftw_destroy_plan(p);fftw_free(in); fftw_free(out);
}

小结:如果一个三方库有良好定义的cmake,调用过程就相当简单。只需要根据*.CMake文件内容链接头文件、库即可。

MESSAGE(消息类型 "xxxxxxx ");
可以是FATAL_ERROR,或者缺省,仅打印。

[1] https://en.wikipedia.org/wiki/FFTW

(六)CMake与FFTW相关推荐

  1. cmake(六)Cmake添加工程子目录

    重点: 'cmake3' 和 'make' 命令'输出'的'深刻解读'备注: 当前阶段暂时不使用'IDE'工具,先'熟悉各指令' 一  ADD_SUBDIRECTORY语法 应用场景: 一般情况下,我 ...

  2. Android JNI(二)——实战JNI入门之Hello World

    上一篇我们讲解了ndk以及jni基础,接下来以实战方式讲解几种常见的jni调用方式,带你走进jni世界. 大纲 今天会详细讲解几种jni的实现方式,实战NDK实现 "hello world& ...

  3. ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV)

    ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV) 我们将使用最新版: 最新版ffmpeg ffmpeg3.3  新版Android studio Android stud ...

  4. 从零开始自制实现WebServer(十六)---- 学习新工具CMake自动编写MakeFile 分门别类整理源文件心情愉悦

    文章目录 全流程实现博客链接 前引 (十六)---- 学习新工具CMake自动编写MakeFile 小改小动项目接近尾声 1.学习新工具 cmake / shell脚本 需要耐心与时间 2.分门别类整 ...

  5. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

  6. cmake之系统头文件(六)

    简介 CMake 可以编译源代码.制作程序库.产生适配器(wrapper).还可以用任意的顺序建构执行档.CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-p ...

  7. cmake使用教程(实操版)(六)

    一.复杂的例子:模块的使用和自定义模块 本节着重介绍系统预定义的Find模块的使用以及自己编写Find模块,系统中提供了其他各种模块,一般情况需要使用INCLUDE指令显示的调用,FIND_PACKA ...

  8. CMake(六):使用子目录

    对于简单的项目,将所有内容保存在一个目录中是可以的,但是大多数实际项目倾向于将它们的文件分割到多个目录中.通常可以找到不同的文件类型或分组在各自的目录下的独立模块,或者将属于逻辑功能组的文件放在项目目 ...

  9. cmake使用教程(十一)-使用cpack打包源码并编写自动化脚本上传到仓库

    [cmake系列使用教程] cmake使用教程(一)-起步 cmake使用教程(二)-添加库 cmake使用教程(三)-安装.测试.系统自检 cmake使用教程(四)-文件生成器 cmake使用教程( ...

最新文章

  1. iscsi target 配置(服务端安装)--一
  2. EdgeGallery — MEP — 安装部署
  3. linux ssh认证(公钥机)配置
  4. WINCE对USB HOST供电的控制
  5. python中os.path.isdir()和os.path.isfile()的正确用法
  6. go gin路由分组route group
  7. 前端优化-vue-cli4安装webpack-bundle-analyzer分析包文件
  8. 三个变量中怎么找出中间值_scratch图形化编程基础练习-变量交换
  9. Centos7下yum安装MySQL 5.7
  10. 用C语言实现猜单词的小游戏
  11. [每日更新-MySQL基础]-1.认识MySQL
  12. 哈希加密之高级加密自定义Key的用法(Python3.X)
  13. python二级考试操作题6答案_python二级考试试题6
  14. 日行一善的100种方式
  15. GitHub上的AutoML
  16. 陈伟星“VVShare打车链”,打造区块链经济共享平台
  17. IPv4/IPv6、DHCP、网关、路由
  18. 学会这招,妈妈再也不担心我的排名上不去了
  19. ps抠图——抠出自己想要的素材(钢笔工具的使用)
  20. php使用redis在windows下配置方法

热门文章

  1. scp指令,进行服务器之间数据传输
  2. 儿知错父之过下一句_第034章 子不教,父之过
  3. swust oj 996 打印杨辉三角形
  4. 查询分数最高的学生姓名和课程名
  5. 计算机c盘哪些是系统文件格式,c盘哪些文件可以删除
  6. 识别计算机硬件实训,计算机硬件及组装实训报告工作报告_1
  7. 新开餐饮店如何市场定位,都应该注意些什么?
  8. Linux中学教程(一)
  9. 常用邮箱POP3 STMP服务器与端口号设置:
  10. 现有的几个Unity热更新方案该如何选择,各自的优缺点是什么?