2013-12-02 3 views
0

Пусть x будет (реальным) массивом длины N. Я сделал некоторые изменения (фильтрацию и т. Д.) В частотной области на X=fft(x).Заполните половину массива fft (x) с конъюгатом до ifft

, прежде чем делать inverseFFT (y=ifft(X)), хотелось бы, что вторая половина из X заполнена конъюгата в первой половине X, в обратном порядке. Зачем ? Потому что это должно быть так для реальных сигналов! (см.: http://en.wikipedia.org/wiki/Fast_Fourier_transform#FFT_algorithms_specialized_for_real_and.2For_symmetric_data)

Как я могу это сделать с помощью Python? Должно ли это быть чем-то вроде этого?

X[N/2:N] = np.conjugate(X[N/2::-1]) 
+1

Почему бы вам просто не внести изменения в обе половины? –

+0

Я делаю много испытаний модификаций методом проб и ошибок, поэтому сделать модификации проще только в первой половине и повторить вторую половину 'fft' в конце. – Basj

+1

uhm, почему бы просто не использовать [реальные трансформации] (http://docs.scipy.org/doc/numpy/reference/routines.fft.html)? Это именно то, для чего они предназначены (а именно, оптимизация для известных реальных данных). –

ответ

0

Я не знаю, если это 100% правильно, но

X = fft(x) 
N = len(x) 

# here do some modifications on X (in the frequency domain) 

X[:N/2:-1]=np.conjugate(X[1:N/2]) 
y=ifft(X) 

, кажется, работает: модификации, сделанные на первой половине X будет повторен на второй половине X. Тогда y будет (реальным) выходом.

Смежные вопросы