傅里叶变换应该是上大二的时候《信号与系统》课上学过,上研后在《数字信号处理》课上又学了一遍。当初一直在想傅里叶变换到底有什么用呢?什么时候能用上呢?时间如梭,没想到毕业四年后,一个小项目要用到傅里叶变换,喜大普奔啊,当初晦涩的概念、眼晕的公式,终于没白学。是的, 其实 任何知识都不是白学的,即使工作中一直用不到傅里叶变换,至少思维得到了锻炼,都是有益的。 在应用傅里叶变换过程中,可以按照公式自己编程实现,也可以使用已有的开源傅里叶变换函数库。经过查阅资料,本人选用fftw函数库来进行傅里叶变换,因为 fftw 官网上提到说该函数库性能非常出众,甚至可以和同类型的商业软件相竞争。fftw官网地址为: http://www.fftw.org/。
一、fftw下载
       由于本人是在windows平台开发,于是到下面链接:http://www.fftw.org/install/windows.html下载已编译版本。如下图所示,该图信息量很大,既有32/64两个版本的下载链接,同时还有生成lib文件命令。即32位系统命令为: lib /def:libfftw3-3.def,而64位系统为: lib /machine:x64 /def:libfftw3-3.def。
                           
       下载解压后,会发现只有dll和头文件,在没有lib文件时,使用fftw库时会比较繁琐。于是在应用fftw编程前还是动手先生成lib文件。方法很简单,首先打开VS命令提示工具。本人使用的开发工具为VS2005,如下图所示:
                                                         
打开后,cd到已下载的fftw文件目录,然后执行前面提到的lib生成命令,如下图所示:
                                   
命令执行完毕后,即可在当前目录内看到新生成的lib文件,我这边分别生成了double、float、long double三个版本,实际使用时可根据项目需要,选择相应精度的版本。生成的lib库文件如下图所示:
                                                             
二、简单编程实例
有了头文件、lib/dll文件,那就什么都有了。新建一个工程,马上用起来吧。下面为一个非常简单的编程实例,主要完成实数傅里叶变换,输入为正弦曲线,输出为傅里叶变换的幅度谱。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>#include "include/fftw3.h"
#pragma comment(lib, "libfftw3-3.lib") // double版本
// #pragma comment(lib, "libfftw3f-3.lib")// float版本
// #pragma comment(lib, "libfftw3l-3.lib")// long double版本#define PI 3.1415926int main()
{int len = 8;double *in = NULL;// 如果要使用float版本,需先引用float版本的lib库,然后在fftw后面加上f后缀即可.fftw_complex *out = NULL;// fftwf_complex --> 即为float版本fftw_plan p;in  = (double *)fftw_malloc(sizeof(double) * len);out = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * len);double dx = 1.0 / len;// 输入纯实数for (int i = 0; i < len; i++){in[i] = sin(2*PI * dx*i) + sin(4*PI * dx*i);printf("%.2f ", in[i]);}printf("\n\n");// 傅里叶变换p = fftw_plan_dft_r2c_1d(len, in, out, FFTW_ESTIMATE);fftw_execute(p);// 输出幅度谱for (int i = 0; i < len; i++){float len = sqrt(out[i][0]*out[i][0] + out[i][1]*out[i][1]);printf("%.2f ", len);}printf("\n");// 释放资源fftw_destroy_plan(p);fftw_free(in);fftw_free(out);system("pause");return 0;
}

运行结果如下图所示,从结果来看,在频率为1及2两个位置有幅度输出,这与输入的频率为1及2的两个叠加正弦波吻合,结果正确。(8月23日补充:由于实数DFT变换的输出序列具有共轭对称性,因此fftw_plan_dft_r2c_1d()函数返回的序列实际长度为len /2 + 1,因此上述代码在为out分配内存时仅需分配len / 2 + 1即可。)

windows下使用fftw进行傅里叶变换及其编程实例相关推荐

  1. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解

    linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...

  2. windows下一个,OracleServiceXXX和Oracle 关系实例

    其实,windows下的oracle,在oracle实例启动时,是全然依赖于 window服务中的OracleServiceXXX .这个XXX就是oracle的实例名(注意啊,不是数据库名称,而是实 ...

  3. linux c语言 信号,linux下基于C语言的信号编程实例

    搜索热词 本文实例讲述了linux下基于C语言的信号编程方法.分享给大家供大家参考.具体如下: #include #include #include #include #include void si ...

  4. Windows下使用C语言的UDP编程接收网络调试助手发送的数据

    代码 #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib" ...

  5. 总结下linux中一些入门级shell编程实例

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  6. 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

    文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...

  7. 不用U盘安卓Linux系统,不用U盘,不要光驱,不需分区,windows下安装noilinux双系统...

    信息学奥赛以前都是linux和windows系统并存,因为我们习惯了在windows下操作,所以所有的编程操作都在windows下面执行,但是今年我们湖南赛区已经在NOIP2017湖南赛区复赛操作系统 ...

  8. Java经典编程实例源码及视频专题汇总

    转:http://blog.itpub.net/28566218/viewspace-760945/ Java经典编程实例源码及视频专题汇总 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语 ...

  9. linux 和 Windows下FFTW库的安装

    我整理了FFTW在windows和linux下安装的过程,我自己也在这两个系统中安装成功了,还是遇到不少问题的,我接下来把网上搜到的资料和自己遇到的问题一一告诉大家,让大家少走弯路. windows ...

最新文章

  1. centons7网卡配置文件使用openvswitch bridge
  2. vscode 调试参数_如何通过vscode运行调试javascript代码
  3. Judy Beta 第三天
  4. java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...
  5. php 同步退出,Ucenter 的同步登录与同步退出
  6. Linux 中的 XEN 虚拟化技术(二)Xen 的安装和配置
  7. getElement四种方法返回的不同
  8. sap 归档(ARCHIVE)
  9. CTF之做题总结(五)
  10. 测试计算机性能的软件比较专业,测试电脑性能的软件都有哪些
  11. 计算机开机时10声响,电脑开机报警的声音有什么含义?详细教您认识报警声音
  12. win10下装黑苹果双系统_黑苹果macOS10.15.4单硬盘三系统安装教程
  13. html水平分割线虚线代码,CSS分割线虚线代码
  14. 为了找工作学习ssm
  15. MATLAB06:数字图像处理
  16. Java层Binder框架通信原理(转自Cloud Chou's Tech Blog)
  17. PS-把长方形图片改为正方形图片
  18. 信息安全密码学实验四:Diffie-Hellman密钥交换协议的设计与实现
  19. 用计算机计算圆的面积,周长直径换算器在线(圆的面积在线计算器)
  20. Lively Wallpaper 免费开源动画桌面壁纸,让您的桌面栩栩如生!

热门文章

  1. python单选按钮控件_Python Tkinter Radiobutton单选按钮
  2. BMS动力电池系统管理
  3. An 遮罩动画的制作
  4. 数据库SQL入门,这一篇就够了(全文内容两万字)
  5. 8086汇编 DEBUG命令详解
  6. 基于SSM的甜品店系统(含毕业论文)
  7. 读书笔记——《谁说菜鸟不会数据分析—Python篇》
  8. 超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)
  9. 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗 服务器互通攻略...
  10. 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗?不同服务器数据互通机制详解...