Filtre Kalman qui peut tout filtrer et peut être facilement implémenté! Puisqu'il n'y avait pas d'exemple d'implémentation en Java, je l'écrirai sous forme de mémo.
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;
//Spécification d'argument 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);
}
}
Le degré de filtrage dépend de la combinaison de sigmaW et sigmaV.
En l'utilisant et en en faisant une API, vous pouvez filtrer diverses valeurs numériques.
Bien qu'il soit affiché ici sous forme de liste, il est également possible de sortir la valeur en temps réel.
Recommended Posts