added s11!
This commit is contained in:
@@ -46,12 +46,22 @@ def _all_traces_from_raw_or_pre(collection_dir: Path) -> list[tuple[np.ndarray,
|
||||
raise ValueError(f"Invalid trace record in {collection_dir / 'meta.json'}")
|
||||
|
||||
freq_file = str(trace_meta.get("freq_file", ""))
|
||||
s11_file = str(trace_meta.get("s11_file", ""))
|
||||
s21_file = str(trace_meta.get("s21_file", ""))
|
||||
freq = np.load(collection_dir / freq_file)
|
||||
s11 = np.load(collection_dir / s11_file)
|
||||
s21 = np.load(collection_dir / s21_file)
|
||||
if freq.shape != s11.shape:
|
||||
raise ValueError(f"Shape mismatch freq/s11 in {collection_dir}")
|
||||
if freq.shape != s21.shape:
|
||||
raise ValueError(f"Shape mismatch freq/s21 in {collection_dir}")
|
||||
if not (np.isfinite(freq).all() and np.isfinite(np.real(s21)).all() and np.isfinite(np.imag(s21)).all()):
|
||||
if not (
|
||||
np.isfinite(freq).all()
|
||||
and np.isfinite(np.real(s11)).all()
|
||||
and np.isfinite(np.imag(s11)).all()
|
||||
and np.isfinite(np.real(s21)).all()
|
||||
and np.isfinite(np.imag(s21)).all()
|
||||
):
|
||||
raise ValueError(f"Non-finite values in {collection_dir}")
|
||||
|
||||
label = f"i{int(trace_meta.get('input', 0))}_o{int(trace_meta.get('output', 0))}"
|
||||
|
||||
@@ -49,7 +49,13 @@ def _shm_unlink(name: str) -> None:
|
||||
raise OSError(err, f"shm_unlink failed for {name}")
|
||||
|
||||
|
||||
def build_synthetic_collection(config: RunConfigModel, value_scale: float) -> SweepCollection:
|
||||
def build_synthetic_collection(
|
||||
config: RunConfigModel,
|
||||
value_scale: float,
|
||||
*,
|
||||
s11_scale: float,
|
||||
s11_phase_offset: float,
|
||||
) -> SweepCollection:
|
||||
"""Build synthetic sweep collection for all configured switch combos."""
|
||||
traces: list[TraceData] = []
|
||||
combos = RunConfigModel.build_full_combos(config.input_switch.positions, config.output_switch.positions)
|
||||
@@ -62,12 +68,15 @@ def build_synthetic_collection(config: RunConfigModel, value_scale: float) -> Sw
|
||||
dtype=np.float32,
|
||||
)
|
||||
phase = np.linspace(0.0, np.pi * 2.0, config.radar.sweep.points, dtype=np.float32)
|
||||
reflected_phase = (phase * 0.6) + s11_phase_offset
|
||||
s11 = (s11_scale * (np.cos(reflected_phase) + 1j * np.sin(reflected_phase))).astype(np.complex64)
|
||||
s21 = value_scale * (np.cos(phase) + 1j * np.sin(phase)).astype(np.complex64)
|
||||
|
||||
traces.append(
|
||||
TraceData(
|
||||
combo=ComboKey(input_pos=combo.input, output_pos=combo.output),
|
||||
frequency_hz=frequency_hz,
|
||||
s11=s11,
|
||||
s21=s21,
|
||||
)
|
||||
)
|
||||
@@ -107,22 +116,27 @@ def main() -> int:
|
||||
power_dbm=config.radar.sweep.power_dbm,
|
||||
)
|
||||
|
||||
calibration_set = build_synthetic_collection(config, value_scale=1.0)
|
||||
reference_set = build_synthetic_collection(config, value_scale=0.3)
|
||||
s21_calibration_set = build_synthetic_collection(config, value_scale=1.0, s11_scale=0.15, s11_phase_offset=0.4)
|
||||
s21_reference_set = build_synthetic_collection(config, value_scale=0.3, s11_scale=0.08, s11_phase_offset=0.9)
|
||||
s11_open_set = build_synthetic_collection(config, value_scale=0.85, s11_scale=0.95, s11_phase_offset=0.1)
|
||||
s11_short_set = build_synthetic_collection(config, value_scale=0.85, s11_scale=0.95, s11_phase_offset=3.2)
|
||||
s11_load_set = build_synthetic_collection(config, value_scale=0.85, s11_scale=0.05, s11_phase_offset=1.4)
|
||||
s11_reference_set = build_synthetic_collection(config, value_scale=0.3, s11_scale=0.18, s11_phase_offset=1.1)
|
||||
|
||||
store.save_set("calibration", radar_key, "smoke_cal", calibration_set)
|
||||
store.save_set("reference", radar_key, "smoke_ref", reference_set)
|
||||
store.save_set("s21_calibration", radar_key, "smoke_cal", s21_calibration_set)
|
||||
store.save_set("s21_reference", radar_key, "smoke_ref", s21_reference_set)
|
||||
store.save_set("s11_open", radar_key, "smoke_open", s11_open_set)
|
||||
store.save_set("s11_short", radar_key, "smoke_short", s11_short_set)
|
||||
store.save_set("s11_load", radar_key, "smoke_load", s11_load_set)
|
||||
store.save_set("s11_reference", radar_key, "smoke_s11_ref", s11_reference_set)
|
||||
|
||||
calibration_bundle, reference_bundle = config_writer.prepare_s21_bundles(
|
||||
store,
|
||||
radar_key,
|
||||
"smoke_cal",
|
||||
"smoke_ref",
|
||||
)
|
||||
config.preprocess.s21_calibration_set = "smoke_cal"
|
||||
config.preprocess.s21_reference_set = "smoke_ref"
|
||||
config.preprocess.s21_calibration_bundle_path = str(calibration_bundle)
|
||||
config.preprocess.s21_reference_bundle_path = str(reference_bundle)
|
||||
config.preprocess.s21.calibration.set_name = "smoke_cal"
|
||||
config.preprocess.s21.reference.set_name = "smoke_ref"
|
||||
config.preprocess.s11.calibration.open.set_name = "smoke_open"
|
||||
config.preprocess.s11.calibration.short.set_name = "smoke_short"
|
||||
config.preprocess.s11.calibration.load.set_name = "smoke_load"
|
||||
config.preprocess.s11.reference.set_name = "smoke_s11_ref"
|
||||
config_writer.prepare_preprocess_bundles(store, radar_key, config)
|
||||
|
||||
config_path = config_writer.write(config, project_root / "python_app/runtime/run_config_smoke.json")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user