Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
傅里叶逆变换FFT3W 我用C++函数求逆傅立叶变换。< /P> int inYSize = 170; int inXSize = 2280; float* outData = new float[inYSize*inXSize]; fftwf_plan mReverse = fftwf_plan_dft_c2r_2d(inYSize, inXSize,(fftwf_complex*)temp, outdata, FFTW_ESTIMATE); fftwf_execute(mReverse);_C++_Fft_Fftw_Ifft - Fatal编程技术网

傅里叶逆变换FFT3W 我用C++函数求逆傅立叶变换。< /P> int inYSize = 170; int inXSize = 2280; float* outData = new float[inYSize*inXSize]; fftwf_plan mReverse = fftwf_plan_dft_c2r_2d(inYSize, inXSize,(fftwf_complex*)temp, outdata, FFTW_ESTIMATE); fftwf_execute(mReverse);

傅里叶逆变换FFT3W 我用C++函数求逆傅立叶变换。< /P> int inYSize = 170; int inXSize = 2280; float* outData = new float[inYSize*inXSize]; fftwf_plan mReverse = fftwf_plan_dft_c2r_2d(inYSize, inXSize,(fftwf_complex*)temp, outdata, FFTW_ESTIMATE); fftwf_execute(mReverse);,c++,fft,fftw,ifft,C++,Fft,Fftw,Ifft,我的输入是带有复数的2D数组临时值。所有元素的实值为1,虚值为0 所以我期望这样一个数组的InverseFFT应该是具有实值的2D数组。输出数组的峰值应为0,0,其余所有值均为0。但我在输出数组中得到了所有不同的值,即使在使用数组的总大小进行规范化之后也是如此。原因可能是什么?有了这些小信息,很难说。我所能想象的是,由于窗口选择,会出现光谱泄漏(有关泄漏的详细信息,请参阅) 您可以尝试使用另一个窗口函数来减少泄漏或重新定义窗口大小。FFTW在涉及多维DFT和复到实变换时不是那么容易处理的 int

我的输入是带有复数的2D数组临时值。所有元素的实值为1,虚值为0


所以我期望这样一个数组的
InverseFFT
应该是具有实值的2D数组。输出数组的峰值应为0,0,其余所有值均为0。但我在输出数组中得到了所有不同的值,即使在使用数组的总大小进行规范化之后也是如此。原因可能是什么?

有了这些小信息,很难说。我所能想象的是,由于窗口选择,会出现光谱泄漏(有关泄漏的详细信息,请参阅)


您可以尝试使用另一个窗口函数来减少泄漏或重新定义窗口大小。

FFTW在涉及多维DFT和复到实变换时不是那么容易处理的

int inYSize = 170; int inXSize = 2280;

float* outData = new float[inYSize*inXSize];
fftwf_plan mReverse = fftwf_plan_dft_c2r_2d(inYSize, inXSize,(fftwf_complex*)temp, outdata,  
FFTW_ESTIMATE);
fftwf_execute(mReverse);
  • 当对MxN行主数组进行C2R变换时,由于结果的对称性,第二维度被切成两半:
    outData
    比需要的大两倍,但这并不是问题的原因(也不是你在做C2R而不是R2C)。 有关这一棘手问题的更多信息:

    “好人建议”:只使用C2C“更简单”的方式做事,如果你不知道如何处理结果,则取输出的模数,但不要在n-D复杂到真实的转换上浪费时间

  • 由于精度有限,由于DFT的数值实现,由于非从属位,即使值非常小,也可以得到非0的值。这是FFT算法的正常行为

  • 除了仔细阅读用户手册()之外,即使这真的很痛苦(我花了几天时间在这个库周围,只是为了让3D转换工作,只是为了了解数据是如何缩放的)

    • 在使用C2C 2D和C2R 2D之前,您应该尝试使用C2C 1D转换,以确保您对自己正在做的事情有一定的了解
    • 平面常数的逆FFT是什么?在“频率平面”的每一个单元中都填充一个?您正在寻找定义+inf或-inf的新方法吗?在这种情况下,我宁愿从更简单的0^除法开始。正如您所描述的,直接FFT应该是a,尖峰正确缩放为1,非常确定反向不是

    请毫不犹豫地为您的问题添加精确性,祝您好运FFTW

    有价值的评论,但我不同意您的+/-inf观点:如果是DTFT而不是DFT,我们有连续频率和离散时间,我们会得到inf。但由于DFT在两个轴上都是离散的,我们将最大限度地得到数组的大小,而不是+FN。无论如何,它更多地是DSP,我基本上是问C++相关的帮助,你的前两点将帮助我。谢谢你:)。您可能还想检查您使用的数据类型是否能够处理输出,即使10^+38看起来还可以,Double可能会给出不同的行为(?)如果您认为我的答案对您有所帮助,接受它会非常好:)