|
|
Bitte um Hilfe: Kalmanfilter an Problem anpassen |
|
Breningar |

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.12.2016, 11:15
Titel: Bitte um Hilfe: Kalmanfilter an Problem anpassen
|
 |
|
 |
|
Moin,
da ich langsam verzweifle und immer nur in kleinen Schritten voran komme (danke an die Helfer hier im Forum für die kleinen Schritte) und mir die Zeit knapp wird, würde ich gerne um Hilfe bitten. Ich bin mir nicht sicher, ob das eher in Programmierung oder Signalverarbeitung passt, eigentlich eher in beides.
Ich bin ja dabei ein Model mittels Simulink und Matlab function Blöcken zu bauen. Das Ganze ist etwas umständlich und vielleicht mitunter auch nicht immer ganz sinnvoll oder der beste Weg, aber da mir bislang die Erfahrung fehlt, komme ich so am besten zurecht.
Was möchte ich machen? Ich habe an einer Fräse einen Beschleunigungsmesser und möchte Schwingungen messen und verarbeiten. Zunächst wird die Spindelgeschwindigkeit gemessen und in eine Kosinus-/Sinusserie umgewandelt. Die wird in einen NLMS-Filter gegeben, der dann einen Prognosefehler im Vergleich zu den gemessenen Schwingungen des Beschleunigungsmessers herausgibt. (Ich hoffe ich habe den NLMS-Filter diesbezüglich soweit halbwegs richtig verstanden)
Der Prognosefehler (Epsilon) wird dann als Measurementeingang für den Kalmanfilter genutzt. Während über Delays die letzten 4 Prognosefehler in einem Vektor gesammelt werden (Phi_u) und dem Kalmanfilter als Matrix H zugewiesen wird.
Bis hierhin ist das Ganze auch nicht so kompliziert, der ganze Aufbau sieht auch gut aus, die Werte für Phi_u und Epsilon kann ich zwar noch nicht so wirklich interpretieren, bewegen sich aber schon in einem richtigen Rahmen. Nur der Kalmanfilter will einfach nicht so wie ich das möchte. Vorgabe für den Kalmanfilter ist ein Satz Gleichungen.
Wenn ich das nun mit einer der wunderbaren Erklärungen im Netz vergleiche, habe ich herausgefunden:
meine Gleichung Beispiel im Netz
theta_u = x
Q = P
Re = Q
Rw = R
phi_u = H
x, bzw. theta_u ist nachher für mich auch die entscheidende Größe, die ich weiter nutzen möchte. phi_u und theta_u sind 4x1-Matrizen (Vektoren), während epsilon ein skalarer Wert ist.
Und mit dem Phi_u gehts da schon los. Ich habe versucht den Block für den Kalmanfilter von Simulink zu nutzen, kann der Matrix H dort aber nicht phi_u zuweisen. Also habe ich einen Matlab function Block benutzt und versucht einen Kalmanfilter selber aufzubauen (mit Hilfe aus der Uni). Ich habe aber zum einen Zweifel an der Korrektheit dieses Aufbaus, zum anderen bekomme ich (ob nun richtig oder falsch) den Block nicht so eingerichtet, dass ich ihn mal ohne Fehlermeldungen zu bekommen simulieren kann.
Ich weiß so langsam nicht mehr, wie ich noch vorgehen soll und helfen kann mir keiner, bzw. will vielleicht auch keiner? Und die Profs an der Uni haben sowieso nie Zeit. Daher hoffe ich darauf, dass mir hier nochmals geholfen werden kann. Ich lade das Model (nur den Kalmanfilter mit Eingangsvariablen) und den dazugehörigen Workspace mit phi_u und epsilon in den Anhang. Vielleicht mag da jemand mit mehr Erfahrung einmal reinsehen und mir sagen, wo ich den Fehler habe?
Ich danke euch schon vorweg vielmals.
Liebe Grüße Breningar
Anhang:
Ausschnitt aus Tabelle phi_u
Ausschnitt aus Tabelle epsilon
Matlab function Block für Kalman (Ts noch falsch)
Code aus Matlab function Block:
Beschreibung: |
|
 Download |
Dateiname: |
Kalman.slx |
Dateigröße: |
21.33 KB |
Heruntergeladen: |
308 mal |
Beschreibung: |
|
 Download |
Dateiname: |
Kalman.mat |
Dateigröße: |
14.84 KB |
Heruntergeladen: |
351 mal |
|
|
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.12.2016, 11:16
Titel:
|
 |
Hat sich erledigt, ich habe einfach einen vollkommen falschen Blick auf die Sache gehabt. Und der Kalmanfilter, den ich mit Hilfe aus der Uni gemacht habe, war auch noch vollkommen falsch aufgebaut für mein Problem.
Irgendwann ist es mir dann wie Schuppen von den Augen gefallen und der Filter war schnell und easy aufgebaut.
LG Bren
|
|
|
AKNOT |

Forum-Century
|
 |
Beiträge: 129
|
 |
|
 |
Anmeldedatum: 12.10.11
|
 |
|
 |
Wohnort: Bochum
|
 |
|
 |
Version: R2018a
|
 |
|
|
 |
|
Verfasst am: 14.12.2016, 13:27
Titel:
|
 |
Fühl dich eingeladen deine Lösung zu posten, vielleicht auch nur kurz zusammengefasst. Eventuell hilft es irgendwann jemand anderem, der ein ähnliches Problem hat
Gruß
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 10:49
Titel:
|
 |
|
 |
|
Ich nehme die Einladung gerne an
Der alte Code wurde für mich von einem Doktoranden geschrieben. Er hat allerdings einen fertigen Code für den Kalmanfilter genutzt und diesen versucht anzupassen. Das Ganze hat nur ein paar Minuten gedauert und lief nach dem Prinzip "Hier kann ich löschen, da kann ich löschen, da brauchst du nur ne kleine Matrix, das passt schon" ab. Dabei hat er sich die Gleichungen meiner Aufgabe nicht angesehen und auch die Dimensionen der Variablen ignoriert. Das führt natürlich zu Fehlern und da ich zwar Elektroniker bin, auf dem Gebiet Regelungstechnik, Filter, Matlab usw. noch recht neu bin (so ziemlich erst jetzt zur Bachelorarbeit/Praktikum), habe ich darauf vertraut, dass der junge Mann weiß, was er tut.
Genau das war der Fehler. Ich habe tagelang versucht Matrizen, Eingangsgrößen, ganze Blöcke zu verändern und anzupassen, leider alles ohne Erfolg.
Dann habe ich in einem Moment geistiger Klarheit (und das nüchtern !!! ) entschieden, den ganzen Filter nochmal neu anzugehen. Und zwar habe ich ganz stumpf und blöd in einen Matlab function Block in Simulink die Gleichungen zum Kalmanfilter so übernommen, wie sie in meinem Dokument standen.
Dann nochmal eben die Startwerte vorgeben, die Dimensionen angepasst und siehe da, das Ding scheint zu funktionieren. Ob die Werte die sind, die sie sein sollten ¯\_(ツ)_/¯ aber immerhin kommt etwas am Ende raus, das so aussieht, wie es wohl aussehen sollte und die Zeit wird zeigen, ob es am Ende auch wirklich richtig funktioniert.
Den neuen Code hau ich mal mit dazu:
LG Bren
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|