asdf
Dependencies: L3GD20 LSM303DLHC mbed
Headers/WeightedAverage.h@8:ce5b1bf38077, 2014-04-03 (annotated)
- Committer:
- goy5022
- Date:
- Thu Apr 03 23:58:04 2014 +0000
- Revision:
- 8:ce5b1bf38077
- Parent:
- 2:997f57aee3b7
asdf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
goy5022 | 2:997f57aee3b7 | 1 | #ifndef WEIGHTED_AVERAGE_H |
goy5022 | 2:997f57aee3b7 | 2 | #define WEIGHTED_AVERAGE_H |
goy5022 | 2:997f57aee3b7 | 3 | |
goy5022 | 2:997f57aee3b7 | 4 | // Updated every 4th sample, ~16ms |
goy5022 | 2:997f57aee3b7 | 5 | #define WEIGHTED_BUFFER_SIZE 64 |
goy5022 | 2:997f57aee3b7 | 6 | |
goy5022 | 2:997f57aee3b7 | 7 | class WeightedAverage |
goy5022 | 2:997f57aee3b7 | 8 | { |
goy5022 | 2:997f57aee3b7 | 9 | public: |
goy5022 | 2:997f57aee3b7 | 10 | explicit WeightedAverage() |
goy5022 | 2:997f57aee3b7 | 11 | { |
goy5022 | 2:997f57aee3b7 | 12 | reset(); |
goy5022 | 2:997f57aee3b7 | 13 | } |
goy5022 | 2:997f57aee3b7 | 14 | |
goy5022 | 2:997f57aee3b7 | 15 | void add(float reading) |
goy5022 | 2:997f57aee3b7 | 16 | { |
goy5022 | 2:997f57aee3b7 | 17 | total -= buff[ptr % BUFFER_SIZE]; |
goy5022 | 2:997f57aee3b7 | 18 | total += reading; |
goy5022 | 2:997f57aee3b7 | 19 | buff[ptr++] = reading; |
goy5022 | 2:997f57aee3b7 | 20 | } |
goy5022 | 2:997f57aee3b7 | 21 | |
goy5022 | 2:997f57aee3b7 | 22 | float average() |
goy5022 | 2:997f57aee3b7 | 23 | { |
goy5022 | 2:997f57aee3b7 | 24 | float avg = 0; |
goy5022 | 2:997f57aee3b7 | 25 | |
goy5022 | 2:997f57aee3b7 | 26 | int n = (BUFFER_SIZE > ptr ? BUFFER_SIZE : ptr); |
goy5022 | 2:997f57aee3b7 | 27 | |
goy5022 | 2:997f57aee3b7 | 28 | for(int i = 0; i < n; i++) |
goy5022 | 2:997f57aee3b7 | 29 | { |
goy5022 | 2:997f57aee3b7 | 30 | avg += (i * buff[i]); |
goy5022 | 2:997f57aee3b7 | 31 | } |
goy5022 | 2:997f57aee3b7 | 32 | |
goy5022 | 2:997f57aee3b7 | 33 | return avg / ((n * (n + 1)) / 2); |
goy5022 | 2:997f57aee3b7 | 34 | } |
goy5022 | 2:997f57aee3b7 | 35 | |
goy5022 | 2:997f57aee3b7 | 36 | void reset() |
goy5022 | 2:997f57aee3b7 | 37 | { |
goy5022 | 2:997f57aee3b7 | 38 | ptr = 0; |
goy5022 | 2:997f57aee3b7 | 39 | total = 0; |
goy5022 | 2:997f57aee3b7 | 40 | for(int i = 0; i < BUFFER_SIZE; i++) |
goy5022 | 2:997f57aee3b7 | 41 | buff[i] = 0.0f; |
goy5022 | 2:997f57aee3b7 | 42 | } |
goy5022 | 2:997f57aee3b7 | 43 | |
goy5022 | 2:997f57aee3b7 | 44 | private: |
goy5022 | 2:997f57aee3b7 | 45 | unsigned long ptr; |
goy5022 | 2:997f57aee3b7 | 46 | float total; |
goy5022 | 2:997f57aee3b7 | 47 | float buff [WEIGHTED_BUFFER_SIZE]; |
goy5022 | 2:997f57aee3b7 | 48 | }; |
goy5022 | 2:997f57aee3b7 | 49 | |
goy5022 | 2:997f57aee3b7 | 50 | WeightedAverage leftWeightedAvg; |
goy5022 | 2:997f57aee3b7 | 51 | WeightedAverage rightWeightedAvg; |
goy5022 | 2:997f57aee3b7 | 52 | WeightedAverage frontWeightedAvg; |
goy5022 | 2:997f57aee3b7 | 53 | |
goy5022 | 2:997f57aee3b7 | 54 | #endif |