1. 引言
傅里叶变换是数字信号处理和数字图像处理中的常用算法。FFTW是一个非常优秀的面向C/C++语言的开源一维/多维离散傅里叶变换工具包,由MIT 的 Matteo Frigo and Steven G. Johnson 开发,关于其下载地址详见 http://www.fftw.org/
目前的最新版本是3.3.8;Windows用户可以直接下载3.3.5的官方编译版本。
但是严格来说,FFTW的使用是面向C设计的,浏览了一下国内很多博客页对其用法介绍都是基于单次使用的,但在实际的使用中我们可能需要处理很多同样参数的FFT计算,譬如,对麦克风接收的声音信号实时计算频谱信号。本文开始从一个不怎么好的函数调用,进一步分析FFTW的工作细节,最后给出一个C++中可复用的例子抛砖引玉,如果读者能有更好的实现方式,欢迎留言讨论。
2.从一个不太友好的调用函数开头
首先声明,这个函数是绝对没有问题且可用的。以下是一个朋友刚看了一些博客教程以后写的一个计算信号的幅频响应的(PSD)的函数,如果对傅里叶变换和FFTW一无所知,在看了一些教程后,是非常有可能写出这样的函数的。
以3.3版本为例,首先需要把fft编译出来的dll文件和lib文件添加到工作目录
#include "fftw3.h"
#pragma comment(lib,