![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
dd
Dependencies: xtoff2 RF24Network mbed
Fork of xtoff3 by
Maths.cpp@16:691649d8a3da, 2018-09-05 (annotated)
- Committer:
- gimohd
- Date:
- Wed Sep 05 07:50:27 2018 +0000
- Revision:
- 16:691649d8a3da
test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |