首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fftw3与fftw复合型的应用

fftw3与fftw复合型的应用
EN

Stack Overflow用户
提问于 2018-05-14 17:46:03
回答 2查看 601关注 0票数 0

我使用MATLAB编码器来生成处理复数的代码。MATLAB生成的复杂类型的默认类型为:

代码语言:javascript
复制
typedef double real_T;//real number
typedef struct {
  real_T re;
  real_T im;
} creal_T;//complex number

现在,我想使用fftw3对数据执行快速傅立叶变换,问题是在fftw3中,复杂类型被定义为:

代码语言:javascript
复制
typedef double fftw_complex[2];

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

数据类型的主要区别在于FFTW 2中的fftw_complex被定义为具有宏、c_re和c_im的结构,用于访问实/虚部分。(--这是在任何机器上与FFTW 3兼容的二进制文件,除了一些较老的Cray(单精度)。) FFTW 3的等效宏是: #定义c_re(c) ((c)) #定义c_im(c) ((c)1)

我是在这里遗漏了什么,还是有一种方法可以安全地将creal_T类型转换为相应的fftw3,而不需要逐个元素地复制数据元素呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-26 09:16:19

MATLAB编码器使用的复数格式和从FFTW显示的格式是相同的格式,通常称为交错复数。它们是二进制兼容的。因此,您应该能够在不复制数据的情况下执行指针或重新解释强制转换以在它们之间进行转换。

确实,MATLAB历史上在R2018a之前使用了分离(也称为拆分)复杂。但是,这里没有与MATLAB复杂类型进行交互。您正在使用MATLAB编码器生成的复杂类型。

从R2017b开始,MATLAB可以从MATLAB函数中生成代码,这些函数为您调用FFTW:

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自动为您生成所有FFTW代码。

票数 2
EN

Stack Overflow用户

发布于 2018-05-14 19:25:33

编辑:如果您正在处理MATLAB文件,请阅读此答案.如果您正在处理MATLAB,如OP所示,请阅读赖安·利文斯顿的回答

--

将FFTW与MATLAB的复杂表示一起使用的唯一正确方法是使用"Guru接口“,它支持所谓的”分割数组“。这是MATLAB使用的格式(实和虚组件是分开的数组)。这是一个指向文档页面的链接。

注意,从MATLAB R2018a开始,MATLAB以“正常”的方式存储复数,将实值和虚值交织在一起。因此,另一种方法是升级MATLAB。见MATLAB支持C MEX函数中的交织复杂API

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50336173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档