gpt4 book ai didi

c++ - 逆傅立叶变换FFT3W

转载 作者:行者123 更新时间:2023-12-02 10:08:52 26 4
gpt4 key购买 nike

我正在使用C++函数查找傅立叶逆变换。

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);

我的输入是带有复数的2D阵列温度。所有元素的实数值为1,虚数值为0。

因此,我期望这种数组的 InverseFFT应该是具有实际值的2D数组。输出数组的SPIKE值应为0,0,其余所有值均为0。但是,即使使用数组的总大小进行规范化后,我也会在输出数组中获得所有不同的值。可能是什么原因?

最佳答案

在多维DFT和复杂到实数转换方面,FFTW处理起来并不容易。

  • 在对MxN行主要数组进行C2R转换时,由于结果的对称性,第二维减少了一半:outData比所需的大两倍,但这不是问题的原因(不是情况,因为您正在执行C2R,而不是R2C)。
    有关此曲折问题的更多信息:http://www.fftw.org/doc/One_002dDimensional-DFTs-of-Real-Data.html

    “Good Guy Advice”:仅使用C2C“更轻松”的处理方式,如果您不知道如何处理结果,则可以使用输出的模数,但不要在n-D复杂到实数转换上浪费时间。
  • 由于精度有限,由于DFT的数值实现,由于未从属的醉酒位,即使它们很小,也可以获得不为0的值。这是FFT算法的正常行为。

  • 除了要认真阅读用户手册( http://www.fftw.org/doc/)之外,(即使是痛苦的事情(我为了使3D转换正常工作,只是为了了解如何缩放数据),在该库中花了几天的时间)
  • 您应该先进行C2C 1D转换,然后再进行C2C 2D和C2R 2D,以确保您对自己的工作有所了解。
  • 平面常数的逆FFT是多少?在“频率平面”的每个单元格中都填充一个常数?您是否正在寻找定义+ inf或-inf的新方法?在那种情况下,我宁愿从0 ^^除以更简单的方法开始。直接FFT应该是您所描述的a,正确将SPIKE缩放为1,请确保反之不是。

  • 不要犹豫,为您的问题增加精确度,并借助FFTW祝您好运

    关于c++ - 逆傅立叶变换FFT3W,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199665/

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