Hallo liebe Forengemeinde, ich beschäftige mich jetzt bereits seit einiger Zeit mit einem Algorithmus auf einem AVR mit dem ich in Verbindung mit einem Gyro und einem Beschleunigungssensor eine exakte Lage bestimmen kann. Das alles funktioniert schon ziemlich gut, auch die Berechnung der Lage ist 1a. Nun zu meinem Problem: Ich möchte die Lage nur für eine Achse bestimmen, soweit so gut. Lasse ich jetzt den Lagesensor aus, sagen wir 5cm, auf den Tisch fallen, so erhalte ich eine sehr schnelle Lageänderung (bspw. 0° -> 75° -> 0°), obwohl sich der Sensor nicht um die Drehachse gedreht hat. Meine Idee ist also einen Tiefpassfilter zu realisieren, der solche Spitzen filtert. Und da nimmt das Elend seinen Lauf... Ich habe bereits einen FIR Filter als passenden Filter identifiziert. Mir ist auch gelungen diesen als einen einfachen Mittelwertfilter bereits zu implementieren. Er funktioniert auch soweit, aber ich habe das Gefühl, dass der neue Kurvenverlauf noch nicht optimal ist. Das bringt mich also zu der Notwendigkeit nun doch Filterkoeffizienten verwenden zu müssen. Meine letzte Vorlesung zum Thema Signale und Systeme ist allerdings schon über 10 Jahre her und ich hab es damals schon nicht wirklich verstanden... Wie kann ich denn nun mit möglichst geringem Aufwand (wenn ich das mal so sagen darf) ermitteln, wie ich den Filter auslegen muss? Also, wieviele Werte muss ich für die gewichtete Mittelwertberechnung vorhalten? Wie komm ich am schnellsten an die Koeffizienten? Und ggf. wie komm ich an die Werte, die ich ggf. in eine fertige Formel rein tun muss, damit ev. Koeffizienten raus kommen? Hier gibt es ja bspw. eine Seite, mit der man sich sogar C-Code ausgeben lassen kann, aber welchen Filter müsste ich denn dann nehmen und welche Werte muss ich denn da rein füttern? http://www-users.cs.york.ac.uk/~fisher/mkfilter/ Ich hab ja bestenfalls eine Messreihe, die aufnehmen könnte... Am Rande sei noch erwähnt, dass ich 200 Samples/s von den Sensoren abfrage. Kann mir bei dem Problem vielleicht einer von euch helfen? Ich liefere natürlich gern alle Werte, die ev. noch in irgendeiner Form benötigt werden... Besten Dank schonmal für eure Zeit! MFG, André
Hallo, du kannst ja solch einen Fehlerfall mal aufnehmen und z.B. in eine *.csv Datei speichern. Dann kannst du ausprobieren was ein Filter damit macht. Neben Matlab, Octave und Scilab kannst du auch Python mit Numpy/Scipy verwenden um Filter zu entwerfen und zu testen. Je nachdem wo du am besten zu recht kommst... Da du keine genauen Spezifikationen hast wuerde ich es einfach mit der Try-Error Methode probieren, also Filter entwerfen (wie du an die Koefizienten kommst ist in den Dokumentationen beschrieben) und testen ob das Ergebnis gut ist. Nicht vergessen auch andere Daten zu filtern und schauen ob die errechneten Ergebnisse noch passen... Gruss
Überlege Dir was die maximale Drehgeschwindigkeit/maximale Winkeländerung ist die Du messen können willst. Mit der Abtastrate von 200Hz und dieser Information kannst Du Dir Deine TP Grenzfrequenz ausrechnen und den TP entwerfen. Wenn nun Dein Sensor runterfällt und die sich (fälschlicherweise) ergebende Frequenz liegt im Nutzband kannst Du mit einfachem Filtern eh nicht mehr viel tun. Ich würde trotzdem nach dieser Methode vorgehen. Zum Entwurf kannst Du z.B. MATLAB (fdatool) verwenden - oder andere Tools im Netz suchen. Bzw. wenn Du die Grenzfrequenz hast, die Anzahl der Koeffizienten (die Ordnung des Filters) und den Filtertyp weisst kannst ja noch einmal im Forum nach Koeffizienten nachfragen ;)
Hallo Markus, danke für die Tipps! Natürlich auch an Gast. Darf ich das mit den Koeffizienten als ein Angebot verstehen? Mit Matlab ist das so ne Sache, ich hab natürlich schon auf vielen Seiten gelesen, dass man damit die Filter super berechnen können soll. Meine Erinnerungen (sind auch schon 10 Jahre alt) an Matlab sind allerdings so, dass ich glaube, ich brauch erstmal ein halbes Jahr um das Programm korrekt bedienen zu können. Irre ich da? Da war doch ne eigene Sprache für erforderliche... Ich muss mir mal ausdenken, wie ich an die Grenzfrequenz komme... Meld mich dann nochmal. Vielen Dank schon mal und natürlich bin ich auch für weitere Hilfe dankbar! MFG, André
Die Koeffizienten richten sich nach der Art des Filters. Für ein einfaches monotones Bandfilter, zb. einem Tiefpass ist das analytisch darstellbar und kann ausgerechnet werden. Dazu eigent sich nebst MATLAB z.B. FIRTool.exe (guhgel) von MEDIATRONICS. Das ist auf einigen freeware servern noch drauf. Allerdings taugen diese einfachen monotonen Filter für die meisten Anwendungen nicht.
In dem Bereich verwendet man wohl oft/meist den Kalman-Filter. Da gibt es massig Doku und Beispielprogramme ...
Wenn Du solche Spitzen rausfiltern willst, warum nicht die Spitze mit einem Hochpass detektieren und dann alle Messwerte um die Spitze herum auf Null setzen? Die Werte die aus dem Sensor herauskommen wenn er auf den Tisch knallt werden dann eh Schrott sein. Also einfach warten biss sich die Werte "beruhigt" haben und dann weitermachen.
Vielen Dank für eure Hilfe. @Markus: Ich habe dir eine PM geschickt, ich hoffe die ist angekommen, denn ich hatte da einen Anhang ran gehängt. @Frank: Das FIR Tool werd ich mir bei Gelegenheit mal anschauen, aber wie du ja schreibst, sind die damit ermittelten Filter nicht doll!? @Dieter: Einen Kalmanfilter habe ich bereits in der Vergangenheit angetestet. Hat gut funktioniert, aber ich habe mich dann letztlich auch aus Performancegründen für einen Komplementärfilter entschieden. Nicht zuletzt auch deswegen weil ich in meinen Tests keinen besonders großen Vorteil des Kalmanfilters gegenüber des Komplementärfilters feststellen konnte. @Martin: Die Idee finde ich interessant, aber wo liegt der aufwandsmäßige Unterschied einen Hochpass zu bauen oder einen Tiefpass? Und weiter stelle ich mir die Frage, was wenn mein Sensor nicht auf dem Nullpunkt ist (sagen wir 30°)? Dann wäre es ja ziemlich unglücklich den Winkel bei einer Spitze auf 0 zu setzen. MFG, André
:
Bearbeitet durch User
André Synonym schrieb: > @Frank: Das FIR Tool werd ich mir bei Gelegenheit mal anschauen, aber > wie du ja schreibst, sind die damit ermittelten Filter nicht doll!? Die Koeffizienten stimmen schon, das TPF wird korrekt gebaut. Meine Aussage bezieht sich aber darauf, dass ein einfaches TPF für die Anwendungen nicht tauglich ist. Oft braucht es "verbogene Filterkurven". Ein so richtig universelles Tool, das das leistet habe ich auch noch nicht aufgefunden.
Verbogene Filterkurven ??? Mit Matlab kannst du den Frequenzgang vorgeben. Oder bei IIR Filter kannst auch einfach Die Pol und Nullstellen angeben -> da hast dein gewünschten Frequenzgang. Den kannst auch wieder über Impulsantwort in FIR-Filter umwandeln Matlab ist Stand der Technik für Filterberechnung. Wer berechnet die Koeffizienten noch selber -> erstens nicht trivial Zweitens -> Dauert viel zu lange
Martin Maschmann schrieb: > Wenn Du solche Spitzen rausfiltern willst, warum nicht die Spitze > mit einem Hochpass detektieren und dann alle Messwerte um die Spitze > herum auf Null setzen? André Synonym schrieb: > Und weiter stelle ich mir die Frage, was wenn mein Sensor nicht auf dem > Nullpunkt ist (sagen wir 30°)? Dann wäre es ja ziemlich unglücklich den > Winkel bei einer Spitze auf 0 zu setzen. Das geht gnadenlos schief! Zum Ausfiltern von einzelnen Ausreißern bietet sich ein Medianfilter an. Ggf. könnte man die Methoden kombinieren, d.h. ein Hochpaßfilter zum Detektieren von Ausreißern und als Setzwert dann nicht 0 nehmen, sondern den Median-Wert aus einem längeren Medianfilter. (gleitende Median-Bildung)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.