STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
robust_calibration.RobustCalibrationFramework Class Reference

Public Member Functions

 __init__ (self, int sensor_id)
None set_theta_from_polynomial (self, List[float] poly_coeffs, float adc_norm_min, float adc_norm_scale)
np.ndarray environmental_robust_basis_functions (self, float adc_code, EnvironmentalState env)
Tuple[np.ndarray, np.ndarray] total_least_squares_calibration (self, List[CalibrationPoint] points)
Tuple[np.ndarray, np.ndarray] bayesian_update (self, List[CalibrationPoint] new_points)
Tuple[np.ndarray, np.ndarray] recursive_least_squares_update (self, CalibrationPoint point)
Tuple[float, bool] generalized_likelihood_ratio_test (self, List[CalibrationPoint] new_points)
None set_noise_coeffs (self, "NoiseCoefficients" coeffs, float tau0=0.01)
Tuple[float, float] predict_pressure_with_uncertainty (self, float adc_code, EnvironmentalState env)
Dict[str, any] add_calibration_point (self, CalibrationPoint point)
Tuple[float, Dict[str, float]] get_autonomy_score (self)
str get_confidence_level (self)
Dict[str, any] get_calibration_summary (self)

Public Attributes

 sensor_id = sensor_id
list calibration_points = []
int n_params = 9
 population_prior_mean
float population_prior_cov = np.eye(9) * 0.1
float individual_prior_cov = np.eye(9) * 0.05
 theta_mean = self.population_prior_mean.copy()
float theta_cov = self.individual_prior_cov.copy()
float rls_P = np.eye(9) * 100.0
float forgetting_factor = 0.95
float glr_threshold = 2.0
int glr_window_size = 10
int env_variance_base = 1e-3
int alpha_v = 1e-4
float alpha_extrap = 100.0
dict env_variance_matrices
deque recent_residuals = deque(maxlen=10)
deque recent_uncertainties = deque(maxlen=10)
tuple calibration_points_max
float sigma_ref = 10.0
dict physical_params
 bias_model = GaussMarkovBiasModel()
float inflation_factor = 1.0

Protected Member Functions

float _extrapolation_variance (self, float adc_code)
float _measurement_variance (self, float adc_code, float tau=0.1)

Protected Attributes

 _last_pred_t = time.time()
 _last_bias_update_t = time.time()
Optional[] _noise_coeffs = None
float _allan_tau0 = 0.01

Detailed Description

Mathematically robust calibration framework implementing the paper's algorithms

Definition at line 98 of file robust_calibration.py.

Constructor & Destructor Documentation

◆ __init__()

robust_calibration.RobustCalibrationFramework.__init__ ( self,
int sensor_id )

Definition at line 103 of file robust_calibration.py.

Member Function Documentation

◆ _extrapolation_variance()

◆ _measurement_variance()

float robust_calibration.RobustCalibrationFramework._measurement_variance ( self,
float adc_code,
float tau = 0.1 )
protected
σ²_meas: Allan-derived if available, else env_variance_base + α_v·v².

Definition at line 405 of file robust_calibration.py.

References _noise_coeffs, alpha_v, and env_variance_base.

Referenced by predict_pressure_with_uncertainty().

◆ add_calibration_point()

Dict[str, any] robust_calibration.RobustCalibrationFramework.add_calibration_point ( self,
CalibrationPoint point )
Add a new calibration point and update the model

Definition at line 486 of file robust_calibration.py.

