2013-07-03 47 views
0

我正在使用FFTW来计算二维复数数据的逆DFT。默认设置的输出(复数到复数)是复数,虚数部分不是零。但是,我只对结果的实际部分感兴趣,而不是复杂的部分。 FFTW的交错实数复数输出对我来说并不理想,因为我想通过SSE后处理(实数)输出。有没有办法从FFTW中获得唯一真实的数组?由于输出不是真实的,复合实际计划看起来并不奏效。FFTW:只对实际结果感兴趣

+0

背后FFT的概念是得到复杂的数据,那么为什么你只会尝试实体部分。 – SinisterMJ

+1

问题应该是:你对价值还是阶段感兴趣? – ogni42

+0

我建议将此问题移至dsp.stackexchange.com –

回答

0

[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