Puede filtrar esto digitalmente usando un filtro de paso bajo:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Cambie 0.99 para cambiar la frecuencia de corte (más cerca de 1.0 es la frecuencia más baja). La expresión real para ese valor es exp (-2 * pi * f / fs) donde f es la frecuencia de corte que desea y fs es la frecuencia con la que se muestrean los datos.
Otro tipo de "filtro digital" es un filtro de eventos. Funciona bien en datos que tienen valores atípicos; por ejemplo, 9,9,8,10,9,25,9. Un filtro de eventos devuelve el valor más frecuente. Estadísticamente este es el modo.
Los promedios estadísticos como la media, el modo, etc. se pueden calcular utilizando la biblioteca de Arduino Average .
Un ejemplo tomado de la página de la Biblioteca Arduino se refiere a:
#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);
}