References _last_bias_update_t, fsw::calibration::RobustCalibrationFramework.bayesian_update(), bayesian_update(), bias_model, autonomous_lc_calibration.SensorCalibrationState.calibration_points, autonomous_pt_calibration.SensorCalibrationState.calibration_points, autonomous_rtd_calibration.SensorCalibrationState.calibration_points, autonomous_tc_calibration.SensorCalibrationState.calibration_points, calibration_sequence.CalibrationResult.calibration_points, calibration_sequence.PressureTransducerCalibrator.calibration_points, calibration_sequence.RTDCalibrator.calibration_points, calibration_sequence.SensorCalibrator.calibration_points, combined_gui.CalibrationWindow.calibration_points, imu_calibration.AccelerometerCalibrator.calibration_points, imu_calibration.GyroscopeCalibrator.calibration_points, imu_calibration.IMUCalibrator.calibration_points, imu_calibration.MagnetometerCalibrator.calibration_points, imu_calibration_gui.IMUCalibrationGUI.calibration_points, pt_calibration_gui.HighPerformanceCalibrationGUI.calibration_points, calibration_points, calibration_points_max, environmental_robust_basis_functions(), autonomous_calibration_engine.AdaptivePriorEvolution.forgetting_factor, forgetting_factor, fsw::calibration::RobustCalibrationFramework.generalized_likelihood_ratio_test(), generalized_likelihood_ratio_test(), get_confidence_level(), max, min, recent_residuals, fsw::calibration::RobustCalibrationFramework.recursive_least_squares_update(), recursive_least_squares_update(), rls_P, theta_cov, and theta_mean.

◆ bayesian_update()

Tuple[np.ndarray, np.ndarray] robust_calibration.RobustCalibrationFramework.bayesian_update ( self,
List[CalibrationPoint] new_points )
Bayesian update with hierarchical priors
Equations (126-149)

Definition at line 276 of file robust_calibration.py.

References theta_cov, theta_mean, fsw::calibration::RobustCalibrationFramework.total_least_squares_calibration(), and total_least_squares_calibration().

Referenced by add_calibration_point().

◆ environmental_robust_basis_functions()

np.ndarray robust_calibration.RobustCalibrationFramework.environmental_robust_basis_functions ( self,
float adc_code,
EnvironmentalState env )
Environmental-robust basis functions from equation (66-72)
Works directly on ADC codes (not voltage).

Definition at line 194 of file robust_calibration.py.

References max, and physical_params.

Referenced by add_calibration_point(), generalized_likelihood_ratio_test(), get_calibration_summary(), predict_pressure_with_uncertainty(), recursive_least_squares_update(), and total_least_squares_calibration().

◆ generalized_likelihood_ratio_test()

Tuple[float, bool] robust_calibration.RobustCalibrationFramework.generalized_likelihood_ratio_test ( self,
List[CalibrationPoint] new_points )

◆ get_autonomy_score()

◆ get_calibration_summary()

Dict[str, any] robust_calibration.RobustCalibrationFramework.get_calibration_summary ( self)
Get comprehensive calibration summary

Definition at line 617 of file robust_calibration.py.

References autonomous_lc_calibration.SensorCalibrationState.calibration_points, autonomous_pt_calibration.SensorCalibrationState.calibration_points, autonomous_rtd_calibration.SensorCalibrationState.calibration_points, autonomous_tc_calibration.SensorCalibrationState.calibration_points, calibration_sequence.CalibrationResult.calibration_points, calibration_sequence.PressureTransducerCalibrator.calibration_points, calibration_sequence.RTDCalibrator.calibration_points, calibration_sequence.SensorCalibrator.calibration_points, combined_gui.CalibrationWindow.calibration_points, imu_calibration.AccelerometerCalibrator.calibration_points, imu_calibration.GyroscopeCalibrator.calibration_points, imu_calibration.IMUCalibrator.calibration_points, imu_calibration.MagnetometerCalibrator.calibration_points, imu_calibration_gui.IMUCalibrationGUI.calibration_points, pt_calibration_gui.HighPerformanceCalibrationGUI.calibration_points, calibration_points, environmental_robust_basis_functions(), autonomous_calibration_engine.AdaptivePriorEvolution.forgetting_factor, forgetting_factor, get_confidence_level(), calibration_orchestrator.CalibrationOrchestrator.glr_threshold, glr_threshold, autonomous_calibration_engine.OnlineBayesianLearner.sensor_id, ball_valve_gui.ValvePanel.sensor_id, calibration_sequence.SensorCalibrator.sensor_id, daq_comms::protocol::ParsedSelfTestPacket::Result.sensor_id, fsw::config::PressureSensorSpec.sensor_id, fsw::config::SensorAssignment.sensor_id, imu_calibration.IMUCalibrator.sensor_id, sensor_id, Valve.sensor_id, theta_cov, and theta_mean.

