Python 对几个特定频率进行fft和ifft

Python 对几个特定频率进行fft和ifft,python,numpy,scipy,Python,Numpy,Scipy,我有一个关于fft和ifft函数的问题 假设A是一个包含365天数据的数组: fft_output = scipy.fftpack.fft(A) 它给出了与所有频率相关的系数。我只需要三个频率(0,1/365,1/182)。因此,我认为fft\u输出[0]和fft\u输出[364],fft\u输出[181]将是我所需频率的正确选择 现在我想通过365天使用这三个频率来进行ifft。我不知道如何使用ifft函数来实现这一点 如果有人指导我,我将不胜感激 提前谢谢我不确定我是否正确理解了这个问题,

我有一个关于
fft
ifft
函数的问题

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

fft_output = scipy.fftpack.fft(A)
它给出了与所有频率相关的系数。我只需要三个频率
(0,1/365,1/182)
。因此,我认为
fft\u输出[0]
fft\u输出[364]
fft\u输出[181]
将是我所需频率的正确选择

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

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


提前谢谢

我不确定我是否正确理解了这个问题,但让我试一试:

首先,如果您只需要原始信号的几个分量的振幅,您可以单独计算它们。如果
A
是您的数据系列,并且您只想知道
k
th bin,您可以使用:

由于
k
的单位是周期/采样,因此与
k
第bin对应的频率由
k*F_s/len(A)
给出,其中
F_s
是信号
A
的采样频率(例如,Hz、m^-1等)

通过取指数的负数给出相应的IFFT箱:

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

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

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

非常感谢。最后一部分很有帮助。我发现的另一件事是,为了选择一个特定的频率,在我的案例1/365中,我必须选择成对频率(正和负),除了零频率。这意味着我的情况是1和364。
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))