简介
FFTW (Fastest Fourier Transform in the West) 是一个流行的快速傅里叶变换(FFT)的C语言库。FFTW3 是其第三个主要版本,提供了高效的一维和多维DFT(离散傅里叶变换)实现。
安装
Linux 系统安装
bash
sudo apt-get install fftw3 fftw3-dev
从源码编译
-
下载源码: FFTW Download Page
-
编译安装:
bash
./configure
make
sudo make install
基本使用
包含头文件
c
#include <fftw3.h>
链接库
编译时需要链接FFTW3库:
bash
gcc your_program.c -o your_program -lfftw3 -lm
对于多线程版本:
bash
gcc your_program.c -o your_program -lfftw3_threads -lfftw3 -lm -lpthread
核心概念
变换类型
FFTW 支持多种变换类型:
-
复数到复数 DFT:
fftw_plan_dft_1d/2d/3d
-
实数到复数 DFT:
fftw_plan_dft_r2c_1d/2d/3d
-
复数到实数 (逆) DFT:
fftw_plan_dft_c2r_1d/2d/3d
-
实数到实数变换 (DCT, DST 等)
计划标志
创建计划时可用的标志:
-
FFTW_ESTIMATE
:快速但不精确的估计 -
FFTW_MEASURE
:通过实际测量寻找最优方法 -
FFTW_PATIENT
:更彻底的优化 -
FFTW_EXHAUSTIVE
:最彻底的优化
计划(Plans)
FFTW使用"计划"来优化FFT计算。计划包含了如何计算特定大小和类型的FFT的信息。
基本示例
一维复数FFT
#include <fftw3.h>
int main() {
int N = 1024;
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);
// 创建计划
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
// 填充输入数据(此处省略)
// ...
// 执行变换
fftw_execute(p);
// 清理
fftw_destroy_plan(p)