complex calib add
This commit is contained in:
@ -101,6 +101,17 @@ def build_calib_envelope(sweep: np.ndarray) -> np.ndarray:
|
||||
return np.asarray(upper, dtype=np.float32)
|
||||
|
||||
|
||||
def build_complex_calibration_curve(ch1: np.ndarray, ch2: np.ndarray) -> np.ndarray:
|
||||
"""Build a complex calibration curve as ``ch1 + 1j*ch2``."""
|
||||
ch1_arr = np.asarray(ch1, dtype=np.float32).reshape(-1)
|
||||
ch2_arr = np.asarray(ch2, dtype=np.float32).reshape(-1)
|
||||
width = min(ch1_arr.size, ch2_arr.size)
|
||||
if width <= 0:
|
||||
raise ValueError("Complex calibration source is empty")
|
||||
curve = ch1_arr[:width].astype(np.complex64) + (1j * ch2_arr[:width].astype(np.complex64))
|
||||
return validate_complex_calibration_curve(curve)
|
||||
|
||||
|
||||
def validate_calib_envelope(envelope: np.ndarray) -> np.ndarray:
|
||||
"""Validate a saved calibration envelope payload."""
|
||||
values = np.asarray(envelope, dtype=np.float32).reshape(-1)
|
||||
@ -111,6 +122,16 @@ def validate_calib_envelope(envelope: np.ndarray) -> np.ndarray:
|
||||
return values
|
||||
|
||||
|
||||
def validate_complex_calibration_curve(curve: np.ndarray) -> np.ndarray:
|
||||
"""Validate a saved complex calibration payload."""
|
||||
values = np.asarray(curve).reshape(-1)
|
||||
if values.size == 0:
|
||||
raise ValueError("Complex calibration curve is empty")
|
||||
if not np.issubdtype(values.dtype, np.number):
|
||||
raise ValueError("Complex calibration curve must be numeric")
|
||||
return np.asarray(values, dtype=np.complex64)
|
||||
|
||||
|
||||
def _normalize_calib_path(path: str | Path) -> Path:
|
||||
out = Path(path).expanduser()
|
||||
if out.suffix.lower() != ".npy":
|
||||
@ -131,3 +152,18 @@ def load_calib_envelope(path: str | Path) -> np.ndarray:
|
||||
normalized_path = _normalize_calib_path(path)
|
||||
loaded = np.load(normalized_path, allow_pickle=False)
|
||||
return validate_calib_envelope(loaded)
|
||||
|
||||
|
||||
def save_complex_calibration(path: str | Path, curve: np.ndarray) -> str:
|
||||
"""Persist a complex calibration curve as a .npy file and return the final path."""
|
||||
normalized_path = _normalize_calib_path(path)
|
||||
values = validate_complex_calibration_curve(curve)
|
||||
np.save(normalized_path, values.astype(np.complex64, copy=False))
|
||||
return str(normalized_path)
|
||||
|
||||
|
||||
def load_complex_calibration(path: str | Path) -> np.ndarray:
|
||||
"""Load and validate a complex calibration curve from a .npy file."""
|
||||
normalized_path = _normalize_calib_path(path)
|
||||
loaded = np.load(normalized_path, allow_pickle=False)
|
||||
return validate_complex_calibration_curve(loaded)
|
||||
|
||||
Reference in New Issue
Block a user