使用fftw C++从幅度和相位数组进行2D反FFT

3
使用FFTW实现2D FFT/IFFT。
目前,我已经使用SFML加载了一张图像,并使用fftw_plan_dft_2d将其分解成幅度和相位组件。
这个过程进行得很好,我已经将我的幅度图像与已知的工作软件进行了比较,结果是正确的。(正向FFT)
我检查了ifft是否工作正常,直接从正向FFT中执行逆2D FFT( 反向FFT),使用第一个FFT的实部和虚部输出(在某些地方还有问题,但那是另一天的事情)。
我更关心的是我应该如何重新组合幅度和相位,以形成实部和复杂部,以便执行IFFT。
谷歌返回了很多MATLAB的东西,但我完全不理解,所以没有什么帮助。
顺带说一下:数学不是我的强项。这就是为什么我认为我有点困难。如果可能的话,请像对待一个10岁的孩子一样解释!

“你所说的'我应该如何重新组合幅度和相位以形成实部和虚部,以执行IFFT'是什么意思?你是想手动完成它而不是使用FFTW的实现吗?(为什么?)你是在说你不知道该使用哪个函数吗?你是想先操纵它们,然后再使用FFTW的IFFT吗?(请注意,FFT只是DFT的快速算法。您可以谷歌I / DFT的公式,这比FFT更容易描述,例如,在此处。” - metal
我的意思是,我认为反向FFT需要实数和复数值,但我只有幅度和相位值。Paul的答案正是我在寻找的,即如何从幅度和相位中获取实部和虚部。 - finlaybob
1个回答

4

首先,将你的幅度和相位值转换回复数(实部+虚部):

re = mag * cos(phi);
im = mag * sin(phi);

然后你对这些复数值进行反向傅里叶变换。


2
我已经通过在循环中使用以下代码使其工作:input[i][0] = fftMag[i] * cos(fftPhase[i])input[i][1] = fftMag[i] * sin(fftPhase[i])。谢谢您的回复! - finlaybob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接