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
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
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.
Als Test damit du dir quasi die Länge des Einschwingvorgang ansehen kannst und c entsprechend wählen kannst. Gruß Mandrake
alles klar, ich hab meine Werte mit verschiedenen c's gefiltert. Werde das c nehmen, bei welchem die Schwankungen am geringsten sind! danke schön
Ein filter : http://www.ibrtses.com/embedded/exponential.html Allerdings... wenn man ein Sensorsignal filtert, sollte man die Bandbreite des Systemes nicht unterschreiten.
hab den Tiefpass jetzt programmiert. Leider macht er meinen Regler so langsam, dass er mehr schwingt, als ohne TP. :-(
Wenn dein Regler schwingt (vorrausgesetzt bei Heavisidescher Eingabgsbeaufspruchung) und von dir nicht gewollt, solltest du mal schauen ob deine Polstellen richtig liegen.
system instabil... hast du auch sowas wie eine übertragungsfunktion von deiner bastelei auf papier? oder weisst du was die besagten polstellen sind? gruss spice
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
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.
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.