快速入门#
以下代码是 1d_c2c_single_example.cpp
的简化版本,可从 NVPLSamples 获取,展示了如何使用 NVPL FFT。
#include <iostream>
#include <vector>
#include <complex>
#include <nvpl_fftw.h>
int main(int argc, char *argv[]) {
const int n = 4;
const int howmany = 2;
std::vector<std::complex<float>> in(howmany * n);
std::vector<std::complex<float>> out(howmany * n);
fftwf_complex *in_data = reinterpret_cast<fftwf_complex*>(in.data() );
fftwf_complex *out_data = reinterpret_cast<fftwf_complex*>(out.data());
fftwf_plan plan = fftwf_plan_dft_1d(n, in_data, out_data, FFTW_FORWARD, FFTW_ESTIMATE);
int i = 0;
for (auto& v: in) {
v = {(float)i, -(float)i};
i++;
}
for(int b = 0; b < howmany; b++) {
fftwf_execute_dft(plan, in_data+b*n, out_data+b*n);
}
for (const auto& v: out) {
std::cout << v << "\n";
}
fftwf_destroy_plan(plan);
fftwf_cleanup();
return 0;
}
此示例计算大小为 n
的一维正向 FFT 的 howmany
批次。它执行以下操作:
分配输入和输出数据
创建具有指定大小
n
和变换方向FFTW_FORWARD
的一维 FFTW 计划初始化输入数据。
执行计划。一次一批。
输出结果。
销毁计划。
然后可以编译和运行该示例,如下所示
$ g++ app.cpp -I/path/to/nvpl_fft/include -L/path/to/nvpl_fft/lib -lnvpl_fftw -o app
$ ./app
(6,-6)
(0,4)
(-2,2)
(-4,0)
(22,-22)
(0,4)
(-2,2)
(-4,0)
注意
从 NVPL FFT 0.4.0 开始,NVPL FFT 提供 nvpl_fftw.h
的副本,重命名为 fftw3.h
,位于新的标头路径下:/path/to/nvpl_fft/include/nvpl_fftw
。此路径已添加到 CMake 构建文件中,因此使用 CMake 构建时无需进行任何更改。如果不用 CMake 构建,则可以通过更新包含路径或通过 CPATH (即 CPATH=<prefix>/include/nvpl_fftw:$CPATH
)使新标头路径可见
提示
对于动态链接到 FFTW3 库的应用程序,可以通过使用 LD_PRELOAD=/path/to/nvpl_fft/lib/libnvpl_fftw.so
运行应用程序来测试 NVPL FFT。