Referenced by get_autonomy_score().

◆ get_confidence_level()

◆ predict_pressure_with_uncertainty()

Tuple[float, float] robust_calibration.RobustCalibrationFramework.predict_pressure_with_uncertainty ( self,
float adc_code,
EnvironmentalState env )
Predict pressure with full uncertainty quantification (paper Section 7).
σ²_pred = σ²_meas + φ'Σφ + σ²_extrap + h'Σ_b h + env + interaction
Mean: ŷ = φ'θ + h'b (Gauss-Markov bias).

Definition at line 420 of file robust_calibration.py.

References _extrapolation_variance(), _last_pred_t, _measurement_variance(), bias_model, env_variance_matrices, environmental_robust_basis_functions(), inflation_factor, max, min, recent_uncertainties, theta_cov, theta_mean, and time.time().

◆ recursive_least_squares_update()

Tuple[np.ndarray, np.ndarray] robust_calibration.RobustCalibrationFramework.recursive_least_squares_update ( self,
CalibrationPoint point )
Recursive Least Squares with forgetting factor
Equations (162-166)

Definition at line 306 of file robust_calibration.py.

References environmental_robust_basis_functions(), autonomous_calibration_engine.AdaptivePriorEvolution.forgetting_factor, forgetting_factor, rls_P, theta_cov, and theta_mean.

Referenced by add_calibration_point().

◆ set_noise_coeffs()

None robust_calibration.RobustCalibrationFramework.set_noise_coeffs ( self,
"NoiseCoefficients" coeffs,
float tau0 = 0.01 )
Use Allan variance NoiseCoefficients for σ²_meas (paper Section 3→7).

Definition at line 400 of file robust_calibration.py.

References _allan_tau0, and _noise_coeffs.

◆ set_theta_from_polynomial()

None robust_calibration.RobustCalibrationFramework.set_theta_from_polynomial ( self,
List[float] poly_coeffs,
float adc_norm_min,
float adc_norm_scale )
Initialize theta from polynomial calibration P = c0 + c1*x + c2*x^2 + c3*x^3
where x = (adc - adc_norm_min) / adc_norm_scale.
Gives robust calibration the correct slope so ZERO ALL + CAPTURE match polynomial accuracy.

Definition at line 169 of file robust_calibration.py.

References population_prior_mean, and theta_mean.

◆ total_least_squares_calibration()

Tuple[np.ndarray, np.ndarray] robust_calibration.RobustCalibrationFramework.total_least_squares_calibration ( self,
List[CalibrationPoint] points )
Total Least Squares calibration accounting for errors in both voltage and pressure
Equation (112-118)

Definition at line 239 of file robust_calibration.py.

References env_variance_base, environmental_robust_basis_functions(), theta_cov, and theta_mean.

Referenced by bayesian_update(), and generalized_likelihood_ratio_test().

Member Data Documentation

◆ _allan_tau0

float robust_calibration.RobustCalibrationFramework._allan_tau0 = 0.01
protected

Definition at line 167 of file robust_calibration.py.

Referenced by set_noise_coeffs().

◆ _last_bias_update_t

robust_calibration.RobustCalibrationFramework._last_bias_update_t = time.time()
protected

Definition at line 160 of file robust_calibration.py.

Referenced by add_calibration_point().

◆ _last_pred_t

robust_calibration.RobustCalibrationFramework._last_pred_t = time.time()
protected

Definition at line 159 of file robust_calibration.py.

Referenced by predict_pressure_with_uncertainty().

◆ _noise_coeffs

Optional[] robust_calibration.RobustCalibrationFramework._noise_coeffs = None
protected

Definition at line 166 of file robust_calibration.py.

Referenced by _measurement_variance(), and set_noise_coeffs().

◆ alpha_extrap

float robust_calibration.RobustCalibrationFramework.alpha_extrap = 100.0

Definition at line 132 of file robust_calibration.py.

Referenced by _extrapolation_variance().

◆ alpha_v

