FFTW是一个可以进行可变长度一维或多维DFT的开源C程序库,是目前最快的FFT算法实现。

本文简述了在Windows平台上,如何在C++中调用FFTW,所使用的IDE为Visual Studio 2017。

FFTW的详细信息可在 http://www.fftw.org 中查看

获取FFTW

http://www.fftw.org/install/windows.html 中下载32位或64位版并解压

生成lib文件

打开VS自带的 “x86_x64 Cross Tools Command Prompt” ,cd到之前的解压文件夹

键入命令

lib /machine:x86 /def:libfftw3-3.def

如果是64位则键入命令

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

以上命令产生了lib文件libfftw3-3.lib,应不同精度要求也可对libfftw3f-3.def及libfftw3l-3.def文件使用相同命令来产生相应lib文件

在C++中调用FFTW

将下列三个文件粘贴到与cpp文件相同的目录下

  • fftw3.h
  • libfftw3-3.dll
  • libfftw3-3.lib

在cpp文件中加入代码

#include "fftw3.h"
#pragma comment(lib, "libfftw3-3.lib")

测试代码

#include <iostream>

#include "fftw3.h"
#pragma comment(lib, "libfftw3-3.lib") //实部与虚部
#define REAL 0
#define IMAG 1 using namespace std; int main() {
/*
*fftw_complex 是FFTW自定义的复数类
*引入<complex>则会使用STL的复数类
*/
fftw_complex x[5];
fftw_complex y[5]; for (int i = 0; i < 5; i++) {
x[i][REAL] = i;
x[i][IMAG] = 0;
} //定义plan,包含序列长度、输入序列、输出序列、变换方向、变换模式
fftw_plan plan = fftw_plan_dft_1d(5, x, y, FFTW_FORWARD, FFTW_ESTIMATE); //对于每个plan,应当"一次定义 多次使用",同一plan的运算速度极快
fftw_execute(plan); for (int i = 0; i < 5; i++) {
cout << y[i][REAL] << " " << y[i][IMAG] << endl;
} //销毁plan
fftw_destroy_plan(plan); cout << "\nPress Enter to exit..." << endl;
cin.get(); return 0;
}

输出结果

10  0
-2.5 3.44095
-2.5 0.812299
-2.5 -0.812299
-2.5 -3.44095 Press Enter to exit...

在C++中调用FFTW的更多相关文章

  1. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  2. Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数

    11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...

  3. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

  4. Salesforce Apex页面中调用远端网络服务

    本文介绍了Salesforce Apex页面中调用远端网络服务的实现过程. ### 注册远端网络服务 在使用Apex代码调用远端网络服务之前,首先需要在Salesforce中注册远端网络服务地址, 本 ...

  5. 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)

    之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...

  6. C#在winform中调用系统控制台输出

    在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...

  7. EC笔记,第二部分:9.不在构造、析构函数中调用虚函数

    9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...

  8. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

  9. 在.net中调用Delphi dll的Pchar转换

    Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...

随机推荐

  1. idea跳转到指定行列快捷键

    快捷键 Ctrl + G :

  2. kubernetes学习Service之headless和statefulSet结合

    一.首先说headless Service和普通Service的区别 headless不分配clusterIP headless service可以通过解析service的DNS,返回所有Pod的地址 ...

  3. Linux的DNS实现负载均衡及泛域名部署

    DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到 ...

  4. Linux命令——lsmod

    参考:8 LSMOD, RMMOD, MODPROBE, AND MODINFO COMMAND EXAMPLES IN LINUX Linux lsmod command 简介 lsmod显示(或“ ...

  5. [PAT] 目录

    题号  PAT Basic  PAT Advaced  PAT Top 1001 害死人不偿命的(3n+1)猜想     1002 写出这个数     1003 我要通过!     1004 成绩排名 ...

  6. Windows下Redis安装配置和使用注意事项

    Windows下Redis安装配置和使用注意事项 一:下载 下载地址: https://github.com/microsoftarchive/redis/releases 文件介绍: 本文以3.2. ...

  7. 201871010108-高文利《面向对象程序设计(java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  8. 【视频技术】FFMPEG应用(转)

    https://blog.csdn.net/kaikai136412162/article/details/80746961 https://blog.csdn.net/weixin_37897683 ...

  9. jenkins中 Slave使用Docker

    原因就不说了,网上的自动化测试Docker教程太不靠谱,还是学学官网吧. 目的: 在现在各种虚拟化的大条件下,还在建立N个节点机器或节点机器搞N个并发,是不是太不方便了. 如果一个机器搞N个并发,在自 ...

  10. 小学四则运算口算练习app---No.1

    因为对app不是很了解,对环境的配置也不是很舒心,今天主要配置了环境,了解了一些相关app的简单操作以及安卓stdiuo的使用!如下: 我自己连接的自己的手机(还是不要拿自己的手机做测试哦!模拟器虽然 ...