ローパスフィルターを使用して、これをデジタルでフィルター処理できます。
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 Average Libraryを使用して計算できます。
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);
}