wavegen.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. def main():
  4. # Parameters
  5. samples = 512
  6. x = np.linspace(-2, 2, samples)
  7. # Generate a sinc wave
  8. sinc_wave = np.sinc(x)
  9. # Normalize to 16-bit range
  10. sinc_wave = sinc_wave / np.max(np.abs(sinc_wave)) * 32767
  11. imaginary_part = np.zeros(samples)
  12. # Save to a file
  13. with open('sinc_wave.bin', 'wb') as f:
  14. for i in range(samples):
  15. f.write(np.int16(sinc_wave[i]).tobytes())
  16. f.write(np.int16(imaginary_part[i]).tobytes())
  17. data = b''
  18. with open('sinc_wave.bin', 'rb') as f:
  19. data = f.read()
  20. print(len(data))
  21. wave_q = np.array([], dtype=np.int16)
  22. wave_i = np.array([], dtype=np.int16)
  23. for i in range(len(data) // 4):
  24. wave_q = np.append(wave_q, np.frombuffer(data, dtype=np.int16, count=1, offset=4*i))
  25. wave_i = np.append(wave_i, np.frombuffer(data, dtype=np.int16, count=1, offset=4*i+2))
  26. plt.plot(x, wave_q)
  27. plt.plot(x, wave_i)
  28. plt.show()
  29. if __name__ == "__main__":
  30. main()