FFTW使用指南

2017-05-15  本文已影响0人  逃课的人工智能

FFTW使用指南

编译说明

  • 引入fftw3.h头文件
  • 在Unix系统中需要加上"-lfftw3 -lm"编译选项。
  • 需要连接fftw3库文件。

复数的一维傅里叶变换

fftw_plan fftw_plan_dft_1d(int n, fftw_complex *in,
                             fftw_complex *out, int sign, 
                                          unsigned flags);

参数说明:n为需要进行傅里叶变换的数据个数,in指向输入数据,out指向输出数据,sign(+1:逆傅里叶变换,-1:正傅里叶变换),flags只有两个值,FFTW_MEASURE:FFTW库花费一定的时间帮你设计最优计算时间的fftw_plan,如果程序对时间的消耗不是很敏感,可以设置次选项;FFTW_ESTIMATE:FFTW不进行任何的测试,直接创建fftw_plan,这个plan可能不是最优的,但是局部最优的。
NOTE:fftw_plan一次创建可以重复使用。

void fftw_execute(const fftw_plan plan)
fftw_malloc()
fftw_free()

不能使用

free()
delete()

NOTE: FFTW的傅里叶变换未进行归一化,对一组数据进行傅里叶变换后,再对其进行逆变换前需要将数据除以n进行归一化。

需要在头文件中包含

#include <complex.h>
#include <fftw3.h>

如果没有包含上述头文件,则FFTW将采用默认支持的复数类型。

FFTW通过编译选项与前缀控制单双精度。

单精度 前缀 "-fftwf" 编译选项 "-lfftw3f"
双精度 前缀 "-fftwl" 编译选项 "-lfftw3l"

复数的多维离散傅里叶变换

二维DFT变换:

fftw_plan fftw_plan_dft_2d(int n0, int n1, fftw_complex *in, 
                           fftw_complex *out, int sign, unsigned flags);

表示对n0*n1的矩阵进行DFT,先对每一行进行DFT,然后对每一列进行DFT,这就是所谓的二维DFT。

三维维DFT变换:

fftw_plan fftw_plan_dft_3d(int n0, int n1, fftw_complex *in, 
                           fftw_complex *out, int sign, unsigned flags);
上一篇 下一篇

猜你喜欢

热点阅读