rf_exporter.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import numpy as np
  2. class RFExporter:
  3. """
  4. Экспорт RF в формате test1_full/srv_interp.py
  5. """
  6. @staticmethod
  7. def _radio_ampl_convertation(rf_ampl, t_rf, rf_raster_local):
  8. out_rf_list = []
  9. rf_ampl_raster = 127
  10. rf_ampl_maximum = np.abs(max(rf_ampl)) if len(rf_ampl) else 0
  11. if rf_ampl_maximum == 0:
  12. return out_rf_list
  13. proportional_cf_rf = rf_ampl_raster / rf_ampl_maximum
  14. num_zeroes = 0
  15. for rf_iter in range(len(rf_ampl) - 1):
  16. if abs(t_rf[rf_iter] - t_rf[rf_iter + 1]) > 2 * rf_raster_local:
  17. num_zeroes += int(np.abs((t_rf[rf_iter] - t_rf[rf_iter + 1]) / rf_raster_local))
  18. else:
  19. out_rf_list += [0] * num_zeroes
  20. num_zeroes = 0
  21. out_rf_list.append(round(rf_ampl[rf_iter].real * proportional_cf_rf))
  22. out_rf_list.append(round(rf_ampl[rf_iter].imag * proportional_cf_rf))
  23. return out_rf_list
  24. def export(self, waveforms: dict, params: dict, output_dir: str):
  25. rf_raster_local = params["rf_raster_time"]
  26. if rf_raster_local == 5e-7:
  27. empty_block_time_delay = 17.7e-6
  28. elif rf_raster_local == 2.5e-7:
  29. empty_block_time_delay = 3.6e-6
  30. elif rf_raster_local == 5e-8:
  31. empty_block_time_delay = 1.77e-6
  32. else:
  33. empty_block_time_delay = 0
  34. rf_out = [0] * int(2 * (empty_block_time_delay // rf_raster_local))
  35. rf_out += self._radio_ampl_convertation(
  36. waveforms["rf"],
  37. waveforms["t_rf"],
  38. rf_raster_local,
  39. )
  40. scale_rf = params.get("scale_rf", 1.0)
  41. rf_out = [round(x * scale_rf) for x in rf_out]
  42. file_path = f"{output_dir}/rf_{rf_raster_local}_raster.bin"
  43. with open(file_path, "wb") as file_rf:
  44. for byte in rf_out:
  45. file_rf.write(int(byte).to_bytes(1, byteorder="big", signed=True))
  46. np.savetxt(f"{output_dir}/rf_time.txt", np.transpose(waveforms["t_rf"]))
  47. np.savetxt(f"{output_dir}/rf_ampl.txt", np.transpose(waveforms["rf"]))