Je cherche comment transformer l'axe de fréquence dans un fft (pris via scipy.fftpack.fftfreq) en une fréquence en Hertz, plutôt qu'en bins ou bins fractionnés.
J'ai essayé le code ci-dessous pour tester la FFT :
t = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(t)
FFT = abs(scipy.fft(signal))
FFT = scipy.fftpack.fftshift(FFT)
freqs = scipy.fftpack.fftfreq(signal.size)
pylab.plot(freqs,FFT,'x')
pylab.show()
Le taux d'échantillonnage doit être de 4000 échantillons / 120 secondes = 33,34 échantillons/sec.
Le signal comporte un signal de 2,0 Hz, un signal de 8,0 Hz et un bruit aléatoire.
Je prends la FFT, je prends les fréquences et je les trace. Les chiffres sont assez absurdes. Si je multiplie les fréquences par 33,34 (la fréquence d'échantillonnage), j'obtiens des pics à environ 8 Hz et 15 Hz, ce qui semble erroné (de plus, les fréquences devraient être séparées par un facteur de 4, et non de 2 !)
Vous avez une idée de ce que je fais de mal ?