我对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 :(得分:1)
我不确定我是否正确理解了这个问题,但让我试一试:
首先,如果您需要原始信号的几个分量的幅度,您可以单独计算它们。如果A
是您的数据系列,并且您只想知道k
bin,则可以使用definition of DFT:
x = np.sum(A*np.exp(-1j*2*np.pi*k*np.arange(len(A))/len(A)))
由于k
的单位是周期/样本,因此k
bin对应的频率由k*F_s/len(A)
给出,其中F_s
是采样频率信号A
(例如Hz,m ^ -1等)。
相应的IFFT bin是通过取指数的负数给出的:
x = np.sum(A*np.exp(1j*2*np.pi*k*np.arange(len(A))/len(A)))
接下来,假设您已使用上面的第一个等式来计算三个分档x0
,x181
和x364
,如果您想要重建原始信号,请使用只是这些值,你可以这样做:
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))
答案 1 :(得分: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))