Hi Leute, hab' ne kleine Frage. Ich habe einen Vektor mit Positionswerten eines Motors. Daraus möchte ich die Geschwindigkeit bestimmmen. Die Werte sind in äquidistanten Abständen abgetastet worden. Das ganze soll in matlab geschehen. Ich kann per Differenzenquotienten die Geschwindigkeit ermitteln: v(n)=(q(n+1)-q(n))/T Jetzt möchte ich das aber ohne Schleife implementieren und hab' an FIR Filter gedacht. Mit filter([1 -1]./T,1,q) kannn ich die Daten filtern. Es kommt exakt der selbe Plot heraus, nur um eine Arrayposition verschoben. Logisch, wenn ich mir den FIR Filter aufschreibe kommt folgendes: v(n)=(q-q(n-1))/T Das kann man "integrieren" und erkennt, dass v eine Positionin früher (quasi in der Zukunft) kommt. Dann habe ich aber gelesen, dass dieser Filter eben die Geschwindigkeit sein soll. Was stimmt denn nun? Und noch was: Ist filter([1 1 1 1 1]./5,1,q) ein "echter" moving average Filter? Eigentlich fehlen doch die Werte von einer Seite? Danke + schöne Grüße
Servus, Dein erstes Filter (v(n)=(q(n+1)-q(n))/T) ist akausal, da es auf Daten der Zukunft zugreift. Ist ansich kein Problem bei gespeicherten Daten, sollte Dir aber bewusst sein. Ob es die "richtige" Gescwindigkeitsformel ist mußt Du auch für Dich entscheiden, die zweite Version (v(n)=(q-q(n-1))/T) schaut für mich vernünftiger aus. Jedes Filter hat eine Gruppenlaufzeit, das bedeutet in Umgangssprache wie lange eine Frequenzgruppe durch das Filter braucht. Bei gespeicherten Daten könntest Du das Ausgangssignal verschieben, auch akausal (d.h. in die Zukunft) wenn Du das für Deine Auswertung brauchst (wenn es das ist was Du mit "integrieren " meinst). Rick Lyon hat auf DSPrelated einen guten Artikel über Differenzatoren (das ist das was Du brauchst) geschrieben: http://www.dsprelated.com/showarticle/35.php Meinem Verständnis nach ist jedes FIR Filter ein "moving averager" und jedes IIR ein "autoregressive filter", wobei ich denke dass das Filter "filter([1 1 1 1 1]./5,1,q)" nicht das ist was Du brauchst. Wenn u Zugang zu MATLAB oder OCTAVE hast kannst Du Dir die Frequenzgänge bzw. die Gruppenlaufzeit mit den Funktionen freqz bzw. grpdelay zeichnen lassen. lg russenbaer
Hey, danke für die Antwort! Dass das erste Filter antikausal ist ist mir bewusst. Nur ist das halt irgendwie die Geschwindigkeit, wie sie sich mir am plausibelsten erscheint ;) Den Link werde ich nun durcharbeiten, danke dafür. Das moving average Filter war gedacht, um später die abgetasteten Werte zu glätten. Es ist allerdings so, dass der Motorwinkel nur ca 3 Mal pro Umdrehung abgetastet wird. Vermutlich sollte ich daher vorher die Werte geeignet interpolieren, hast du da auch noch einen Tip für mich? Danke + schöne Grüße
Hi I hab gesehen einmal, dass ein Kerl dieses Problem mit Kalman filter ausgelost hat. Das sah sehr gut aus. Im Gegensatz zu simple "moving average" Ansatz, Kalman filter ermoglicht kein Verspatung. Das wird durch ein "Vorausberechnung" erreicht. Wenn du willst, ich kann vielleicht das heraussuchen und dir schicken. Ich muss mich enschuldigen fur mein schlechtes Deutsch.
Ist kein Problem, habe dich verstanden ;) Wenn es dir keine Umstände macht, wäre das natürlich cool. Aber einen Kalman bekomme ich auch selbst noch hin denke ich. Ich habe mir die Frequenzgänge meines Filters (Geschwindigkeit) angesehen und verstanden, dass dieser eher Hochpass als Tiefpasscharakteristik besitzt. Dadurch wird ein evtl vorhandener Ripple natürlich verstärkt. Aber ich kann ja jetzt nicht einen beliebigen Tiefpass (z.B. einen Kalman mit schönem Frequenzgang) darauf loslassen, dann erhalte ich doch nicht mehr die Geschwindigkeit? Danke für eure Antworten!
Hi! 1) Was du eigentlich brauchst von Kalman ist die Formel auf Seite 19. Das ist leider auf Polnisch. Ich kann dir damit helfen wenn du Probleme hast 2) Ja, mit Filterkoefizienten soll man aufpassen, ansonsten hat das keinen physicalishen Grund. Du kannst erst eine Reihe von v(n) aufbauen. Dann sollst du diese Reihe durch ein Filter verarbeiten. Es soll gut arbeiten und es besteht keine Bange dass die Ergebnisse keinen Sinn haben. (Sorry fur mein schlechtes Deutsch)
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.