| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import numpy as np
- class RFExporter:
- """
- Экспорт RF в формате test1_full/srv_interp.py
- """
- @staticmethod
- def _radio_ampl_convertation(rf_ampl, t_rf, rf_raster_local):
- out_rf_list = []
- rf_ampl_raster = 127
- rf_ampl_maximum = np.abs(max(rf_ampl)) if len(rf_ampl) else 0
- if rf_ampl_maximum == 0:
- return out_rf_list
- proportional_cf_rf = rf_ampl_raster / rf_ampl_maximum
- num_zeroes = 0
- for rf_iter in range(len(rf_ampl) - 1):
- if abs(t_rf[rf_iter] - t_rf[rf_iter + 1]) > 2 * rf_raster_local:
- num_zeroes += int(np.abs((t_rf[rf_iter] - t_rf[rf_iter + 1]) / rf_raster_local))
- else:
- out_rf_list += [0] * num_zeroes
- num_zeroes = 0
- out_rf_list.append(round(rf_ampl[rf_iter].real * proportional_cf_rf))
- out_rf_list.append(round(rf_ampl[rf_iter].imag * proportional_cf_rf))
- return out_rf_list
- def export(self, waveforms: dict, params: dict, output_dir: str):
- rf_raster_local = params["rf_raster_time"]
- if rf_raster_local == 5e-7:
- empty_block_time_delay = 17.7e-6
- elif rf_raster_local == 2.5e-7:
- empty_block_time_delay = 3.6e-6
- elif rf_raster_local == 5e-8:
- empty_block_time_delay = 1.77e-6
- else:
- empty_block_time_delay = 0
- rf_out = [0] * int(2 * (empty_block_time_delay // rf_raster_local))
- rf_out += self._radio_ampl_convertation(
- waveforms["rf"],
- waveforms["t_rf"],
- rf_raster_local,
- )
- scale_rf = params.get("scale_rf", 1.0)
- rf_out = [round(x * scale_rf) for x in rf_out]
- file_path = f"{output_dir}/rf_{rf_raster_local}_raster.bin"
- with open(file_path, "wb") as file_rf:
- for byte in rf_out:
- file_rf.write(int(byte).to_bytes(1, byteorder="big", signed=True))
- np.savetxt(f"{output_dir}/rf_time.txt", np.transpose(waveforms["t_rf"]))
- np.savetxt(f"{output_dir}/rf_ampl.txt", np.transpose(waveforms["rf"]))
|