A simple class to buffer data and compute some statistics on that data.

Dependents:   WattEye

Committer:
WiredHome
Date:
Sat Jul 26 19:49:42 2014 +0000
Revision:
0:8c041d5d34b2
Keeps track of some simple statistics.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:8c041d5d34b2 1
WiredHome 0:8c041d5d34b2 2 #include "StatisticQueue.h"
WiredHome 0:8c041d5d34b2 3
WiredHome 0:8c041d5d34b2 4 StatisticQueue::StatisticQueue(int numEntries)
WiredHome 0:8c041d5d34b2 5 {
WiredHome 0:8c041d5d34b2 6 items = (float *)malloc(numEntries * sizeof(float));
WiredHome 0:8c041d5d34b2 7 if (items) {
WiredHome 0:8c041d5d34b2 8 queueSize = numEntries;
WiredHome 0:8c041d5d34b2 9 Clear();
WiredHome 0:8c041d5d34b2 10 } else {
WiredHome 0:8c041d5d34b2 11 // crash and burn
WiredHome 0:8c041d5d34b2 12 printf("Can't get memory\r\n");
WiredHome 0:8c041d5d34b2 13 queueSize = -1;
WiredHome 0:8c041d5d34b2 14 }
WiredHome 0:8c041d5d34b2 15 }
WiredHome 0:8c041d5d34b2 16
WiredHome 0:8c041d5d34b2 17 StatisticQueue::~StatisticQueue()
WiredHome 0:8c041d5d34b2 18 {
WiredHome 0:8c041d5d34b2 19 if (items)
WiredHome 0:8c041d5d34b2 20 free(items);
WiredHome 0:8c041d5d34b2 21 }
WiredHome 0:8c041d5d34b2 22
WiredHome 0:8c041d5d34b2 23 void StatisticQueue::Clear(void)
WiredHome 0:8c041d5d34b2 24 {
WiredHome 0:8c041d5d34b2 25 for (int i=0; i<queueSize; i++) {
WiredHome 0:8c041d5d34b2 26 items[i] = 0.0f;
WiredHome 0:8c041d5d34b2 27 }
WiredHome 0:8c041d5d34b2 28 currentCount = 0;
WiredHome 0:8c041d5d34b2 29 nextIndex = 0;
WiredHome 0:8c041d5d34b2 30 }
WiredHome 0:8c041d5d34b2 31
WiredHome 0:8c041d5d34b2 32 void StatisticQueue::EnterItem(float value)
WiredHome 0:8c041d5d34b2 33 {
WiredHome 0:8c041d5d34b2 34 __disable_irq();
WiredHome 0:8c041d5d34b2 35 items[nextIndex++] = value;
WiredHome 0:8c041d5d34b2 36 if (nextIndex >= queueSize)
WiredHome 0:8c041d5d34b2 37 nextIndex = 0;
WiredHome 0:8c041d5d34b2 38 currentCount++;
WiredHome 0:8c041d5d34b2 39 if (currentCount > queueSize)
WiredHome 0:8c041d5d34b2 40 currentCount = queueSize;
WiredHome 0:8c041d5d34b2 41 __enable_irq();
WiredHome 0:8c041d5d34b2 42 }
WiredHome 0:8c041d5d34b2 43
WiredHome 0:8c041d5d34b2 44 float StatisticQueue::Average(void)
WiredHome 0:8c041d5d34b2 45 {
WiredHome 0:8c041d5d34b2 46 float result = 0.0f;
WiredHome 0:8c041d5d34b2 47 for (int i=0; i<currentCount; i++) {
WiredHome 0:8c041d5d34b2 48 result += items[i];
WiredHome 0:8c041d5d34b2 49 }
WiredHome 0:8c041d5d34b2 50 if (currentCount)
WiredHome 0:8c041d5d34b2 51 result /= currentCount;
WiredHome 0:8c041d5d34b2 52 return result;
WiredHome 0:8c041d5d34b2 53 }
WiredHome 0:8c041d5d34b2 54
WiredHome 0:8c041d5d34b2 55 float StatisticQueue::Max(void)
WiredHome 0:8c041d5d34b2 56 {
WiredHome 0:8c041d5d34b2 57 float result = items[0];
WiredHome 0:8c041d5d34b2 58 for (int i=1; i<currentCount; i++) {
WiredHome 0:8c041d5d34b2 59 if (items[i] > result) {
WiredHome 0:8c041d5d34b2 60 result = items[i];
WiredHome 0:8c041d5d34b2 61 }
WiredHome 0:8c041d5d34b2 62 }
WiredHome 0:8c041d5d34b2 63 return result;
WiredHome 0:8c041d5d34b2 64 }
WiredHome 0:8c041d5d34b2 65
WiredHome 0:8c041d5d34b2 66 float StatisticQueue::Min(void)
WiredHome 0:8c041d5d34b2 67 {
WiredHome 0:8c041d5d34b2 68 float result = items[0];
WiredHome 0:8c041d5d34b2 69 for (int i=1; i<currentCount; i++) {
WiredHome 0:8c041d5d34b2 70 if (items[i] < result) {
WiredHome 0:8c041d5d34b2 71 result = items[i];
WiredHome 0:8c041d5d34b2 72 }
WiredHome 0:8c041d5d34b2 73 }
WiredHome 0:8c041d5d34b2 74 return result;
WiredHome 0:8c041d5d34b2 75 }
WiredHome 0:8c041d5d34b2 76
WiredHome 0:8c041d5d34b2 77 float StatisticQueue::StdDev(void)
WiredHome 0:8c041d5d34b2 78 {
WiredHome 0:8c041d5d34b2 79 float summing = 0.0f;
WiredHome 0:8c041d5d34b2 80 float avg = Average();
WiredHome 0:8c041d5d34b2 81 for (int i=0; i<currentCount; i++) {
WiredHome 0:8c041d5d34b2 82 float temp = (items[i] - avg);
WiredHome 0:8c041d5d34b2 83 summing += (temp * temp);
WiredHome 0:8c041d5d34b2 84 }
WiredHome 0:8c041d5d34b2 85 summing /= currentCount;
WiredHome 0:8c041d5d34b2 86 return sqrt(summing);
WiredHome 0:8c041d5d34b2 87 }