J'ai une question concernant les fonctions fft et ifft.

Supposons que A est un tableau qui comprend 365 jours de données:

fft_output = scipy.fftpack.fft(A)

Cela me donne les coefficients liés à toutes les fréquences. Je n'ai besoin que de trois fréquences (0, 1/365, 1/182). Je pense donc que fft_output[0] et fft_output[364], fft_output[181] seraient l'option correcte pour mes fréquences souhaitées.

Maintenant, je voudrais prendre ifft simplement en utilisant ces trois fréquences pendant 365 jours. Je n'ai pas compris comment faire cela en utilisant la fonction ifft.

J'apprécierais que quelqu'un me guide.

Merci d'avance

3
zhr 20 juil. 2015 à 19:05

2 réponses

Meilleure réponse

Enfin, j'ai utilisé le code suivant pour calculer le cycle annuel de mes données. J'espère que cela m'a donné la bonne réponse.

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
Abdul Fatir 11 janv. 2017 à 01:05

Je ne suis pas sûr de bien comprendre la question, mais laissez-moi essayer:

Premièrement, si vous avez besoin des amplitudes de quelques composants du signal d'origine, vous pouvez les calculer individuellement. Si A est votre série de données et que vous souhaitez connaître uniquement le k e bac, vous pouvez utiliser le définition de DFT:

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

Comme les unités de k sont des cycles / échantillon, la fréquence correspondant au k ème bin est donnée par k*F_s/len(A), où F_s est la fréquence d'échantillonnage du signal {{ X4}} (par exemple Hz, m ^ -1, etc.).

Le bin IFFT correspondant est donné en prenant le négatif de l'exposant:

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

Ensuite, en supposant que vous ayez utilisé la première équation ci-dessus pour calculer les trois intervalles x0, x181 et x364, si vous souhaitez reconstruire le signal d'origine, en utilisant uniquement ces valeurs, vous peut le faire:

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
rjonnal 20 juil. 2015 à 17:04