int robust_calibration.RobustCalibrationFramework.alpha_v = 1e-4

Definition at line 131 of file robust_calibration.py.

Referenced by _measurement_variance().

◆ bias_model

robust_calibration.RobustCalibrationFramework.bias_model = GaussMarkovBiasModel()

◆ calibration_points

robust_calibration.RobustCalibrationFramework.calibration_points = []

◆ calibration_points_max

tuple robust_calibration.RobustCalibrationFramework.calibration_points_max
Initial value:
= (
50 # cap to prevent unbounded growth over long sessions
)

Definition at line 141 of file robust_calibration.py.

Referenced by add_calibration_point().

◆ env_variance_base

int robust_calibration.RobustCalibrationFramework.env_variance_base = 1e-3

◆ env_variance_matrices

dict robust_calibration.RobustCalibrationFramework.env_variance_matrices
Initial value:
= {
"env": np.eye(5) * 0.0001,
"interaction": np.eye(5) * 0.00001,
}

Definition at line 133 of file robust_calibration.py.

Referenced by predict_pressure_with_uncertainty().

◆ forgetting_factor

robust_calibration.RobustCalibrationFramework.forgetting_factor = 0.95

◆ glr_threshold

robust_calibration.RobustCalibrationFramework.glr_threshold = 2.0

◆ glr_window_size

int robust_calibration.RobustCalibrationFramework.glr_window_size = 10

Definition at line 127 of file robust_calibration.py.

Referenced by generalized_likelihood_ratio_test().

◆ individual_prior_cov

float robust_calibration.RobustCalibrationFramework.individual_prior_cov = np.eye(9) * 0.05

Definition at line 115 of file robust_calibration.py.

◆ inflation_factor

float robust_calibration.RobustCalibrationFramework.inflation_factor = 1.0

Definition at line 163 of file robust_calibration.py.

Referenced by predict_pressure_with_uncertainty().

◆ n_params

int robust_calibration.RobustCalibrationFramework.n_params = 9

Definition at line 110 of file robust_calibration.py.

◆ physical_params

dict robust_calibration.RobustCalibrationFramework.physical_params
Initial value:
= {
"alpha1": 0.001,
"alpha2": 0.0001,
"beta1": 0.0001,
"beta2": 0.00001,
"gamma1": 0.0001,
"delta1": 0.001,
"delta2": 0.0001,
}

Definition at line 147 of file robust_calibration.py.

Referenced by environmental_robust_basis_functions().

◆ population_prior_cov

float robust_calibration.RobustCalibrationFramework.population_prior_cov = np.eye(9) * 0.1

Definition at line 114 of file robust_calibration.py.

◆ population_prior_mean

robust_calibration.RobustCalibrationFramework.population_prior_mean
Initial value:
= np.array(
[0.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
)

Definition at line 111 of file robust_calibration.py.

Referenced by set_theta_from_polynomial().

◆ recent_residuals

deque robust_calibration.RobustCalibrationFramework.recent_residuals = deque(maxlen=10)

Definition at line 139 of file robust_calibration.py.

Referenced by add_calibration_point(), and get_autonomy_score().

◆ recent_uncertainties

deque robust_calibration.RobustCalibrationFramework.recent_uncertainties = deque(maxlen=10)

Definition at line 140 of file robust_calibration.py.

Referenced by get_autonomy_score(), and predict_pressure_with_uncertainty().

◆ rls_P

float robust_calibration.RobustCalibrationFramework.rls_P = np.eye(9) * 100.0

Definition at line 122 of file robust_calibration.py.

Referenced by add_calibration_point(), and recursive_least_squares_update().

◆ sensor_id

robust_calibration.RobustCalibrationFramework.sensor_id = sensor_id

◆ sigma_ref

float robust_calibration.RobustCalibrationFramework.sigma_ref = 10.0

Definition at line 144 of file robust_calibration.py.

Referenced by get_autonomy_score().

◆ theta_cov

robust_calibration.RobustCalibrationFramework.theta_cov = self.individual_prior_cov.copy()

◆ theta_mean


The documentation for this class was generated from the following file: