2013-05-19 16 views
1

J'essaie d'obtenir un tracé de spectogramme d'une fonction sinusoïdale pure. Ensemble avec cela je veux montrer un complot de la fft de ce signal entier. Je m'attends à ce que les pics soient sur la même fréquence puisqu'ils traitaient le même signal qui est stationnaire dans le temps.Tracer un spectrogramme d'un sinus pur avec matplotlib

Code

samplingFrequency = 32. 
frequency = 4       #frequency of the sinus wave 
t = arange(0,20,1/samplingFrequency) #time intervals with period 1/sampling frequency 
y = cos(2*pi*frequency*t) 

Y = fft.fft(y)       #standard fft on the whole signal 
frequencyAxis = fft.fftfreq(len(Y),1/samplingFrequency)   #adjusting the x axis 

#PLOTTING 
fig, (ax1,ax2) = plt.subplots(nrows=2, ncols=1) 
ax1.specgram(y, Fs = samplingFrequency) 
ax2.stem(frequencyAxis,Y,linefmt='r--', markerfmt='ro') 

terrain enter image description here

Le fft du signal entier est comme prévu avec le pic 4. Cependant, la spectogramme trace une ligne sur 12. Des idées sur l'endroit où l'erreur est?

Mise à jour A été en utilisant les versions suivantes:

  • matplotlib '1.1.1'
  • numpy '1.6.2'
  • python 2.7.3
+2

Je ne peux pas reproduire ce résultat (Numpy 1.7.1 & matplotlib 1.2.1), car le spectrogramme trace la ligne à 4 pour moi. Btw, vous avez une faute de frappe dans votre script; 'freqency' à la place si' frequency' dans la ligne 4. – hooy

+3

En Python 2.7.4, numpy 1.7.1, matplotlib 1.2.1, cela fonctionne correctement –

+0

Cela a fonctionné après la mise à jour. Si vous devez former ce que vous avez dit ici à une réponse, je l'accepterai et marquerai la question comme résolue. – TheMeaningfulEngineer

Répondre

2

sur Python 2.7.5 avec numpy 1.7.1 et matplotlib 1.2.1 votre code fonctionne exactement comme prévu. Essayez de mettre à jour vos installations numpy et matplotlib avec les versions les plus récentes.

Questions connexes