Espectro unilateral de un suma de senoides en Python.

  1. import numpy as np
  2. #from scipy import signal
  3. from scipy.fftpack import fft
  4. import matplotlib.pyplot as plt
  5.  
  6. N = 1000 # number of sample points
  7. dt = 1. / 500 # sample spacing
  8.  
  9. frequency1 = 50.
  10. frequency2 = 150.
  11. nN=N*4
  12. t = np.linspace(0.0, N*dt, nN)
  13. s1 = 0.8*np.sin(2*np.pi * frequency1 * t)
  14. s2 = 0.4* np.sin(2*np.pi * frequency2 * t)
  15. y = s1 + s2
  16.  
  17. plt.figure(1)
  18. plt.plot(t, s1)
  19. plt.grid()
  20. plt.title('Senoide de '+str(frequency1)+' Hz')
  21. plt.ylabel('Amplitud')
  22. plt.xlabel('Tiempo [s]')
  23. plt.axis([0, 8/frequency2, -1.5, 1.5])
  24.  
  25. plt.figure(2)
  26. plt.plot(t, s2)
  27. plt.grid()
  28. plt.title('Senoide de '+str(frequency2)+' Hz')
  29. plt.ylabel('Amplitud')
  30. plt.xlabel('Tiempo [s]')
  31. plt.axis([0, 8/frequency2, -1.5, 1.5])
  32.  
  33.  
  34. plt.figure(3)
  35. plt.plot(t, s1+s2)
  36. plt.grid()
  37. plt.title('Suma de senoides de '+str(frequency1)+' Hz'+' y '+str(frequency2)+' Hz')
  38. plt.ylabel('Amplitud')
  39. plt.xlabel('Tiempo [s]')
  40. plt.axis([0, 8/frequency2, -1.5, 1.5])
  41. # FFT
  42. yf = fft(y)
  43. tf = np.linspace(.0, 1./(2.*dt), N/2)
  44. spectrum = 2./nN * np.abs(yf[0:N/2])
  45.  
  46. #figure1 = plt.figure(4, (10, 5))
  47. plt.figure(4)
  48. plt.plot(tf, spectrum, '-')
  49. plt.grid()
  50. plt.title(u'Espectro de magnitud |X(j$\omega$)|')
  51. plt.xlabel('Frequencia [Hz]')
  52. plt.ylabel('Magnitud |X(j$\omega$)|')

No hay comentarios.:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...