asdf

Dependencies:   L3GD20 LSM303DLHC mbed

Committer:
goy5022
Date:
Thu Apr 03 23:58:04 2014 +0000
Revision:
8:ce5b1bf38077
Parent:
2:997f57aee3b7
asdf

Who changed what in which revision?

UserRevisionLine numberNew 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