0
我正在使用FFTW来计算二维复数数据的逆DFT。默认设置的输出(复数到复数)是复数,虚数部分不是零。但是,我只对结果的实际部分感兴趣,而不是复杂的部分。 FFTW的交错实数复数输出对我来说并不理想,因为我想通过SSE后处理(实数)输出。有没有办法从FFTW中获得唯一真实的数组?由于输出不是真实的,复合实际计划看起来并不奏效。FFTW:只对实际结果感兴趣
我正在使用FFTW来计算二维复数数据的逆DFT。默认设置的输出(复数到复数)是复数,虚数部分不是零。但是,我只对结果的实际部分感兴趣,而不是复杂的部分。 FFTW的交错实数复数输出对我来说并不理想,因为我想通过SSE后处理(实数)输出。有没有办法从FFTW中获得唯一真实的数组?由于输出不是真实的,复合实际计划看起来并不奏效。FFTW:只对实际结果感兴趣
[time | freq]域中的实际数据意味着conjugate symmetry在其他域中约为零。 通过强制共轭对称性(添加自身的共轭翻转版本),可以高效地丢弃其他域中的虚部。这应该允许你在FFTW中使用真实的盗窃信息,获得大约2倍的加速。请注意,您只能使用nfft/2 + 1个分箱进行FFTW实际分配。
这里的一个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 as described in another answer
背后FFT的概念是得到复杂的数据,那么为什么你只会尝试实体部分。 – SinisterMJ
问题应该是:你对价值还是阶段感兴趣? – ogni42
我建议将此问题移至dsp.stackexchange.com –