hack gt final code

Dependencies:   4DGL-uLCD-SE BMP085 PinDetect SDFileSystem mbed wave_player

Committer:
otis22894
Date:
Wed Sep 28 00:16:16 2016 +0000
Revision:
14:23390a020d1c
Parent:
12:b301cb3cef44
initial commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
otis22894 12:b301cb3cef44 1 #include "spikes.h"
otis22894 12:b301cb3cef44 2 #include "statistics.h"
otis22894 12:b301cb3cef44 3 #include "mbed.h"
otis22894 12:b301cb3cef44 4 #include "math.h"
otis22894 12:b301cb3cef44 5 volatile bool lowSpike;
otis22894 12:b301cb3cef44 6 volatile bool highSpike;
otis22894 12:b301cb3cef44 7
otis22894 12:b301cb3cef44 8 RunningStatistics *oldValues;
otis22894 12:b301cb3cef44 9 RunningStatistics *newValues;
otis22894 12:b301cb3cef44 10
otis22894 12:b301cb3cef44 11 int numOld, numNew, stdDevs, capacity;
otis22894 12:b301cb3cef44 12 volatile int count = 0;
otis22894 12:b301cb3cef44 13
otis22894 12:b301cb3cef44 14 SpikeFinder :: SpikeFinder(int numOld, int numNew, float stdDevs) {
otis22894 12:b301cb3cef44 15 oldValues = new RunningStatistics(numOld);
otis22894 12:b301cb3cef44 16 newValues = new RunningStatistics(numNew);
otis22894 12:b301cb3cef44 17 this->numOld = numOld;
otis22894 12:b301cb3cef44 18 this->numNew = numNew;
otis22894 12:b301cb3cef44 19 this->stdDevs = stdDevs;
otis22894 12:b301cb3cef44 20 capacity = numNew + numOld;
otis22894 12:b301cb3cef44 21 }
otis22894 12:b301cb3cef44 22
otis22894 12:b301cb3cef44 23 bool SpikeFinder :: lowSpikeFound() {
otis22894 12:b301cb3cef44 24 return lowSpike;
otis22894 12:b301cb3cef44 25 }
otis22894 12:b301cb3cef44 26
otis22894 12:b301cb3cef44 27 bool SpikeFinder :: highSpikeFound() {
otis22894 12:b301cb3cef44 28 return highSpike;
otis22894 12:b301cb3cef44 29 }
otis22894 12:b301cb3cef44 30
otis22894 12:b301cb3cef44 31 void SpikeFinder :: addSample(double newSample) {
otis22894 12:b301cb3cef44 32 oldValues->addSample(newValues->addSample(newSample));
otis22894 12:b301cb3cef44 33 if(count < capacity) {
otis22894 12:b301cb3cef44 34 count++;
otis22894 12:b301cb3cef44 35 } else {
otis22894 12:b301cb3cef44 36 double oldAvg = oldValues->getAverage();
otis22894 12:b301cb3cef44 37 double newAvg = newValues->getAverage();
otis22894 12:b301cb3cef44 38 double newStdDev = newValues->getStandardDeviation();
otis22894 12:b301cb3cef44 39 double dist = newStdDev * stdDevs;
otis22894 12:b301cb3cef44 40 if (newAvg >= (oldAvg + dist)) {
otis22894 12:b301cb3cef44 41 highSpike = true;
otis22894 12:b301cb3cef44 42 }
otis22894 12:b301cb3cef44 43 else if (newAvg <= (oldAvg - dist)) {
otis22894 12:b301cb3cef44 44 lowSpike = true;
otis22894 12:b301cb3cef44 45 }
otis22894 12:b301cb3cef44 46 }
otis22894 12:b301cb3cef44 47 }
otis22894 12:b301cb3cef44 48
otis22894 12:b301cb3cef44 49 void SpikeFinder :: reset() {
otis22894 12:b301cb3cef44 50 count = 0;
otis22894 12:b301cb3cef44 51 highSpike = false;
otis22894 12:b301cb3cef44 52 lowSpike = false;
otis22894 12:b301cb3cef44 53 }