C++ fftwf_execute_dft_c2r写入输入缓冲区

C++ fftwf_execute_dft_c2r写入输入缓冲区,c++,fftw,C++,Fftw,我有以下代码: auto-in=std::array(); in[0]=10000.0f; 自动输出=标准::数组(); 自动计划=fftwf_计划_dft_c2r_2d(10,10,重新解释转换(in.data())、out.data()、FFTW_估计| FFTW_未对齐); fftwf_execute_dft_c2r(计划、重新解释(in.data()、out.data()); 当我运行它时,我的数组中的被写入(特别是第一列被设置为10000.0)。这正常吗?是否可以避免写入数组中的?如

我有以下代码:

auto-in=std::array();
in[0]=10000.0f;
自动输出=标准::数组();
自动计划=fftwf_计划_dft_c2r_2d(10,10,重新解释转换(in.data())、out.data()、FFTW_估计| FFTW_未对齐);
fftwf_execute_dft_c2r(计划、重新解释(in.data()、out.data());
当我运行它时,我的
数组中的
被写入(特别是第一列被设置为10000.0)。这正常吗?是否可以避免写入
数组中的

如中所述,使用
c2r
变换时,输入数据将被覆盖

第二,逆变换(从复到实)具有以下副作用: 默认情况下,覆盖其输入数组。这两个都不是 不便对用户来说应该是一个严重的问题,但事实并非如此 重要的是要意识到它们

如上所述,
c2r
变换会破坏其输入数组,即使对于 不合适的变换。如有必要,可通过以下方法防止这种情况: 在标志中包括
FFTW\u PRESERVE\u输入
,不幸的是有些 在表演中牺牲。当前也不支持此标志 对于多维实DFT(下一节)

因此,即使使用了
FFTW\u PRESERVE\u INPUT
,在这种情况下也不起作用。从

FFTW\u PRESERVE\u INPUT
指定不能进行错位转换 更改其输入数组。这通常是默认值,除了
c2r
hc2r
(即复杂到真实)转换
FFTW\u DESTROY\u输入是默认值。在后一种情况下,通过
FFTW\u PRESERVE\u输入将尝试使用不破坏
以降低绩效为代价的投入;对于多维
然而,
c2r
变换不支持输入保留算法 已实施,如果需要,计划员将返回
NULL


因此,解决这个问题的简单方法是在将输入数组传递给计划函数之前复制一个输入数组。

请参阅
FFTW\u PRESERVE\u input
I See。不
FFTW_PRESERVE_INPUT
for 2d c2r:(但不能投票表决你的答案,因为这是一条评论。它确实帮助了我。请随意写你自己的答案,我太懒了,没法写一条,这就是我留下评论的原因。是的。我得出了相同的结论。