48#define DEFAULT_SAMPLING_INTERVAL (1.f)
49#define INITIAL_BLACKOUT (45.f)
50#define INDEX_GAIN (230.f)
51#define SRAW_STD_INITIAL (50.f)
52#define SRAW_STD_BONUS_VOC (220.f)
53#define SRAW_STD_NOX (2000.f)
54#define TAU_MEAN_HOURS (12.f)
55#define TAU_VARIANCE_HOURS (12.f)
56#define TAU_INITIAL_MEAN_VOC (20.f)
57#define TAU_INITIAL_MEAN_NOX (1200.f)
58#define INIT_DURATION_MEAN_VOC ((3600.f * 0.75f))
59#define INIT_DURATION_MEAN_NOX ((3600.f * 4.75f))
60#define INIT_TRANSITION_MEAN (0.01f)
61#define TAU_INITIAL_VARIANCE (2500.f)
62#define INIT_DURATION_VARIANCE_VOC ((3600.f * 1.45f))
63#define INIT_DURATION_VARIANCE_NOX ((3600.f * 5.70f))
64#define INIT_TRANSITION_VARIANCE (0.01f)
65#define GATING_THRESHOLD_VOC (340.f)
66#define GATING_THRESHOLD_NOX (30.f)
67#define GATING_THRESHOLD_INITIAL (510.f)
68#define GATING_THRESHOLD_TRANSITION (0.09f)
69#define GATING_VOC_MAX_DURATION_MINUTES ((60.f * 3.f))
70#define GATING_NOX_MAX_DURATION_MINUTES ((60.f * 12.f))
71#define GATING_MAX_RATIO (0.3f)
72#define SIGMOID_L (500.f)
73#define SIGMOID_K_VOC (-0.0065f)
74#define SIGMOID_X0_VOC (213.f)
75#define SIGMOID_K_NOX (-0.0101f)
76#define SIGMOID_X0_NOX (614.f)
77#define VOC_INDEX_OFFSET_DEFAULT (100.f)
78#define NOX_INDEX_OFFSET_DEFAULT (1.f)
79#define LP_TAU_FAST (20.0f)
80#define LP_TAU_SLOW (500.0f)
81#define LP_ALPHA (-0.2f)
82#define VOC_SRAW_MINIMUM (20000)
83#define NOX_SRAW_MINIMUM (10000)
84#define PERSISTENCE_UPTIME_GAMMA ((3.f * 3600.f))
85#define TUNING_INDEX_OFFSET_MIN (1)
86#define TUNING_INDEX_OFFSET_MAX (250)
87#define TUNING_LEARNING_TIME_OFFSET_HOURS_MIN (1)
88#define TUNING_LEARNING_TIME_OFFSET_HOURS_MAX (1000)
89#define TUNING_LEARNING_TIME_GAIN_HOURS_MIN (1)
90#define TUNING_LEARNING_TIME_GAIN_HOURS_MAX (1000)
91#define TUNING_GATING_MAX_DURATION_MINUTES_MIN (0)
92#define TUNING_GATING_MAX_DURATION_MINUTES_MAX (3000)
93#define TUNING_STD_INITIAL_MIN (10)
94#define TUNING_STD_INITIAL_MAX (5000)
95#define TUNING_GAIN_FACTOR_MIN (1)
96#define TUNING_GAIN_FACTOR_MAX (1000)
97#define MEAN_VARIANCE_ESTIMATOR_GAMMA_SCALING (64.f)
98#define MEAN_VARIANCE_ESTIMATOR_ADDITIONAL_GAMMA_MEAN_SCALING (8.f)
99#define MEAN_VARIANCE_ESTIMATOR_FIX16_MAX (32767.f)
215 a_mean_variance_estimator_set_parameters(params);
216 a_mox_model_set_parameters(params,
217 a_mean_variance_estimator_get_std(params),
218 a_mean_variance_estimator_get_mean(params));
231 a_adaptive_lowpass_set_parameters(params);
243 float std,
float uptime_gamma)
295 return (1.f / (1.f + expf(x)));
307 float sigmoid_gamma_mean;
309 float gating_threshold_mean;
310 float sigmoid_gating_mean;
311 float sigmoid_gamma_variance;
312 float gamma_variance;
313 float gating_threshold_variance;
314 float sigmoid_gating_variance;
329 sigmoid_gamma_mean = a_mean_variance_estimator_sigmoid_process(params,
334 sigmoid_gamma_mean));
337 a_mean_variance_estimator_sigmoid_process(params,
339 a_mean_variance_estimator_sigmoid_set_parameters(params, gating_threshold_mean,
341 sigmoid_gating_mean = a_mean_variance_estimator_sigmoid_process(params, params->
m_gas_index);
345 sigmoid_gamma_variance = a_mean_variance_estimator_sigmoid_process(params,
350 (sigmoid_gamma_variance - sigmoid_gamma_mean)));
352 a_mean_variance_estimator_sigmoid_process(params,
354 a_mean_variance_estimator_sigmoid_set_parameters(params, gating_threshold_variance,
356 sigmoid_gating_variance = a_mean_variance_estimator_sigmoid_process(params, params->
m_gas_index);
360 (((1.f - sigmoid_gating_mean) *
382 float additional_scaling;
400 a_mean_variance_estimator_calculate_gamma(params);
403 if ((delta_sgp < 0.f))
411 additional_scaling = 1.f;
414 additional_scaling = ((c / 1440.f) * (c / 1440.f));
417 (sqrtf((additional_scaling *
424 delta_sgp) / additional_scaling) * delta_sgp))));
487 return (((
SIGMOID_L + shift) / (1.f + expf(x))) - shift);
525 if ((abs_delta < 0.f))
527 abs_delta = (-1.f * abs_delta);
547 a_init_instances(params);
613 *state0 = a_mean_variance_estimator_get_mean(params);
614 *state1 = a_mean_variance_estimator_get_std(params);
626 a_mox_model_set_parameters(params,
627 a_mean_variance_estimator_get_std(params),
628 a_mean_variance_estimator_get_mean(params));
643 int32_t learning_time_offset_hours, int32_t learning_time_gain_hours,
644 int32_t gating_max_duration_minutes, int32_t std_initial,
653 a_init_instances(params);
667 int32_t *learning_time_offset_hours, int32_t *learning_time_gain_hours,
668 int32_t *gating_max_duration_minutes, int32_t *std_initial,
669 int32_t *gain_factor)
694 if (((sraw > 0) && (sraw < 65000)))
707 || a_mean_variance_estimator_is_initialized(params)))
721 if ((params->
m_sraw > 0.f))
723 a_mean_variance_estimator_process(params, params->
m_sraw);
724 a_mox_model_set_parameters(params,
725 a_mean_variance_estimator_get_std(params),
726 a_mean_variance_estimator_get_mean(params));
729 *gas_index = ((int32_t)((params->
m_gas_index + 0.5f)));
#define GATING_NOX_MAX_DURATION_MINUTES
#define INIT_TRANSITION_MEAN
#define NOX_INDEX_OFFSET_DEFAULT
#define MEAN_VARIANCE_ESTIMATOR_FIX16_MAX
#define GATING_THRESHOLD_TRANSITION
#define VOC_INDEX_OFFSET_DEFAULT
#define TAU_INITIAL_MEAN_VOC
#define GATING_THRESHOLD_NOX
#define INIT_DURATION_VARIANCE_VOC
#define INIT_DURATION_MEAN_NOX
#define MEAN_VARIANCE_ESTIMATOR_ADDITIONAL_GAMMA_MEAN_SCALING
#define TAU_INITIAL_VARIANCE
#define DEFAULT_SAMPLING_INTERVAL
algorithm params definition
#define PERSISTENCE_UPTIME_GAMMA
#define SRAW_STD_BONUS_VOC
#define INIT_TRANSITION_VARIANCE
#define TAU_INITIAL_MEAN_NOX
#define INIT_DURATION_MEAN_VOC
#define GATING_VOC_MAX_DURATION_MINUTES
#define GATING_THRESHOLD_VOC
#define MEAN_VARIANCE_ESTIMATOR_GAMMA_SCALING
#define GATING_THRESHOLD_INITIAL
#define TAU_VARIANCE_HOURS
#define INIT_DURATION_VARIANCE_NOX
driver sgp41 algorithm header file
void sgp41_algorithm_set_tuning_parameters(sgp41_gas_index_algorithm_t *params, int32_t index_offset, int32_t learning_time_offset_hours, int32_t learning_time_gain_hours, int32_t gating_max_duration_minutes, int32_t std_initial, int32_t gain_factor)
algorithm set tuning parameters
void sgp41_algorithm_process(sgp41_gas_index_algorithm_t *params, int32_t sraw, int32_t *gas_index)
algorithm process
void sgp41_algorithm_get_states(const sgp41_gas_index_algorithm_t *params, float *state0, float *state1)
algorithm get states
void sgp41_algorithm_get_sampling_interval(const sgp41_gas_index_algorithm_t *params, float *sampling_interval)
algorithm get sampling interval
void sgp41_algorithm_init_with_sampling_interval(sgp41_gas_index_algorithm_t *params, int32_t algorithm_type, float sampling_interval)
algorithm init with sampling interval
struct sgp41_gas_index_algorithm_s sgp41_gas_index_algorithm_t
sgp41 gas index algorithm structure definition
void sgp41_algorithm_init(sgp41_gas_index_algorithm_t *params, int32_t algorithm_type)
algorithm init
#define SGP41_ALGORITHM_TYPE_VOC
sgp41 algorithm type definition
void sgp41_algorithm_get_tuning_parameters(const sgp41_gas_index_algorithm_t *params, int32_t *index_offset, int32_t *learning_time_offset_hours, int32_t *learning_time_gain_hours, int32_t *gating_max_duration_minutes, int32_t *std_initial, int32_t *gain_factor)
algorithm get tuning parameters
void sgp41_algorithm_reset(sgp41_gas_index_algorithm_t *params)
algorithm reset
#define SGP41_ALGORITHM_TYPE_NOX
void sgp41_algorithm_set_states(sgp41_gas_index_algorithm_t *params, float state0, float state1)
algorithm set states
float m_adaptive_lowpass_a2
float m_mean_variance_estimator_std
uint8_t m_mean_variance_estimator_initialized
float m_mean_variance_estimator_sigmoid_k
float m_mean_variance_estimator_gamma_initial_mean
float m_mean_variance_estimator_uptime_gating
uint8_t m_adaptive_lowpass_initialized
float m_mean_variance_estimator_gamma_initial_variance
float m_mean_variance_estimator_n_gamma_mean
float m_mean_variance_estimator_uptime_gamma
float m_sampling_interval
float m_init_duration_variance
float m_adaptive_lowpass_x2
float m_mox_model_sraw_std
float m_adaptive_lowpass_x3
float m_mean_variance_estimator_sraw_offset
float m_tau_variance_hours
float m_gating_max_duration_minutes
float m_init_duration_mean
float m_sigmoid_scaled_offset_default
float m_mox_model_sraw_mean
float m_adaptive_lowpass_a1
float m_mean_variance_estimator_gamma_variance
float m_sigmoid_scaled_x0
float m_mean_variance_estimator_mean
float m_mean_variance_estimator_sigmoid_x0
float m_mean_variance_estimator_n_gamma_variance
float m_mean_variance_estimator_gamma_mean
float m_adaptive_lowpass_x1
float m_mean_variance_estimator_gating_duration_minutes