|
CLASS DOCUMENTS
REPORTS & ASSIGNMENTS
CLASS CONTENT
USING THIS SITE
registered authors login here You are: (logout) For more on PMWiki, see pmwiki.org |
Standarddeviationby jamie allen Standard deviation and variance (one is the square root of the other) are basic measurements of the 'spread' of data. For time series data we can think of it as a measure of the noisiness of the data, or as a 'very' robust way of detecting transient (fast changing) behaviors in noisier or drifting data. This is a batch-analysis of the data, so 5 samples are needed before we have a standard deviation result. Coding a running-standard deviation would be a good thing to have... :)
#include <math.h> //required for our sqrt function!
int potPin = 0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int accVal = 0; // accumulation of a sum for averaging
int currentAVG = 0; //current average
int lastVal = 0; //storage for the 'last' analog input value
int avg = 0; // average result
int val[5]; // variable to store the value coming from the sensor
int howManyToAverage = 5; //number of individual values to average
int sampleDeviation = 0; //an individual samples' 'deviation'
int sampleDeviation2[5]; //each individual samples' squared (deviation)
int sampleDeviationSum = 0; //each individual samples' squared (deviation)
int standardDeviation = 0; //the standard deviation result
void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
int i;
digitalWrite(ledPin, HIGH); // sets the LED off
accVal = 0; // clear the accumulator
for (i=0; i < howManyToAverage; i++)
{
val[i] = analogRead(potPin); // read the value from the sensor
//Serial.print("Raw Value: ");
//Serial.println(val, DEC); // print as an ASCII-encoded decimal
accVal = accVal + val[i];
//Serial.print("Accumulator: ");
//Serial.println(accVal, DEC); // print as an ASCII-encoded decimal
delay(10);
}
avg = accVal/howManyToAverage;
//Serial.print("Simple Average Value: ");
//Serial.println(avg, DEC); // print as an ASCII-encoded decimal
for (i=0; i<howManyToAverage; i++)
{
sampleDeviation = abs(val[i]-avg);
sampleDeviation2[i] = sampleDeviation*sampleDeviation;
}
sampleDeviationSum = 0;
for (i=0; i<howManyToAverage; i++)
{
sampleDeviationSum = sampleDeviationSum + sampleDeviation2[i];
}
standardDeviation = sqrt(sampleDeviationSum/(howManyToAverage-1));
Serial.print("Standard Deviation Value: ");
Serial.println(standardDeviation, DEC); // print as an ASCII-encoded decimal
}
|