www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Geschwindigkeit durch FIR Filter bestimmen?


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: geschwindigkeit (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: russenbaer (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: geschwindigkeit (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Przemek B. (przemek_b)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: geschwindigkeit (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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!

Autor: Przemek B. (przemek_b)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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)

Autor: Karl (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Kanonen und Spatzen: "help diff"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net