Vous pouvez filtrer cela numériquement en utilisant un filtre passe-bas:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Changez le 0.99 pour changer la fréquence de coupure (plus proche de 1.0 est une fréquence plus basse). L'expression réelle de cette valeur est exp (-2 * pi * f / fs) où f est la fréquence de coupure souhaitée et fs est la fréquence à laquelle les données sont échantillonnées.
Un autre type de "filtre numérique" est un filtre d'événements. Cela fonctionne bien sur les données qui ont des valeurs aberrantes; par exemple 9,9,8,10,9,25,9. Un filtre d'événements renvoie la valeur la plus fréquente. Statistiquement, c'est le mode.
Les moyennes statistiques telles que la moyenne, le mode, etc. peuvent être calculées à l'aide de la bibliothèque moyenne Arduino .
Un exemple tiré de la page de la bibliothèque Arduino fait référence à:
#include <Average.h>
#define CNT 600
int d[CNT];
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i;
for(i=0; i<CNT; i++)
{
d[i] = random(500);
}
Serial.print("Mean: ");
Serial.print(mean(d,CNT),DEC);
Serial.print(" Mode: ");
Serial.print(mode(d,CNT),DEC);
Serial.print(" Max: ");
Serial.print(maximum(d,CNT),DEC);
Serial.print(" Min: ");
Serial.print(minimum(d,CNT),DEC);
Serial.print(" Standard deviation: ");
Serial.print(stddev(d,CNT),4);
Serial.println("");
Serial.println("");
delay(5000);
}