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
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
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
En Python 2.7.4, numpy 1.7.1, matplotlib 1.2.1, cela fonctionne correctement –
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