- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Kalman Filter für BASCOM

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.08.2009
    Beiträge
    31
    Moin!
    Ich habe den Code mal nach C portiert und den Filter auf eine verrauschte Sinusschwingung mit verschiedenen R's ausprobiert.
    Die Ergebnisse sehen eigentlich ganz nett aus (wobei ich nicht weiß, wie es richtig ist). Was mir jedoch auffällt ist, dass für q=1, r=10 das gefilterte Signal genauso wie eine IIR-Filterung aussieht. Und irgendwie lässt mich das zweifeln, ob der Kalmanfilter so richtig funktioniert
    Die Verläufe könnt ihr im Attachment sehen.

    VG Dirk
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken filter.png  

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Vorab mal merci für die Mühe

    hmmm ... ja, Deinem Diagramm nach deckt sich da IIR und der Code von mir ... kann Zufall sein, glaub ich aber nicht. Da ich jetzt nicht das Mathe-Scharnir bin kann ich auch keine Aussage Treffen über die mathematishcen Zusammenhänge zwischen IIR und Kalman 1. Ordnung ... würd das ja schon gern gegenchecken, hast Du ne Quelle für ne Source für Kalman Filter, die ich portieren kann? Würd dann einfach zum Vergleich nen zweiten Code im Vergleich dagegen laufen lassen. Will ja hier keine Unwahrheiten verbreiten.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.08.2009
    Beiträge
    31
    Hi Vitis,
    habe leider keinen anderen Code. Ich habe Deinen dankbar aufgegriffen, weil ich auch gerade nach einer einfachen Kalmanfilterimplementierung suche.

    Ich glaube, wenn man den richtig verwenden will, kommt man nicht drum rum, den auch zu verstehen

    Diese Folien sind ganz anschaulich, vielleicht hilft es Dir weiter:
    http://<br /> <a href="http://www.c....pdf</a><br />

    Viele Grüße,
    Dirk

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    pua ... jetzt hastes mir aber gegeben ...
    sorry, aber die Folien blick ich nicht, wie schon gesagt, mathe
    ist nicht gerade meine Stärke und Formeln bringen mir daher
    auch nicht viel mehr.
    Ich wills mal so sagen ... würd mir jemand das Ding mit
    Papier und Bleistift aufmalen würd ich sicher durchsteigen;
    oder Messwerte im Diagramm liefern und ne Aufgabe draus formulieren
    bekäm ich ziemlich problemlos nen laufenden Programmcode aus meinen
    bestehenden (geistigen) Mitteln zusammen.
    Ich kann noch integrieren und differenzieren,
    Kurvendiskussion, aber damit hat es sich dann auch schon.
    Bin nicht blöd aber auch kein Genie ... irgendwo dazwischen.
    Der obige Code ist einfach 1:1 aus dem ursprünglichen Code
    ins Bascom übersetzt ... wie gut der Ursprung war weiß ich nicht,
    mangels Vergleich.
    In meiner Anwendung gehts darum kurze Peaks aus Messwerten zu filtern,
    da das Messverfahren die unregelmäßig Fehler produziert, was sich
    hardwaretechnisch nicht oder nur mit großem Aufwand realisieren lässt.
    Diese Aufgabe erfüllt das Progrämmchen bei mir tadellos, soweit ists
    OK, wie das bei anderen Anwendungen aussieht ... keine Ahnung.

    Bei mir läuft dann noch zum Vergleich ne lineare Regression parallel
    drüber und dann verwurstle ich das ganze miteinander ...
    die Regressionsanalyse in Bascom zu proggen war haariger als
    das Ding oben
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Hi Dirk,
    ich habe Deinen Code für das Kalman-Filter in VB getestet, da ich auch an einer einfachen Ausführung des Filters interessiert bin. Ich möchte ein Kalman-Filter in ASM auf einem AVR einsetzen.
    Bei dem Test hat sich Dein Verdacht bestätigt, der Code funktioniert nicht richtig. Die Verstärkung K läuft immer auf einen Wert von 0.2701562 bei R=10 und Q=1.
    Es gibt im Code auch keine Rückkopplung von K auf den aktuellen Messwert.
    Man könnte K auch fest auf 0.270... legen und das Ergebnis wurde fast gleich aussehen.

    Gruß Wulle

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    jep, K wird einmal berechnet:

    Kal_tempsingle_1 = Kal_pmin1 + Kal_r
    Kal_k = Kal_pmin1 / Kal_tempsingle_1

    Die Rückkopplung von K wird im Filter 2. Ordnung
    verwendet:

    for n = 2: 1: 51;

    K = Pmin*H'/(H*Pmin*H'+R);
    k_1(n) = K(1,1);
    k_2(n) = K(2,1);

    der obige Code ist die Übersetzung des Filters erster Ornung ...
    Zumindest steht das so in dem bereits verlinkten Dokument:
    http://www.techsystemsembedded.com/Kalman.html

    an dem darf sich aber wer anders verlustieren ... bin mal auf die Ergebnisse gespannt.

    ps: hier gibts nen C++ Code, der auch nicht schlecht aussieht:
    http://www.tyforhire.com/papers/sheffield_final.doc

    schaut auch recht 'possierlich' aus ... der größte Unterschied scheint
    mir das die Zeit als zweite Dimmension mit dazu kommt oder liege ich da falsch? Wenn man dann davon ausgeht das die "Samplerate" konstant ist könnt man sich den Punkt sparen, oder?
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    @ alle Kalman-Fans,

    das Prinzip des Kalmanfilters ist auf Folie 32 der tollen Präsentation gezeigt, die Dirk123 gepostet hat: Man benutzt ein Modell des Vorgangs ("process"), den man beobachtet, und schätzt daraus den nächsten zu erwartenden Messwert ab. Das ist die "a priori-Schätzung"; im Grunde eine Extrapolation. Anschliessend führt man die Messung durch und guckt nach, in wieweit sie mit dem vorher geschätzten Wert übereinstimmt. Ist die Übereinstimmung schlecht, dann wird das Modell des Vorgangs so angepasst, dass die Abweichung zwischen geschätztem und gemessenem Wert möglichst klein wird. Das ist die "a posteriori-Schätzung"; im Grunde eine Korrektur des Modells. Dieser Ablauf wiederholt sich dauernd. Das ist der Kreislauf den die Folie 32 zeigt.

    Dass es kein Codebeispiel für "den" Kalmanfilter gibt, liegt daran, dass man unbedingt ein Modell des Vorgangs haben muss; und das sieht immer anders aus, je nachdem, ob z.B. die Fahrt eines Asuros nachgebildet werden soll oder die Fluglage eines Helikopters oder Flugzeugs. Ein Modell des Vorgangs zu erstellen, ist nicht immer einfach (siehe Folie 17ff). Die meisten der Hilferufe, die Vitis erwähnt, beziehen sich denn auch auf die Modellerstellung.

    Man kann also einen Kalmanfilter für die Ortsschätzung eines Asuro schreiben und einen für die Fluglage von Willas schönem Tricopter - aber man kann den einen nicht für den anderen verwenden . Schade.

    mare_crisium

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    17.08.2009
    Beiträge
    31
    @ mare_crisium:
    Da hast du Recht, man muss jedes Mal den Filter an ein neues Modell anpassen. Aber damit beschäftige ich mich ein anderes Mal

    @ Vitis:
    Um Peaks herauszufiltern, könntest du auch nen einfachen IIR-Filter benutzen, das ist etwas übersichtlicher als der Kalmanfilter
    Code:
    filter_wert = filter_wert * s + wert * (1.0-s)
    wobei s hier ein Wert zwischen 0...1 ist. Bei s=0.75 kam bei mir das gleiche raus wie beim Kalmanfilter.

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ist zwar schon etwa her das ich mit den Kalman filter angesehen habe, und vielleicht habe ich es auch zu sehr vereinfacht. So wie ich das sehe ist der Kalmann filter oft nicht viel anders als ein IIR Filter:
    Die Berechnungen mit den Kovarianzmatrizen unabhängig von den Messwerten. Nach einigen Iterationen sollte da was konstantes rauskommen. Damit kann man konstante Werte für die Kovarianzwerte nehmen, und hat dann in den meisten Fällen einfach IIR Filter.

    Das Einzige was vom Kalman übrig geblieben ist, dass man eine Methode hat die Filter Parameter auf das Schätzen der Kovarianz-Matrizen zurückzuführen, und dass man ein mathemathische Begründung hat, wieso man gerade so einen Filter nutze und dafür, dass es nicht viel besser geht.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    @ Dirk123

    guter Vorschlag . Man kann das Verfahren noch verfeinern, indem man die Abweichung des neuen Messwertes vom alten Mittelwert berücksichtigt; also den alten Mittelwert mit einer mittleren Abweichung gewichtet und den neuen mit seiner Abweichung vom alten Mittelwert. Wenn's interessiert, kann ich Formeln mal posten.

    @Besserwessi,

    ja, wenn das Filter das Modell optimal angepasst hat, ändert sich nichts mehr daran. D.h. wenn man die richtigen Werte errät oder sie durch Probieren herausbekommt, kann man sich den ganzen Aufwand mit der Rückkopplung sparen. Da hast Du recht. - Manchmal habe ich auch den Eindruck, als würde das Kalmanfilter als so eine Art Wundermittel betrachtet . Das Paradebeispiel sind Willas Beschleunigungssensoren: Wo andere angefangen hätten, mit einem Kalmanfilter herumzuzaubern, hat er das ganze Rauschthema mit einem simplen RC-Hardwarefilter erledigt

    mare_crisium

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test