FFTW库在Windows中的安装和使用

本文详细介绍了FFTW库在Windows环境下的安装步骤,包括预编译、配置VisualStudio项目,以及一个C++编码测试示例,展示了如何在VS中使用FFTW进行一维快速傅里叶变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. FFTW库的介绍

FFTW库是用于一维或多维快速傅里叶变换(FFT)的C函数库。


2. FFTW库在Windows中的安装和使用

2.1 下载FFTW 3.3.5版本

Windows 64位平台下载:FFTW Installation on Windows


2.2 预编译

将2.1中下载的压缩包解压;

打开VS的"x64 Native Tools Command Prompt for VS 2022"工具;

用该工具进入到解压的文件夹下,依次运行如下命令:

lib /machine:x64 /def:libfftw3f-3.def
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3l-3.def

如下图所示:


2.3 配置VS项目

打开Visual Studio,创建项目;

通过上方项目属性,打开项目的属性页

1. 在配置属性C/C++常规中的附加包含目录加入解压的FFTW文件夹的路径。(本质是将头文件fftw3.h的路径加入项目);

2. 在配置属性链接器常规中的附加库目录加入FFTW文件夹的路径。(本质是将lib库的路径加入项目);

3. 在配置属性链接器输入中的附加依赖项中追加FFTW文件夹中如下lib库文件的名字。

4. 在VS中右击项目,打开创建的VS项目文件夹的路径,将FFTW文件夹中如下的动态库文件直接拷贝到VS项目文件夹中。

FFTW文件夹中如下这三个动态库文件,

 拷贝至如下VS项目文件夹中:


3. 编码测试

代码如下:

#include "fftw3.h"  
#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

int main() {

	double array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	double* out;
	double* err;
	int i, size = 10;

	fftw_complex* out_cpx;

	fftw_plan fft;
	fftw_plan ifft;
	out_cpx = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * size);
	out = (double*)malloc(size * sizeof(double));
	if (out == NULL) {
		exit(1);
	}
	err = (double*)malloc(size * sizeof(double));
	if (err == NULL) {
		exit(1);
	}

	fft = fftw_plan_dft_r2c_1d(size, array, out_cpx, FFTW_ESTIMATE);  //Setup fftw plan for fft
	ifft = fftw_plan_dft_c2r_1d(size, out_cpx, out, FFTW_ESTIMATE);   //Setup fftw plan for ifft

	fftw_execute(fft);
	fftw_execute(ifft);

	for (i = 0; i < size; i++) {
		err[i] = (array[i] - out[i]);
		printf("%f\t%f\n", (array[i]), out[i] / size);//需要做归一化处理
	}

	fftw_destroy_plan(fft);
	fftw_destroy_plan(ifft);
	fftw_free(out_cpx);
	free(err);
	free(out);

	system("pause");
	return 0;
}

运行结果:

成功。

03-16
### FFTW 的用途与文档 FFTW 是一个用于计算离散傅里叶变换(DFT)的开源 C/C++ 数学,广泛应用于科学计算、信号处理等领域。它支持一维或多维实数复数数据类型的快速傅里叶变换,并以其高效性灵活性著称[^4]。 以下是关于 FFTW 的一些关键特性及其使用方法: #### 1. **核心功能** FFTW 提供了多种接口以适应不同的编程需求,包括简单的计划函数以及更复杂的自定义选项。通过这些接口,开发者能够优化性能并针对特定硬件调整算法参数[^5]。 ```c #include <fftw3.h> int main() { 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); /* 创建FFT计划 */ p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); /* 执行FFT */ fftw_execute(p); /* 清理资源 */ fftw_destroy_plan(p); fftw_free(in); fftw_free(out); return 0; } ``` 上述代码展示了如何创建一个基本的一维 DFT 计划并执行之。`fftw_plan_dft_1d` 函数允许指定输入数组长度 `N` 方向 (`FFTW_FORWARD` 或 `FFTW_BACKWARD`),而 `FFTW_ESTIMATE` 则是一种初始化策略,适合于一次性运行的情况[^6]。 #### 2. **多线程支持** 为了提高大规模数据集上的效率,FFTW 支持多线程操作。这可以通过链接额外的文件实现,例如 `-lfftw3_threads -lpthread` 编译标志[^7]。 #### 3. **跨平台兼容性** 尽管主要设计为 Linux 原生工具链的一部分,但由于其模块化架构,FFTW 可轻松移植至其他操作系统上,比如 Windows macOS。对于像 OpenHarmony 这样的新兴生态体系而言,可能需要先完成基础环境配置再引入该第三方依赖项[^8]。 #### 文档参考资料 官方提供了详尽的手册技术指南,覆盖安装流程、API 描述乃至高级调优技巧等内容。用户可以从项目主页或者 Git 存储下载最新版本及相关资料[^9]。 ---
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的马师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值