fftw与c中的complex.h接口

发布于 2024-11-08 12:13:47 字数 553 浏览 6 评论 0原文

我正在使用此代码创建一个具有复杂数据类型的二维数组(来自c中的complex.h)。然后我想“就地”找到该数组的 fft。然而,它给出了分段错误,我担心这是由于指针转换不当造成的。我们如何在 fftw 中使用复杂数据类型?

//a is a 2d array of size blockSize*NO_INPUTS

complex float* a=(complex float*)malloc(sizeof(complex float)*NO_INPUTS*blockSize);

//****** Put data in a*******//
//blah//
//blah//

//a has data now//

fftw_plan p;
p=fftw_plan_dft_2d(blockSize,NO_INPUTS,(fftw_complex*)a,(fftw_complex*)a,FFTW_FORWARD,FFTW_ESTIMATE);

fftw_execute(p);

fftw_destroy_plan(p);

请注意,我不想使用 fftw_complex 或 fftw_malloc。 谢谢。

I am using this code to create a 2D array having data type complex (from complex.h in c). Then I want to find the fft of that array 'in place'. However it is giving segmentation fault, which I fear is due to improper casting of the pointer. How do we use complex data type for a fftw?

//a is a 2d array of size blockSize*NO_INPUTS

complex float* a=(complex float*)malloc(sizeof(complex float)*NO_INPUTS*blockSize);

//****** Put data in a*******//
//blah//
//blah//

//a has data now//

fftw_plan p;
p=fftw_plan_dft_2d(blockSize,NO_INPUTS,(fftw_complex*)a,(fftw_complex*)a,FFTW_FORWARD,FFTW_ESTIMATE);

fftw_execute(p);

fftw_destroy_plan(p);

Please note that I do not want to use fftw_complex or fftw_malloc.
Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

池木 2024-11-15 12:13:47

fftw_complex 相当于complex double,您使用的是complex float。这可能是段错误的根源。

尝试在 fftw3.h 之前包含 complex.h,您将不需要进行任何强制转换。

http://www.fftw.org/fftw3_doc/Complex-numbers.html

fftw_complex is equivalent to complex double, you are using complex float. That's probably the source of segfault.

Try including complex.h before fftw3.h you won't need to do any casts.

http://www.fftw.org/fftw3_doc/Complex-numbers.html

醉态萌生 2024-11-15 12:13:47

FFTW 默认使用双精度浮点数。最简单的修复方法是将所有 float 实例更改为 double。但是,如果出于内存或其他原因您想继续使用复杂浮点,那么您应该使用单精度 fftw,如下所述 此处。您应该将所有 fftw 函数中的小写 fftw 更改为 fftwf。例如,fftw_plan 变为 fftwf_plan。编译时,您应该链接到 fftw3f 而不是 fftw3

FFTW defaults to using double precision floats by default. The simplest fix is just to change all instances of float to double. If, however, you want to continue using complex float for memory or other reasons then you should use single precision fftw as outlined here. You should change lowercase fftw in all fftw function and type names to fftwf. For example fftw_plan becomes fftwf_plan. On compilation, you should link to fftw3f instead of fftw3.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文