2015-07-20 80 views
2

我有一個關於fftifft函數的問題。採取fft和ifft幾個特定頻率

假設A是數組,其包括數據365天:

fft_output = scipy.fftpack.fft(A) 

這使我有關的所有頻率係數。我只需要三個頻率(0, 1/365, 1/182)。所以我認爲fft_output[0]fft_output[364],fft_output[181]對我所需的頻率來說是正確的選擇。

現在我想通過使用這三個頻率爲365天,採取ifft。我沒有弄清楚如何通過使用ifft函數來做到這一點。

如果有人指導我,我將不勝感激。

預先感謝您

回答

0

最後我用下面的代碼來計算我的數據的年度週期。希望它給了我正確的答案。

Amp = scipy.fftpack.fft(A) 

F = np.zeros(365) 

F = F.tolist() 

F[0] = Amp[0] 

F[1] = Amp[1] 

F[364] = Amp[364] 

ann_cycle = np.abs(np.fft.ifft(F)) 
0

我不知道如果我理解正確的問題,但讓我試一試:

首先,如果你需要的只是幾個分量的幅度,原始信號,你可以單獨計算它們。如果A是您的數據系列,和你想知道只是k個料,你可以使用definition of DFT

x = np.sum(A*np.exp(-1j*2*np.pi*k*np.arange(len(A))/len(A))) 

由於k單位爲週期/採樣,對應k個料頻率由k*F_s/len(A)給出,其中F_s是信號A(例如Hz,m^-1等)的採樣頻率。

x = np.sum(A*np.exp(1j*2*np.pi*k*np.arange(len(A))/len(A))) 

接下來,假設你使用的第一個方程上述計算三個倉x0x181x364,如果:

的相應的IFFT倉通過取指數的負給定要重建原始信號,只用這些值,你可以這樣做:

F = np.zeros((365)) 
F[0] = x0 
F[181] = x181 
F[364] = x364 
A2 = np.fft.ifft(F) # complex--you may wish to use np.abs(np.fft.ifft(F)) 
+0

非常感謝你。最後一部分很有幫助。另一件我想到的是爲了在我的情況下選擇一個特定的頻率1/365,除了零頻率之外,我必須選擇配對頻率(正和負)。這意味着1和364我的情況。 – zhr