对称频谱的iFFT

4 投票
1 回答
3361 浏览
提问于 2025-04-17 11:56

我在对一个对称的频谱进行逆傅里叶变换(iFFT),使用的是Python。为什么得到的结果不是一个实数信号,而是包含了复数值呢?

# My symmetric spectrum
spectrum = numpy.array( [1+1j,2+2j,3+3j,3-3j,2-2j] )

# Perform the iFFT
print numpy.fft.ifft(spectrum)

输出:

(2.2+0.2j)
(-1.98979431354+0.2j)
(0.59464641547+0.2j)
(-0.74743281997+0.2j)
(0.942580718037+0.2j)

1 个回答

3

试试这样做:

# My symmetric spectrum
spectrum = numpy.array( [0+0j,1+1j,2+2j,3+3j,0+0j,3-3j,2-2j,1-1j] )

# Perform the iFFT
print numpy.fft.ifft(spectrum)

通常情况下,0号频率是直流(DC),N/2号频率是奈奎斯特频率,这两个值都是实数。其他的频率值则在奈奎斯特频率周围呈现出对称的复共轭关系。

在Octave(一个类似MATLAB的工具)中,我得到的结果和你原始输入数据的结果是一样的:

octave-3.4.0:1> x = [1+1j,2+2j,3+3j,3-3j,2-2j];
octave-3.4.0:2> y = ifft(x)
y =

   2.20000 + 0.20000i  -1.98979 + 0.20000i   0.59465 + 0.20000i  -0.74743 + 0.20000i   0.94258 + 0.20000i

而对于我上面的输入数据,我得到的结果完全是实数:

octave-3.4.0:3> x = [0+0j,1+1j,2+2j,3+3j,0+0j,3-3j,2-2j,1-1j];
octave-3.4.0:4> y = ifft(x)
y =

   1.50000  -1.56066   0.00000   0.14645  -0.50000   0.56066  -1.00000   0.85355

我猜测numpy可能也使用相同的规则来处理FFT/IFFT的输入和输出数据。

撰写回答