Guest User

Untitled

a guest
Dec 14th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4.  
  5. def prep_data(freqs, phases, sample_freq, N):
  6. f1, f2 = freqs
  7. p1, p2 = phases
  8. t = 1 / sample_freq
  9.  
  10. data = []
  11. for n in range(N):
  12. sin1 = np.sin(2 * np.pi * 1000 * n * t + p1)
  13. sin2 = 5 * np.sin(2 * np.pi * 2000 * n * t + p2)
  14. sin_d = sin1 + sin2
  15. data.append(sin_d)
  16. return data
  17.  
  18.  
  19. def dft(data):
  20. N = len(data)
  21. dft_out = []
  22. for k in range(N):
  23. sigs = 0
  24. for n in range(N):
  25. sigs += data[n] * np.power(np.e, - 2 * np.pi * 1j * n * k / N)
  26. dft_out.append(sigs)
  27. return dft_out
  28.  
  29.  
  30. def magnitude(x):
  31. return np.sqrt(np.power(x.real, 2) + np.power(x.imag, 2))
  32.  
  33.  
  34. def phase(x):
  35. return np.arctan(x.imag / x.real)
  36.  
  37.  
  38.  
  39. N = 80
  40. freqs = [1000, 2000]
  41. phases = [0, 3 * np.pi / 4]
  42. sample_freq = 8000
  43.  
  44. signal = prep_data(freqs, phases, sample_freq, N)
  45. dft_out = dft(signal)
  46. dft_mags = [magnitude(k) for k in dft_out]
  47. dft_freqs = [phase(j) for j in dft_out]
  48.  
  49. fig, plots = plt.subplots(3, 1)
  50.  
  51. plots[0].set_title('Signal')
  52. plots[0].plot(signal, color='red')
  53.  
  54. plots[1].set_title('DFT Frequency Magnitudes')
  55. plots[1].plot(dft_mags, color='blue')
  56.  
  57. plots[2].set_title('DFT Frequency Phases')
  58. plots[2].plot(dft_freqs, color='green')
  59.  
  60. plt.tight_layout()
  61. plt.show()
Add Comment
Please, Sign In to add comment