Попробуйте так:
# 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: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.
Является ли ваш симметричный спектр смещенным? Я имею в виду, что вы говорите, что спектр симметричен, когда он симметричен относительно 0. И константная мнимая часть обычно соответствует сдвигу. – jimifiki
используйте 1 + 0j вместо 1 + 1j –