Вы можете отфильтровать это в цифровом виде, используя фильтр нижних частот:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Измените 0,99, чтобы изменить частоту среза (ближе к 1,0 - более низкая частота). Фактическое выражение для этого значения - exp (-2 * pi * f / fs), где f - требуемая частота среза, а fs - частота, с которой производится выборка данных.
Другой тип «цифрового фильтра» - это фильтр событий. Это хорошо работает на данных, которые имеют выбросы; например, 9,9,8,10,9,25,9. Фильтр событий возвращает наиболее частое значение. По статистике это режим.
Статистические средние, такие как среднее значение, режим и т. Д., Могут быть рассчитаны с использованием средней библиотеки Arduino .
Пример, взятый со страницы библиотеки Arduino, относится к:
#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);
}