2015-07-20 144 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