Filterproblem



  • Hallo,

    ich habe da ein Problem das ich nicht lösen kann.
    Es handelt sich um GPS Daten. Diese geben mir ungenaue Positionen zurück.
    Ich will die Geschwindigkeit des Objektes und die Beschleunigung.
    Mein Problem ist, das vom GPS keine konstanten Punkte zurückgegeben werden wie z.B. alle Sekunden für Z (vorwärts, rückwärts) 10m, 20m, 30m, 40m.
    Wäre es wie oben, dann wäre ich bei einer konstanten Geschwindigkeit von 10 m/s.
    Stattdessen kommt bei gleichbleibender Geschwindigkeit ungefähr sowas:
    10m, 23m, 29m, 41m, 52m
    Vom Prinzip liegen ca. 50% der Werte daneben.

    Als Ansatz habe ich die einzelnen Geschwindigkeiten genommen und einen Mittelwert gebildet. Das klappt wegen der ab und zu vorliegenden großen Ausreisser nicht.
    Bilde ich ein Median mit oder ohne Mittelwertsbildung klappt es auch nicht.

    Nun brauche ich Ansätze für andere Filter, denn wenn es nicht einmal mit den Geschwindigkeiten klappt und diese nur zäh gemittelt werden fallen auch die Beschleunigungen (delta der Geschwindigkeiten in Zeit) unten durch ...
    Als zusätzliches Problem sollten die aktuellen Werte möglichst schnell ohne Verzögerung präsentiert werden.

    Grüße
    TheNoName



  • thenoname schrieb:

    10m, 23m, 29m, 41m, 52m

    So schlecht sind doch diese Werte gar nicht! Wenn du ungünstigen GPS Empfang hast, wird der Fehler wohl noch größer werden.

    Wenn du keine Verzögerung haben willst, dann bleibt dir nur die Möglichkeit aus vergangenen Werten die Zukünftigen zu berechnen und den dann tatsächlich erhaltenen mit dem berechneten Wert zu mitteln (ggf. irgendwie gewichtet).

    Wie du bereits sagst, läuft es beim Delta von zwei Werten auf die Geschwindigkeit hinaus. Du könntest jetzt über drei Werte das Delta vom Delta berechnen (Beschleunigung), aber je unsicherer die Werte sind, umso sinnloser sind die Parameter höherer Ordnung.

    Bliebe nur die Fusion mehrere Sensordaten. Also z.B. einfach mehrere GPS Sensoren nehmen, direkt Beschleunigungs-/Geschwindigkeitssensor nehmen
    Oder das physikalisch zugrundeliegende Modell beachten (welche max. Beschleunigung kann überhaupt auftreten?, ist der Messwert systemtechnisch möglich/plausibel/...



  • thenoname schrieb:

    Vom Prinzip liegen ca. 50% der Werte daneben.

    Als Ansatz habe ich die einzelnen Geschwindigkeiten genommen und einen Mittelwert gebildet. Das klappt wegen der ab und zu vorliegenden großen Ausreisser nicht.

    Was heisst daneben? Werte sind nicht nur richtig oder falsch, sondern die Frage ist, wieviel daneben die sind. Wie hast du denn den Fehler bis jetzt modelliert?

    Zu der Mittelwertbildung: Wie hast du den gebildet?
    Nicht so, nehme ich an

    x:  10m, 23m, 29m, 41m, 52m 
    v*dt   13   6    12    11
    
    v_Mittel=(13+6+12+11)/4
    

    Oder? Weil das überhaupt nichts hilft, da das das gleiche ist wie wenn du einfach ein grösseres deltaT hättest (also (52m-10m)/4 im Beispiel). Also hast du den gleichen Fehler wie sonst auch...



  • Hallo,

    @withoutname:
    das sind Beispiele, leider reissen die Werte auch ab und zu größer aus.
    Vorausberechnungen sind meiner Meinung nach nicht Möglich, da man nie weiss wann das Fahrzeug vor der Ampel stehen bleibt. Was verstehst du unter gewichtet?
    Eine Fusion von Beschleunigungssensoren habe ich leider nicht zur Verfügung.

    @lustig:
    Ja, so hab ich es gemacht, wenn einem keiner die Rechenfehler vor Auge führt kann man sich schon mal verirren.
    Ich habe wie oben schon angesprochen den Mittelwert, den Median und 1/3 der mittleren Median Werte ausprobiert.
    Ein weiterer Ansatz war eine Sekundenweise Annäherung nach dem Prinzip wenn der neue Wert größer ist, zähle nur 1/3 von dem Delta zum neuen Wert dazu. Eine Fading sozusagen. Leider filtert dies sämtliche Beschleunigungen 😉



  • Wie wäre es mit einen einfachen Tiefpassfilter:

    v_k=αv_k+(1α)vk1v\_k = \alpha \cdot v\_k + (1-\alpha) \cdot v_{k-1}

    oder auch weighted moving average genannt. Wobei v deine Geschwindigkeit ist und alpha angibt, wie stark das ganze auf Änderungen reagiert.

    Ein zu großes alpha würde stark auf große kurzzeitige Änderungen reagieren, wobei du mit einem viel zu kleinen zu langsam wärst. Kannst damit ja mal ein bisschen rumprobieren (zB alpha=0.1).



  • Wenn du das mit dem normalen Mittelwert nochmal probieren möchtest (soll nicht heissen, dass KasFs Idee nicht gut ist):

    Du kannst die Geschwindikeit anders Mitteln, also das Mittel zwischen "Geschwindigkeit in der letzten Sekunde", "Geschwindigkeit in den letzten zwei Sekunden", etc. berechnen.

    10m, 23m, 29m, 41m, 52m
    v_m*dt=52m-41m + (52m-29m)/2 + (52m-23m)/3 + (52m-23m)/4



  • unter gewichtet meine ich so etwas:
    Werte: 10m, 21m, 32m
    Delta also: 11m

    Nächste Messwert: 40m
    Lineare Prädiktion: 43m

    Diese beiden Werte könnte man jetzt mitteln, wobei aufgrund der Dynamik des System die lineare Prädiktion etwas schwächer ins Ergebnis eingehen sollte. Um diesen Umstand zu verbessern, könnte man noch eine Prädiktion zweite Ordnung verwenden, aber wie gesagt, wenn die Messwerte zu stark streuen macht das eh keinen Sinn. Also gewichtete Mittelung:

    43m * a + 40 * b, mit a+b=1
    a=b=0.5 : "normale Mittelung"
    a=0.3,b=0.7 : Gewitchtung auf Messwert

    Was anderes:
    Dein Problem scheinen Ausreiser zu sein. Wie bereits beschrieben könntest du mit einem physikalischen Modell überprüfen, ob ein Ausreisser überhaupt plausiebel ist, falls nicht diesen einfach durch den Prädiktionswert ersetzen.


Anmelden zum Antworten