Tiefpass 1. Ordnung

Gast #901953
Lesenswert?

Hallo Leute,

ich möchte einen Tiefpass in meine Software implementieren, um den 
Eingangssignal für meinen PI-Regler zu glätten.
Als Formel habe ich sowas gefunden:
Ausgang_neu= (1-c)*Ausgang_alt + c*Eingang
Ausgang_alt= Ausgang_neu

Hätt da ein paar Fragen dazu:
wie kann ich denn c besimmen?
Ist beim ersten Durchlauf mein Ausgang_alt =0?
Muss ich jeden Wert an die Funktion schicken und dann gleich weiter an 
den Regler?

danke schön
Gast #901993
Lesenswert?

Das c in deiner Formel ist eine von dir wählbare Zahl zwischen 0..1
Machst du c sehr klein ändert sich das Ausgangssignal des Filters nicht 
so stark bei Änderungen des Eingangs. Änderungen des Eingangssignals 
schlagen also nur sehr langsam auf den Ausgang durch.
Wenn du c sehr groß wählst reagiert der Ausgang des Filters schnelle auf 
den Eingang und deine Glättung wird schlechter.
Rechne es doch mal auf einem Blatt Papier mit verschiedenen c durch.
Als Eingangssignal nimmst du eine ganze Folge von Einsen. Initialisieren 
tust du Ausgang_alt mit 0.
Dann skizziere dir die Ergebnisfolge. Du wirst feststellen, dass du mit 
c einstellen kannst wieviele 1er du reinschieben musst bis das 
Ausgangssignal auch 1 erreicht. Bei kleinem c dauert es eben länger als 
bei einem großen c.

Gruß

Mandrake
Gast #901999
Lesenswert?

wieso soll ich für den Eingangssignal eine Folge von Einsen nehmen?
Mein Eingangssignal schwankt ja stark und sieht z.B. so aus:
12, 18, 32, 30, 25 etc. Den möchte ich ja glätten, denn der Wert 
schwankt um den Mittelwert von 20, was auch mein Isteingang vom Regler 
ist.
#906861
Lesenswert?

Mit einfachem Auszählen sollte man keine Eingangsfilter bauen. Wie hoch 
ist deine Abtastrate,die Größe der Filterkoeffizienten und die daraus 
entstehende Grenzfrequenz??Wie sieht die Sprungantwort aus?

Vorallem bei zeitkritischen Sachen (Regler) muss doch so etwas bekannt 
sein. Du veränderst doch Zeitkonstante in der Regelschleife.

Gruß Alexander
Gast #906870
Lesenswert?

Wenn das ganze auf einen AVR läuft wird es wohl gut langsamer. Kann mir 
vorstellen, dass das als Fließkommamultiplikation kompiliert wird. Das 
kostet sehr viel Rechenzeit.

Versuch es mal mit integer multiplikation also wähle C im Bereich von 0 
bis 255 und stell die Formel so um:
Ausgang_neu= ((256-c)*Ausgang_alt + c*Eingang)>>8;

Du musst natürlich alle Variablen als Integer (short oder int, je 
nachdem wieviel Bit du brauchst) definieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren