new kamil adc

This commit is contained in:
Ayzen
2026-06-11 13:02:02 +03:00
parent 21f76d7cd2
commit 9661504e51
46 changed files with 12097 additions and 1063 deletions
+36
View File
@@ -42,6 +42,38 @@ class RadarMultiDeviceModel:
recovery_attempts: int = 3
@dataclass(slots=True)
class KamilAdcPhaseCalibrationModel:
"""Affine law mapping the reference signal's unwrapped phase to frequency.
Two fixed anchor points ``(phase0_rad, freq0_hz)`` and ``(phase1_rad, freq1_hz)``
define ``f(phase) = freq0_hz + (phase - phase0_rad) * (freq1_hz - freq0_hz)
/ (phase1_rad - phase0_rad)``, applied to the *absolute* unwrapped phase of
every sweep. These are physical constants of the reference arm and must be
supplied by config — never derived from a live sweep.
"""
phase0_rad: float = 0.0
freq0_hz: float = 2_046_000_000.0
phase1_rad: float = 300.0
freq1_hz: float = 5_612_000_000.0
@dataclass(slots=True)
class KamilAdcBandModel:
"""Fixed frequency window every sweep is cropped to and resampled onto.
Each sweep is resampled onto ``linspace(start_hz, stop_hz, points)`` so all
sweeps share one identical axis and can be averaged/subtracted. The window
must lie inside the (floating) range each sweep actually covers; sweeps that
fail to cover it are rejected rather than edge-extrapolated.
"""
start_hz: float = 2_100_000_000.0
stop_hz: float = 5_500_000_000.0
points: int = 2048
@dataclass(slots=True)
class KamilAdcModel:
"""External Kamil ADC acquisition process settings."""
@@ -54,6 +86,10 @@ class KamilAdcModel:
startup_timeout_s: float = 5.0
sweep_timeout_s: float = 5.0
stop_timeout_s: float = 2.0
phase_calibration: KamilAdcPhaseCalibrationModel = field(
default_factory=KamilAdcPhaseCalibrationModel
)
band: KamilAdcBandModel = field(default_factory=KamilAdcBandModel)
@dataclass(slots=True)