added s11!

This commit is contained in:
Ayzen
2026-03-26 18:29:42 +03:00
parent 9ddbde22bd
commit 077542cbd0
43 changed files with 713 additions and 347 deletions
+11 -1
View File
@@ -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))}"
+29 -15
View File
@@ -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")