2012-01-30 9 views
3

iFFTを対称スペクトル(Pythonを使用)で実行します。なぜ結果は実数値信号ではなく、複雑な値を含んでいますか?対称スペクトルのiFFT

# 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) 
+0

対称スペクトルはシフトされていますか?私は、スペクトルが0に関して対称であるときにスペクトルが対称であると言うことを意味する。そして、一定の虚数部分は通常、シフトに対応する。 – jimifiki

+1

1 + 1jの代わりに1 + 0jを使用する –

答えて

2

このようにそれを試してみてください。

# 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はナイキストあり、これらの値の両方が本当です。他の用語については、対称性はナイキストの周りの複素共役である。

私はあなたの元の入力データのためにあなたと同じ結果を得るオクターブ(MATLABクローン)で

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 

:私は純粋に実際の結果を得る上で、私の入力データとのに対し

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 

私は、おそらくnumpyがFFT/IFFTの入出力データの順序付けに同じコミュニケーションを使用していると仮定します。

+0

私はもう一度それをチェックし、周りを遊んでいる間はDCが本当の価値でなければならないようです。さらに、サンプルの総数(DCを含む)が偶数である場合、N/2ナイキストサンプルもまた実数でなければなりません。 – user1177816

+0

はい、それは正しいと思います。 –

関連する問題