4

対称スペクトルで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)
4

1 に答える 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 clone)を使用すると、元の入力データに対して同じ結果が得られます。

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入力/出力データの順序付けに同じ規則を使用していると思います。

于 2012-01-30T11:02:43.170 に答える