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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.