Je vais avoir du mal à obtenir un spectre de fréquences sur une transformée de Fourier ... J'ai des données: spectre de puissance fft maux
que j'ai moyenne centrée, et ne semble pas avoir trop beaucoup d'une tendance ...
je tracer la transformée de Fourier de celui-ci:
Et je reçois quelque chose qui est pas agréable ....
Voici mon code:
def fourier_spectrum(X, sample_freq=1):
ps = np.abs(np.fft.fft(X))**2
freqs = np.fft.fftfreq(X.size, sample_freq)
idx = np.argsort(freqs)
plt.plot(freqs[idx], ps[idx])
Comme adapté du code tiré de here.
Il semble fonctionner pour certaines données naïve vague péché:
fourier_spectrum(np.sin(2*np.pi*np.linspace(-10,10,400)), 20./400)
Mes questions sont les suivantes: J'attends un non-zéro presque partout spectre, que suis-je mal faire? Si je ne fais rien de mal, quelles sont les caractéristiques de mes données qui provoquent cela? Aussi, si je ne fais rien de mal, et que fft est juste inadapté à mes données pour une raison quelconque, que dois-je faire pour extraire des fréquences importantes de mes données?
Il suffit de ne pas tracer le 0 bin du fft s'il y a trop de composants « DC ». De plus, les données semblent avoir de fortes composantes de fréquences à très basses fréquences - peuvent sembler plus "raisonnables" en regardant seulement les premières 50 cases – f5r5e5d
Soustraire la moyenne du signal avant FFT-qui supprime le gros composant à "DC" "(C'est-à-dire, bin 0 de la FFT). Egalement/alternativement, tracez le 'log10 (abs (...))' (c'est-à-dire, dB, ou décibels) de la sortie FFT pour avoir une meilleure idée de ce qui se passe. –
Regardez également les estimateurs spectraux statistiques comme [periodogram] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.periodogram.html) et les méthodes connexes dans 'scipy.signal'. –