简介
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
核心概念
计划(Plans)
FFTW使用"计划"来优化FFT计算。计划包含了如何计算特定大小和类型的FFT的信息。
实数与复数变换
-
fftw_plan_dft
: 复数到复数变换 -
fftw_plan_dft_r2c
: 实数到复数变换 -
fftw_plan_dft_c2r
: 复数到实数变换
基本示例
一维复数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);
fftw_free(in);
fftw_free(out);
return 0;
}
一维实数FFT
#include <fftw3.h>
int main() {
int N = 1024;
double *in;
fftw_complex *out;
fftw_plan p;
// 分配内存
in = (double*) fftw_malloc(sizeof(double) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * (N/2 +