打包一个FFT计算类——在C++中调用FFTW包和几点细节说明

这篇博客介绍了如何在C++中使用FFTW进行傅里叶变换,从一个简单的但效率较低的调用函数出发,深入分析FFTW的工作流程,并提出一个可复用的FFT计算器类的实现,旨在提高计算效率,适用于实时计算和多组相同参数的FFT计算。

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

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, "libfftw3-3.lib") // double版本

备注:这里我们用的是double版本;FFTW包中对应的有三个版本,如图所示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值