Kalman Filter, der alles filtern kann und einfach implementiert werden kann! Da es in Java kein Implementierungsbeispiel gab, werde ich es als Memo schreiben.
public static void main(String[] args){
ArrayList<Double> result = new ArrayList<Double>();
double now = 0;
double xPre = 0;
double pPre = 0;
double sigmaW = 0;
double sigmaV = 0;
//Argumentspezifikation 1 sigmaW, 2 sigmaV
sigmaW = Integer.parseInt("5");
sigmaV = Integer.parseInt("50");
Scanner sc = new Scanner(System.in);
while(true){
now = sc.nextDouble();
if(now == -1){
break;
}
double xForecast = xPre;
double pForecast = pPre + sigmaW;
double KGain = pForecast/(pForecast + sigmaV);
double xFiltered = (xForecast + KGain*(now - xForecast));
double pFiletered = (1-KGain) * pForecast;
result.add(xFiltered);
System.out.println(xFiltered);
xPre = xFiltered;
pPre = pFiletered;
}
System.out.println("-------------------------------");
for(Double out : result){
System.out.println(out);
}
}
Der Filterungsgrad hängt von der Kombination von SigmaW und SigmaV ab.
Indem Sie dies verwenden und es zu einer API machen, können Sie verschiedene numerische Werte filtern.
Obwohl es hier als Liste ausgegeben wird, ist es auch möglich, den Wert in Echtzeit auszugeben.
Recommended Posts