///|
pub fn default_kalman_config() -> KalmanConfig {
{
process_noise: 0.35,
measurement_noise: 4.0,
initial_error: 16.0,
min_variance: 0.000001,
gate_sigma: 3.0,
}
}
///|
pub fn default_window_config() -> WindowConfig {
{
min_size: 4,
max_size: 24,
low_variance: 0.8,
high_variance: 9.0,
expansion_step: 2,
shrink_step: 3,
}
}
///|
pub fn default_eta_config() -> EtaConfig {
{
min_speed: 0.5,
max_speed: 55.0,
history_weight: 0.45,
live_weight: 0.55,
reliability_floor: 0.15,
}
}
///|
pub fn clamp(value : Double, low : Double, high : Double) -> Double {
if value < low {
low
} else if value > high {
high
} else {
value
}
}
///|
pub fn abs_double(value : Double) -> Double {
if value < 0.0 {
0.0 - value
} else {
value
}
}
///|
pub fn square(value : Double) -> Double {
value * value
}
///|
pub fn safe_div(
numerator : Double,
denominator : Double,
fallback : Double,
) -> Double {
if abs_double(denominator) <= 0.0000001 {
fallback
} else {
numerator / denominator
}
}