diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_api.h | 9 | ||||
-rw-r--r-- | src/lib/ndpi_analyze.c | 27 |
2 files changed, 33 insertions, 3 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index d3b02a4d5..2edcd69ad 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -1714,13 +1714,15 @@ extern "C" { double alpha, double beta, double gamma, float significance); void ndpi_hw_free(struct ndpi_hw_struct *hw); int ndpi_hw_add_value(struct ndpi_hw_struct *hw, const u_int64_t value, double *forecast, double *confidence_band); - + void ndpi_hw_reset(struct ndpi_hw_struct *hw); + /* ******************************* */ int ndpi_ses_init(struct ndpi_ses_struct *ses, double alpha, float significance); int ndpi_ses_add_value(struct ndpi_ses_struct *ses, const double _value, double *forecast, double *confidence_band); void ndpi_ses_fitting(double *values, u_int32_t num_values, float *ret_alpha); - + void ndpi_ses_reset(struct ndpi_ses_struct *ses); + /* ******************************* */ u_int32_t ndpi_crc32(const void* data, size_t n_bytes); @@ -1730,7 +1732,8 @@ extern "C" { int ndpi_des_init(struct ndpi_des_struct *des, double alpha, double beta, float significance); int ndpi_des_add_value(struct ndpi_des_struct *des, const double _value, double *forecast, double *confidence_band); void ndpi_des_fitting(double *values, u_int32_t num_values, float *ret_alpha, float *ret_beta); - + void ndpi_des_reset(struct ndpi_des_struct *des); + /* ******************************* */ int ndpi_jitter_init(struct ndpi_jitter_struct *hw, u_int16_t num_periods); diff --git a/src/lib/ndpi_analyze.c b/src/lib/ndpi_analyze.c index 5eb2c1bea..178097b9f 100644 --- a/src/lib/ndpi_analyze.c +++ b/src/lib/ndpi_analyze.c @@ -1206,6 +1206,17 @@ int ndpi_hw_add_value(struct ndpi_hw_struct *hw, const u_int64_t _value, double } } +/* *********************************************************** */ + +void ndpi_hw_reset(struct ndpi_hw_struct *hw) { + hw->prev_error.sum_square_error = 0, hw->prev_error.num_values_rollup = 0; + hw->num_values = 0; + hw->u = hw->v = hw->sum_square_error = 0; + + memset(&hw->y, 0, (hw->params.num_season_periods * sizeof(u_int64_t))); + memset(&hw->s, 0, (hw->params.num_season_periods * sizeof(double))); +} + /* ********************************************************************************* */ /* ********************************************************************************* */ @@ -1348,6 +1359,14 @@ int ndpi_ses_add_value(struct ndpi_ses_struct *ses, const double _value, double /* *********************************************************** */ +void ndpi_ses_reset(struct ndpi_ses_struct *ses) { + ses->prev_error.sum_square_error = 0, ses->prev_error.num_values_rollup = 0; + ses->num_values = 0; + ses->sum_square_error = ses->last_forecast = ses->last_value = 0; +} + +/* *********************************************************** */ + /* Computes the best alpha value using the specified values used for training */ @@ -1430,6 +1449,14 @@ int ndpi_des_init(struct ndpi_des_struct *des, double alpha, double beta, float /* *********************************************************** */ +void ndpi_des_reset(struct ndpi_des_struct *des) { + des->prev_error.sum_square_error = 0, des->prev_error.num_values_rollup = 0; + des->num_values = 0; + des->sum_square_error = des->last_forecast = des->last_trend = des->last_value = 0; +} + +/* *********************************************************** */ + /* Returns the forecast and the band (forecast +/- band are the upper and lower values) |