Continue standaarddeviatie berekening.

De standaarddeviatie of standaardafwijking is een berekening die je kunt doen op een set data.
Maar wat als je nog geen set hebt.

Bijvoorbeeld je wilt de standaarddeviatie weten van een temeratuur sensor om te bepalen of de volgende sample die je krijgt wel past of dat het een afwijkende waarde is.

Je kunt natuurlijk niet bij elke sample de standaarddeviatie weer opnieuw bereken dat zou veel te veel tijd kosten. Vandaar dat we een continue standaarddeviatie berekning introduceren.

De truuk is dat je de waarden die je nodig hebt alvast berekent en vasthoud.

In dit voorbeeld gaan we uit van set van 512 berekeningen waarvan de std deviatie willen berekenen. Afhankelijk of de nieuwe waarde x binnen de gemiddelde +/- 4x deviatie doen we A anders B


//Om de eerste keer de gemmiddelde goed te zetten stellen we het gemiddelde gelijk aan de eerste waarde uit de sensor. Doen we dit niet zal je eerst 512 de lus doorlopen moeten hebben om een correcte waarde te krijgen.
x=LeesSensorWaarde();
avg=x;
avg2=x*x;

while(1){
x=LeesSensorWaarde(); //Lees de sensor uit.
avg=(avg*511 + x)/512; //Bepaal een lopend gemiddelde (dit is een eenvoudig filter)
avg2=(avg2*511+(x * x))/512; //Bepaal een lopend kwadratisch gemiddelde
deviatie=sqrt((avg2-(avg*avg)/512)/511); //Bereken de standaard deviatie

//Afhankelijk van de waarde doe iets...
if((x > avg-4*deviatie) && (x < avg+4*deviatie)) doe A; else doe B; }