对几个特定频率取 fft 和 ifft

Take fft and ifft for a few specific frequencies

我有一个关于 fftifft 函数的问题。

假设A是一个包含365天数据的数组:

fft_output = scipy.fftpack.fft(A)

它给了我与所有频率相关的系数。我只需要三个频率 (0, 1/365, 1/182)。所以我认为 fft_output[0]fft_output[364]fft_output[181] 是我想要的频率的正确选择。

现在我想 ifft 仅仅通过使用这三个频率 365 天。我不知道如何使用 ifft 函数来做到这一点。

如果有人指导我,我将不胜感激。

提前致谢

我不确定我是否理解正确,但让我试一试:

首先,如果您只需要原始信号的几个分量的幅度,您可以单独计算它们。如果 A 是您的数据系列,而您只想知道第 k 个 bin,则可以使用 definition of DFT:

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

因为k的单位是cycles/sample,第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)))

接下来,假设您已经使用上面的第一个等式计算了三个区间 x0x181x364,如果您想重建原始信号,请使用只是那些值,你可以这样做:

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

最后我用下面的代码计算了我数据的年周期。希望它给了我正确的答案。

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