gpt4 book ai didi

c - 将 fftw3 与 fftw 复杂类型一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:50 26 4
gpt4 key购买 nike

我正在使用 MATLAB 编码器生成处理复数的代码。 MATLAB 生成的复杂类型的默认 typedef 是:

typedef double real_T;//real number
typedef struct {
real_T re;
real_T im;
} creal_T;//complex number

现在,我想使用 fftw3 对数据执行 fft,问题是在 fftw3 中,复杂类型定义为:

typedef double fftw_complex[2];

来自“从 fftw 版本 2 升级”部分的 fftw3 文档:

The main difference in data types is that fftw_complex in FFTW 2 was defined as a struct with macros c_re and c_im for accessing the real/imaginary parts. (This is binary compatible with FFTW 3 on any machine except perhaps for some older Crays in single precision.) The equivalent macros for FFTW 3 are:

 #define c_re(c) ((c)[0])
#define c_im(c) ((c)[1])

我是否遗漏了一些东西,或者是否有一种方法可以安全地将 creal_T 类型转换为相应的 fftw3 而无需实际逐个元素地复制数据?

最佳答案

MATLAB Coder使用的复数格式和你在FFTW中显示的是同一种格式,通常称为interleaved complex。它们是二进制兼容的。因此,您应该能够执行指针或重新解释转换以在不复制数据的情况下在它们之间进行转换。

诚然,MATLAB 在 R2018a 之前一直使用单独的(也称为拆分)复合体。但是,您并未在此处与 MATLAB 复杂类型进行交互。您正在使用 MATLAB Coder 生成的复数类型。

从 R2017b 开始,MATLAB Coder 可以从为您调用 FFTW 的 MATLAB FFT 函数生成代码:

https://www.mathworks.com/help/coder/ug/speed-up-fast-fourier-transforms-in-generated-standalone-code-by-using-fftw-library-calls.html

这将允许您在 MATLAB 中编写 fft(x),并让 MATLAB Coder 自动为您生成所有 FFTW 代码。

关于c - 将 fftw3 与 fftw 复杂类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50336173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com