dd

Dependencies:   xtoff2 RF24Network mbed

Fork of xtoff3 by pieter Berteloot

Committer:
gimohd
Date:
Wed Sep 05 07:50:27 2018 +0000
Revision:
16:691649d8a3da
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gimohd 16:691649d8a3da 1 #include "Maths.h"
gimohd 16:691649d8a3da 2 #include "mbed.h"
gimohd 16:691649d8a3da 3
gimohd 16:691649d8a3da 4 int Maths::comp(const void* elem1, const void* elem2)
gimohd 16:691649d8a3da 5 {
gimohd 16:691649d8a3da 6 if(*(const float*)elem1 < *(const float*)elem2)
gimohd 16:691649d8a3da 7 return -1;
gimohd 16:691649d8a3da 8 return *(const float*)elem1 > *(const float*)elem2;
gimohd 16:691649d8a3da 9 }
gimohd 16:691649d8a3da 10
gimohd 16:691649d8a3da 11 float Maths::mean(float *samples, int n, int n2)
gimohd 16:691649d8a3da 12 {
gimohd 16:691649d8a3da 13 float sum = 0.0;
gimohd 16:691649d8a3da 14 for (int i=0; i<n2-n; i++) {
gimohd 16:691649d8a3da 15 sum += samples[n+i];
gimohd 16:691649d8a3da 16 }
gimohd 16:691649d8a3da 17 return sum / (float)(n2-n);
gimohd 16:691649d8a3da 18 }
gimohd 16:691649d8a3da 19
gimohd 16:691649d8a3da 20 float Maths::median(float *samples, int n)
gimohd 16:691649d8a3da 21 {
gimohd 16:691649d8a3da 22 qsort(samples, n, sizeof(float), Maths::comp);
gimohd 16:691649d8a3da 23
gimohd 16:691649d8a3da 24 return mean(samples, (n - 1)/2 - 990,(n - 1)/2 + 990);
gimohd 16:691649d8a3da 25 }
gimohd 16:691649d8a3da 26
gimohd 16:691649d8a3da 27 float Maths::stdev(float data[] , int n)
gimohd 16:691649d8a3da 28 {
gimohd 16:691649d8a3da 29 float sum = 0.0, mean2, standardDeviation = 0.0;
gimohd 16:691649d8a3da 30 int i;
gimohd 16:691649d8a3da 31 mean2 = Maths::mean(data,0,n);
gimohd 16:691649d8a3da 32
gimohd 16:691649d8a3da 33 for(i = 0; i < n; ++i)
gimohd 16:691649d8a3da 34 standardDeviation += pow(data[i] - mean2, 2);
gimohd 16:691649d8a3da 35
gimohd 16:691649d8a3da 36 return sqrt(standardDeviation / n);
gimohd 16:691649d8a3da 37 }
gimohd 16:691649d8a3da 38
gimohd 16:691649d8a3da 39
gimohd 16:691649d8a3da 40 float Maths::meanNoOutliers(float data[] , int n)
gimohd 16:691649d8a3da 41 {
gimohd 16:691649d8a3da 42 float mean = Maths::mean(data,0,n);
gimohd 16:691649d8a3da 43 float stdev = Maths::stdev(data,n);
gimohd 16:691649d8a3da 44 float amount = 0;
gimohd 16:691649d8a3da 45 float sum = 0;
gimohd 16:691649d8a3da 46 for(int i = 0; i < n; ++i) {
gimohd 16:691649d8a3da 47 if (data[i] <= mean + 1*stdev && data[i] >= mean - 1*stdev) {
gimohd 16:691649d8a3da 48 amount ++;
gimohd 16:691649d8a3da 49 sum += data[i];
gimohd 16:691649d8a3da 50 }
gimohd 16:691649d8a3da 51 }
gimohd 16:691649d8a3da 52 return sum/amount;
gimohd 16:691649d8a3da 53
gimohd 16:691649d8a3da 54
gimohd 16:691649d8a3da 55 }