aboutsummaryrefslogtreecommitdiff
path: root/example/ndpiReader.c
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2021-03-11 00:04:33 +0100
committerLuca Deri <deri@ntop.org>2021-03-11 00:04:33 +0100
commit6833ee2bbec4c2de2489a2091f6c2d1ce0b7b558 (patch)
tree4a4f04e0e282482b6e45e58ad5737173db470612 /example/ndpiReader.c
parent5b7fe1360a1ed13c9cf6e1f789f0c1a20b175bd8 (diff)
Added single exponential smoothing API
int ndpi_ses_init(struct ndpi_ses_struct *ses, double alpha, float significance); int ndpi_ses_add_value(struct ndpi_ses_struct *ses, const u_int32_t _value, double *forecast, double *confidence_band);
Diffstat (limited to 'example/ndpiReader.c')
-rw-r--r--example/ndpiReader.c152
1 files changed, 138 insertions, 14 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c
index aec78d778..3e9c54f8d 100644
--- a/example/ndpiReader.c
+++ b/example/ndpiReader.c
@@ -3722,20 +3722,53 @@ void rulesUnitTest() {
void rsiUnitTest() {
struct ndpi_rsi_struct s;
unsigned int v[] = {
+ 31,
+ 87,
+ 173,
+ 213,
+ 223,
+ 230,
+ 238,
+ 245,
+ 251,
+ 151,
+ 259,
+ 261,
+ 264,
+ 264,
+ 270,
+ 273,
+ 288,
+ 288,
+ 304,
+ 304,
+ 350,
+ 384,
+ 423,
+ 439,
+ 445,
+ 445,
+ 445,
+ 445
+ };
+
+ unsigned int v1[] = {
+
2227, 2219, 2208, 2217, 2218, 2213, 2223, 2243, 2224, 2229,
2215, 2239, 2238, 2261, 2336, 2405, 2375, 2383, 2395, 2363,
2382, 2387, 2365, 2319, 2310, 2333, 2268, 2310, 2240, 2217,
};
u_int i, n = sizeof(v) / sizeof(unsigned int);
-
+ u_int debug = 0;
+
assert(ndpi_alloc_rsi(&s, 8) == 0);
for(i=0; i<n; i++) {
float rsi = ndpi_rsi_add_value(&s, v[i]);
-#if 0
- printf("%2d) RSI = %f\n", i, rsi);
-#endif
+
+ if(debug)
+ printf("%2d) RSI = %f\n", i, rsi);
}
ndpi_free_rsi(&s);
@@ -3796,7 +3829,6 @@ void hwUnitTest() {
void hwUnitTest2() {
struct ndpi_hw_struct hw;
- u_int num_learning_points = 12;
u_int8_t trace = 1;
double v[] = {
31.908466339111,
@@ -3814,7 +3846,7 @@ void hwUnitTest2() {
264.78540039062,
264.78540039062,
270.47451782227,
- 273.3671875,
+ 173.3671875,
288.34222412109,
288.34222412109,
304.24795532227,
@@ -3828,13 +3860,20 @@ void hwUnitTest2() {
445.05981445312,
445.05981445312
};
+ u_int num_learning_points = 1;
u_int i, num = sizeof(v) / sizeof(double);
- float alpha = 0.5, beta = 0.5, gamma = 0.1;
-
- assert(ndpi_hw_init(&hw, num_learning_points, 0 /* 0=multiplicative, 1=additive */, alpha, beta, gamma, 0.05) == 0);
+ float alpha = 0.9, beta = 0.5, gamma = 1;
+ FILE *fd = fopen("/tmp/result.csv", "w");
- if(trace)
+ assert(ndpi_hw_init(&hw, num_learning_points, 0 /* 0=multiplicative, 1=additive */,
+ alpha, beta, gamma, 0.05) == 0);
+
+ if(trace) {
printf("\nHolt-Winters [alpha: %.1f][beta: %.1f][gamma: %.1f]\n", alpha, beta, gamma);
+
+ if(fd)
+ fprintf(fd, "index;value;prediction;lower;upper;anomaly\n");
+ }
for(i=0; i<num; i++) {
double prediction, confidence_band;
@@ -3843,13 +3882,94 @@ void hwUnitTest2() {
lower = prediction - confidence_band, upper = prediction + confidence_band;
- if(trace)
+ if(trace) {
printf("%2u)\t%12.3f\t%.3f\t%12.3f\t%12.3f\t %s [%.3f]\n", i, v[i], prediction, lower, upper,
((rc == 0) || ((v[i] >= lower) && (v[i] <= upper))) ? "OK" : "ANOMALY",
confidence_band);
+
+ if(fd)
+ fprintf(fd, "%u;%.0f;%.0f;%.0f;%.0f;%s\n",
+ i, v[i], prediction, lower, upper,
+ ((rc == 0) || ((v[i] >= lower) && (v[i] <= upper))) ? "OK" : "ANOMALY");
+ }
}
-
+
+ if(fd) fclose(fd);
+
ndpi_hw_free(&hw);
+
+ //exit(0);
+}
+
+/* *********************************************** */
+
+void sesUnitTest() {
+ struct ndpi_ses_struct ses;
+ u_int8_t trace = 0;
+ double v[] = {
+ 31.908466339111,
+ 87.339714050293,
+ 173.47660827637,
+ 213.92568969727,
+ 223.32124328613,
+ 230.60134887695,
+ 238.09457397461,
+ 245.8137512207,
+ 251.09228515625,
+ 251.09228515625,
+ 259.21997070312,
+ 261.98754882812,
+ 264.78540039062,
+ 264.78540039062,
+ 270.47451782227,
+ 173.3671875,
+ 288.34222412109,
+ 288.34222412109,
+ 304.24795532227,
+ 304.24795532227,
+ 350.92227172852,
+ 384.54431152344,
+ 423.25942993164,
+ 439.43322753906,
+ 445.05981445312,
+ 445.05981445312,
+ 445.05981445312,
+ 445.05981445312
+ };
+ u_int num_learning_points = 1;
+ u_int i, num = sizeof(v) / sizeof(double);
+ float alpha = 0.9;
+ FILE *fd = fopen("/tmp/result.csv", "w");
+
+ assert(ndpi_ses_init(&ses, alpha, 0.05) == 0);
+
+ if(trace) {
+ printf("\nSingle Exponential Smoothing [alpha: %.1f]\n", alpha);
+
+ if(fd)
+ fprintf(fd, "index;value;prediction;lower;upper;anomaly\n");
+ }
+
+ for(i=0; i<num; i++) {
+ double prediction, confidence_band;
+ double lower, upper;
+ int rc = ndpi_ses_add_value(&ses, v[i], &prediction, &confidence_band);
+
+ lower = prediction - confidence_band, upper = prediction + confidence_band;
+
+ if(trace) {
+ printf("%2u)\t%12.3f\t%.3f\t%12.3f\t%12.3f\t %s [%.3f]\n", i, v[i], prediction, lower, upper,
+ ((rc == 0) || ((v[i] >= lower) && (v[i] <= upper))) ? "OK" : "ANOMALY",
+ confidence_band);
+
+ if(fd)
+ fprintf(fd, "%u;%.0f;%.0f;%.0f;%.0f;%s\n",
+ i, v[i], prediction, lower, upper,
+ ((rc == 0) || ((v[i] >= lower) && (v[i] <= upper))) ? "OK" : "ANOMALY");
+ }
+ }
+
+ if(fd) fclose(fd);
}
/* *********************************************** */
@@ -3938,8 +4058,12 @@ int original_main(int argc, char **argv) {
return(-1);
}
- // hwUnitTest2();
-
+#ifdef HW_TEST
+ hwUnitTest2();
+#endif
+
+ sesUnitTest();
+
/* Internal checks */
// binUnitTest();
//hwUnitTest();