2012-01-30 2 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 + 0j вместо 1 + 1j –

ответ

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: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

Я проверил его снова, и, играя вокруг, кажется, что DC должен быть реальной стоимостью. Кроме того, если общее количество выборок (включая DC) равно даже N/2 Nyquist-Sample, также должно быть реально оценено. – user1177816

+0

Да, я думаю, это правильно. –