0

我正在使用 FFTW 计算二维复杂数据的逆 DFT。默认设置(复数到复数)的输出是复数,虚部不为零。但是,我只对结果的实部感兴趣,而不对复杂部分感兴趣。FFTW 的交错实复杂输出对我来说并不理想,因为我想通过 SSE 对(真实)输出进行后处理。有没有办法从 FFTW 获取唯一真实的数组?Complex-To-Real 计划似乎不起作用,因为输出不是真实的。

4

1 回答 1

0

[time|freq] 域中的真实数据意味着在另一个域中关于零的共轭对称性。通过强制共轭对称(添加自身的共轭翻转版本),您可以有效地丢弃另一个域中的虚部。这应该允许您在 FFTW 中使用真正的 ifft,获得大约 2 倍的加速。请注意,您仅对 FFTW 真实 ifft 使用 nfft/2+1 箱。

这是一个 1D 示例来说明这一点:

X = randn(8,1)+j*randn(8,1);
Xsym = .5*(X + conj(X([1 8:-1:2]'))); % force the symmetric condition
err = real(ifft(X)) - ifft(Xsym); 

对于 2D IFFT,最好使用 2 次 1d ifft 执行 2d ifft,如另一个答案中所述

于 2013-07-03T12:59:36.330 回答