Filter Tuning: Was, Warum und Überhaupt

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Filter Tuning: Was, Warum und Überhaupt

      Hi,
      Ich dachte ich mach mal n thread zum Thema filtertuning in betaflight auf. Gerade hat @Solix in nem anderen thread wieder die parallelen zur tontechnik (nicht Töpferei) aufgezeigt und tatsächlich gibt es ja viele parallelen.

      Was?
      Das Signal des gyroskops wird gefiltert um tatsächliche Lageänderungen die verarbeitet werden müssen von Vibrationen und anderen Störungen zu trennen.
      Da nur niederfrequente Anteile des Signals interessant sind werden vor allem lowpass Filter und notch Filter eingesetzt.

      Warum gibt es soviele Störungen?
      Die Ursachen sind vielseitig. Drehzahlabhängige Störungen entstehen durch unwuchtige Motor Glocken oder kaputte Propeller.
      Drehzahlunabhängige Störungen in bestimmten Frequenzbereichen sind Resonanzen.
      Komplett zufällige Störungen sind meist propwash.

      Warum so viel filtertuning?
      Filter haben grundsätzlich zwei Nachteile: sie verzögern das Signal und sie verändern es (also eventuell auch den nutzteil). Um die Verzögerung gering zu halten nimmt man möglichst wenige Filter und diese nicht so stark da starke Filterung auch mehr Rechenzeit benötigt. Notchfilter haben einen sehr hohen Wirkungsgrad auf bestimmte Frequenzen und sind verhältnismäßig unaufwändig. Low Pass filter sind sehr rechenaufwändig wenn sie effektiv sein sollen.

      Überhaupt gibt es nun sogenannte RPM Based Filter. Hierbei ist dem fc durch bi-direktionales dshot die genaue Drehzahl jedes motors bekannt und es können notchfilter genau auf die erwarteten Frequenzen für die jeweiligen Drehzahlen eingestellt werden.

      Ein Signal mit geringer Verzögerung ist unglaublich wichtig, da niederfrequente Störungen wie sie durch propwash entstehen umso besser bekämpft werden können je früher dies passiert. Da geht es tatsächlich im Zweifel um jede Millisekunde.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
    • Ich muss mich noch mehr mit der Materie beschäftigen und kann dazu nur aus dem Bereich der Tontechnik mit reden. Was mich irritiert ist das der Lowpass einen hohen Rechenaufwand fordert? Letzendlich lässt der Lowpass ja nur tiefe Frequenzen ab einer festgelegten Grenzfrequenz passieren. Ein Notch Filter, also Kerbfilter, wiederum schneidet eine festgelegte Frequenz in einer gewünschten Breite (Q-Faktor) und einer eingestellten Intensität aus. Auch das ist aus heutiger Sicht eigentlich kein großer Rechenaufwand mehr. Was natürlich abhängig von der Leistungsfähigkeit der Recheneinheit ist. In der Live Tontechnik nutzt man diese Kerbfilter um Rückkopplungen/ Feedbacks zu vermeiden. Hierfür gibt es sogenannte Feedback Destroyer die automatisch Frequenzen erkennen und filtern so das keine Rückkopplung entsteht. So etwas wäre ja auch eine feine Sache für Copter :)
      Inhalt und Haftung
      Die enthaltenen Angaben sind nach bestem Wissen und Gewissen des Forumsusers richtig. Dennoch wird dieser Inhalt, einschließlich des durch sie zugänglich gemachten Inhalts,
      des Materials und der Informationen dem Benutzer ohne Zusicherungen oder Gewährleistungen jeglicher Art zur Verfügung gestellt.
      Die Nutzung der Infomationen erfolgt somit auf eigene Gefahr.
    • Du musst bedenken, dass der Filter jede Sekunden achttausend Mal dynamisch auf drei verschiedenen Achsen gleichzeitig angewendet wird. Es ist nicht unbedingt die Rechenleistung, die hier zu schaffen macht (LPFs gabs bei F1 Prozessoren auch schon) sondern die Latenz die ein jeder Filter induziert. Das ist wahrscheinlich bei Postprozessing von Ton (auch wenns live ist) nachrangig, aber bei 8k hat die CPU nur 0.000125 Sekunden Zeit alle Berechnungen aus zu führen. Die Latenz der Filter wird im einstelligen Millisekunden Bereich gemessen, da merkt man einige Prozentpunkte Unterschied!


      Alles von UAVtech auf YT
      Je weniger du selber machst, desto weniger machst du auch falsch :P

      blackcatframes.racecopter.at/product/sica-5-6/
    • @Solix ein typischer lowpass Filter hat ein sehr flachen roll-off. Damit der steiler wird, muss ein lowpass aufwändigerer Art mehrfach angewendet werden. Ich glaube einige Filtertypen machen auch die Phasen kaputt usw.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
      • Stimmt die Latenzen sind immer das Problem. Ist ja im gesammten digitalen Bereich so. Die müsste sich aber durch eine Erhöhung der Arbeitsfrequenz veringern lassen. Die 8 kHz sind ja für heutige Maßstäbe gering wenn man bedenkt das aktuelle CPU 's im GHz Bereich arbeiten. Da wird sich bestimmt in Zukunft noch einiges tun.
      Inhalt und Haftung
      Die enthaltenen Angaben sind nach bestem Wissen und Gewissen des Forumsusers richtig. Dennoch wird dieser Inhalt, einschließlich des durch sie zugänglich gemachten Inhalts,
      des Materials und der Informationen dem Benutzer ohne Zusicherungen oder Gewährleistungen jeglicher Art zur Verfügung gestellt.
      Die Nutzung der Infomationen erfolgt somit auf eigene Gefahr.
      • @Simon: Damit ich mir das vorstellen kann. Mit Roll-off meinst du die Flankensteilheit? Und warum muss ein Filter mehrfach angewendet werden? Wenn was gut gefiltert wurde sollte das ausreichend sein. Oder liegt das an der Qualität der Filter?
      Inhalt und Haftung
      Die enthaltenen Angaben sind nach bestem Wissen und Gewissen des Forumsusers richtig. Dennoch wird dieser Inhalt, einschließlich des durch sie zugänglich gemachten Inhalts,
      des Materials und der Informationen dem Benutzer ohne Zusicherungen oder Gewährleistungen jeglicher Art zur Verfügung gestellt.
      Die Nutzung der Infomationen erfolgt somit auf eigene Gefahr.
    • Ich für weitere Details solltest du mal im betaflight slack Channel fragen. Ich bin kein Spezialist dafür.
      Die arbeitsfrequenz erhöhen geht nur bedingt, da die Algorithmen ja trotzdem Dateninput brauchen.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
    • simon.bethke schrieb:

      Die arbeitsfrequenz erhöhen geht nur bedingt, da die Algorithmen ja trotzdem Dateninput brauchen.
      Ok.. wodurch wird die Arbeitsfrequenz limitiert? Die aktuellen Prozessorgeschwindigkeiten sind sehr weit über 8 kHz. Das hatte mein Taschenrechner vor 30 Jahren schon.
      Da geht also noch viel, viel mehr. Wird das gewollt limitiert oder liegt das im finanziellen Bereich.. also Mittel bezogen?

      Edit: Der Flaschenhals sind in diesem Fall doch irgendwie die 8kHz / bzw. die Arbeitsfrequenz.

      Allerdings ist bei der Erkennung der Problemfrequenzen die Geschwindigkeit doch eigentlich nicht so relevant, weil sich das Setup des Copter ja auch nur "langsam" ändert.
      Selbst wenn die Erkennung und Umsetzung 1 Sekunde dauern würde wäre das doch mehr als ausreichend. In diesem Fall wäre eine automatische Umsetzung immer noch
      viel schneller als eine manuelle.
      Inhalt und Haftung
      Die enthaltenen Angaben sind nach bestem Wissen und Gewissen des Forumsusers richtig. Dennoch wird dieser Inhalt, einschließlich des durch sie zugänglich gemachten Inhalts,
      des Materials und der Informationen dem Benutzer ohne Zusicherungen oder Gewährleistungen jeglicher Art zur Verfügung gestellt.
      Die Nutzung der Infomationen erfolgt somit auf eigene Gefahr.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Solix ()

    • Neu

      Ich habe die Erfahrung gemacht, dass das Filtereinstellen für die Flugeigenschaften noch wichtiger ist als gute PIDs.

      Vermutlich sollten wir in dem Thread wir auch eine Bestandsaufnahme machen und gucken, was für Filter man derzeit in Betaflight verwenden kann:

      Der Dynamic Notch Filter
      Man schaltet ihn über den configuration tab ein. Er besteht aus zwei Notch-Filtern, die sich dynamisch anhand von Schwellenwerte auf den Frequenzbereich "setzen", der am stärksten rappelt. Will man seine Parameter ändern, muss man das über das CLI machen:
      dyn_notch_width_percent (Standardwert = 8 ) beschreibt den Abstand zwischen den beiden Notches. Setzt man ihn auf 0, dann ist nur ein einzelner Notch aktiv. Diese Einstellung ist die erste, mit der man die Phasenverschiebung/Latenz reduzieren sollte.
      dyn_notch_q (Standardwert = 120) beschreibt die Breite des/der Notches. Je kleiner die Zahl, desto breiter der Notch und desto größer die Phasenverschiebung/Latenz.
      dyn_notch_min_hz (Standardwert = ? 150) beschreibt die niedrigste Frequenz auf der die Notches fallen können.
      dyn_notch_range (Standardwert = AUTO) beschreibt den Frequenzbereich in dem der Notch wandern kann. Man kann ihn auch auf LOW, MEDIUM oder HIGH stellen. Effektiv kann man so einen oberen Bereich definieren, über den der Notch nicht hinausgeht. Die genauen Cutoff Frequenzen weiß ich jetzt leider nicht auswendig. MEDIUM liegt -wenn ich mich richtig erinnere- irgendwo bei 450Hz.

      RPM-Filter (edited in: 22.05.2019)
      Der RPM-Filter ist derzeit noch in der Betaphase. Zumindest auf Seiten von BLHeli32. Dieser Filter funktioniert aktuell nur mit einer Betafirmware und nur auf BLHeli32-ESCs. Damit, dass das System funktioniert ist der FC darauf angewiesen, Live-Daten der Drehzahlen der einzelnen Motoren zurückgeliefert zu bekommen. Dafür braucht es ein bidirektionales digitales Signal. Hier wird -wenn ich das richtig im Kopf habe- entweder DShot300 oder DShot 600 verwendet. Also nochmal, es funktioniert ausschließlich mit Betafirmware für BLHeli32ESCs, die man hier findet: github.com/bitdump/BLHeli/tree…20Rev32.6.2%20hex%20files
      ab 4.0.0 kann man dann die bidir option per CLI anschalten und somit RPM-Daten empfangen, die dann zur RPM-Filterung genutzt werden.

      Was tut der RPM Filter? Der RPM-Filter ist eine Ansammlung von Notchfiltern, die in Abhängigkeit der Motordrehzahl verschoben werden. Im Gegensatz zu dem Dynamic Notch, der Gyrowerte aus der Vergangenheit nutzt um an der passenden Stelle anzusetzen(und damit viel Latenz ins System bringt), orientiert sich der RPM-Filter eben an live-Daten, die er von den ESCs bekommt. Es handelt sich insgesamt um 36 Notchfilter, jeweils ein Filter nebst zwei zusätzlichen auf Harmoniefrequenzen pro Motor und Achse. Also 3 Notches * 4 Motoren * 3 Achsen(RPY) = 36 Notches. Das hört sich erstmal nach viel an, ist es aber im Vergleich zu dem Dynamic Notch nicht. Es werden jeweils die drei Harmonien Pro Motor und Achse entsprechend der aktuellen Drehzahl in ihrer Frequenz verschoben, sodass das Motorband der störenden Gyrodaten sauber herausgefiltert werden kann. Das sind dann hauptsächlich beschädigte Motorglocken, unsauber laufende Kugellager oder angematschte Props, die so zuverlässig herausgefiltert werden können. Worin der RPM-Filter weniger gut ist, ist das Herausfiltern von Resonanzfrequenzen des Rahmens. Wenn mann seinen Rahmen auf die Tischplatte klopft und die ein Stimmgabel-artiges Nachschwingen aufweisen, sollte man auf jeden Fall sehr vorsichtig sein, wenn man den Dynamic Notch abstellt um nur auf den RPM zu vertrauen. Denn das kann schnell in einer Mondlandung enden.

      Wie stellt man den RPM-Filter ein?
      Es gibt einige CLI-Befehle, die hier relevant sind.
      Um ihn überhaupt nutzen zu können müssen neben der passenden ESC-Firmware auch folgende CLI Befehle gesetzt werden:
      scheduler_optimize_rate auf "ON"
      dshot_burst auf "OFF"
      dshot_bidir auf "ON"
      Dann ist es noch wichtig, die richtige Anzahl der Motorpole zu setzen, damit der FC auch weiß, welche Drehzahl wirklich anliegt. Die Polzahl erhält man, indem man die Magnete zählt. Bei 22xx Motoren sind es eigentlich immer 14 Pole und das ist auch der vorkonfigurierte Standardwert. Sollte man 1407 oder kleinere Motoren fliegen, ist es a uf jeden Fall ratsam, noch einmal nachzuzählen, meist sind es da dann 12 Pole. Folgender CLI-Wert muss dafür angepasst werden:
      motor_poles auf [Anzahl Pole/Magnete] (Standardwert ist 14)
      Als nächstes ist es wichtig aufzupassen, dass der Prozessor mit der nun auftretenden Rechenlast klarkommt und den PID-Loop halten kann. Um auf nummer sicher zu gehen, sollte man 4k/4k einstellen, auch wenn das unter Umständen zu geringem Aliasing bzw. Refelktionen im Gyrosignal führen kann -da wird wohl gerade dran gearbeitet. Bei einem F7 Prozessor soll es wohl keine Einschränkungen geben. Ich persönlich übertakte meine F4 leicht um die 8k/8k halten zu können.
      Das sind allerdings nur die Einschalt-relevanten Optionen. Man kann auch die Filterparameter weiter anpassen, damit sie besser in das Noise-Profil des eigenen Kopters passen:

      gyro_rpm_notch_harmonics = 3
      0 ist aus, 3 sind alle drei möglichen Harmonien, wie oben beschrieben
      gyro_rpm_notch_q = 500
      Je höher man diesen Wert setzt, desto enger -und schneller- wird der RPM-Filter. Wird er zu hoch gesetzt, können Vibrationsartefakte durchrutschen und zu schrecklichen Filterergebnissen führen, egal ob mit oder ohne Dynamic Notch
      gyro_rpm_notch_min_hz = 100
      Markiert das untere Ende des Filters. Nicht gebrauchte Harmonien werden wohl bei 1000Hz "geparkt" um die Latenz so gering wie möglich zu halten.

      Das Gleiche gibt's wohl auch noch einmal für den DTerm, allerdings hat sich bei bisherigen Tests herausgestellt, dass der Filter auf DTerm quasi keine Verbesserung bewirkt.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Ich habe gerade nicht so viel Zeit, das jetzt noch auf die anderen Filter auch zu schreiben, vielleicht kann sich da ja noch wer beteiligen.

      Generell sollte man bedenken, dass je weniger Filterung man braucht -und das bedeutet bei uns hauptsächlich, entweder die Filter ganz abzuschalten oder aber ihre Cutoff-Werte so hoch wie möglich zu schieben- desto besser kann der Kopter relevante Störungen wie Propwash, Stöße und Abweichungen vom Steuersignal ausregeln. Gerade bei Propwash kommt es sogar auf halbe oder gar zehntel Millisekunden im relevanten Frequenzbereich an.


      Am Ende ist meine Philosophie: Je besser der Kopter fliegt, desto schlechter muss ich fliegen können 8)
      Nen Split-S ohne Propwash bekommt man entweder duch Skill hin, oder durch nen geil getunten Kopter. :P
      Ironie ist wie dieser Smiley:
      °.-/)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von wuzzle ()

    • Neu

      Sehr schön beschrieben! Ein weiser betaflight jünger sagte erst kürzlich auch nochmal zu mir, dass ich nicht vergessen sollte, dass ich nen copter - keinen plasmatree - fliege. Das soll so viel heißen wie: fliegt der copter gut, dann fliegt er gut! Egal wie scheiße die Graphen aussehen.
      Eine Erfahrung, die ich selbst gemacht wiederum dagegen stellen mag/kann ist, dass man nie weiß wie geil ein copter theoretisch fliegen könnte.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
    • Neu

      Solix schrieb:

      simon.bethke schrieb:

      Die arbeitsfrequenz erhöhen geht nur bedingt, da die Algorithmen ja trotzdem Dateninput brauchen.
      Ok.. wodurch wird die Arbeitsfrequenz limitiert? Die aktuellen Prozessorgeschwindigkeiten sind sehr weit über 8 kHz. Das hatte mein Taschenrechner vor 30 Jahren schon.Da geht also noch viel, viel mehr. Wird das gewollt limitiert oder liegt das im finanziellen Bereich.. also Mittel bezogen?

      Edit: Der Flaschenhals sind in diesem Fall doch irgendwie die 8kHz / bzw. die Arbeitsfrequenz.
      Nein, es wird Limitiert durch die Physik. Ich versuche es Mal verständlich aus zu drücken: z.B. du bildest über die Gyrodaten von zwei Zeitpunkte einen Mittelwert, (dies ist auch ein ganz primitiver Tiefpass) um so tiefer die Frequenz sein soll, die du noch rausfiltern willst, desto weiter in die Vergangenheit musst du gucken und damit mitteln. Weiter in die Vergangenheit gucken = höhere Latenz, weil das Zeit Signal "alt" ist. Und alleinig die Frequenz bestimmt die Zeitspanne, die man in die Vergangenheit gucken muss.
    • Neu

      @tomstoms und gerade weil man nicht so lange in die Vergangenheit schauen kann/will nutzt man andere Algorithmen die schlechtere Ergebnisse mit weniger Latenz bieten aber rechenintensiver sind.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
    • Neu

      simon.bethke schrieb:

      @tomstoms und gerade weil man nicht so lange in die Vergangenheit schauen kann/will nutzt man andere Algorithmen die schlechtere Ergebnisse mit weniger Latenz bieten aber rechenintensiver sind.
      Wie sehen die aus? Bzw. wie ist die Herangehensweise? Nicht genau erklärt, aber so das ich es verstehe ;)
      Inhalt und Haftung
      Die enthaltenen Angaben sind nach bestem Wissen und Gewissen des Forumsusers richtig. Dennoch wird dieser Inhalt, einschließlich des durch sie zugänglich gemachten Inhalts,
      des Materials und der Informationen dem Benutzer ohne Zusicherungen oder Gewährleistungen jeglicher Art zur Verfügung gestellt.
      Die Nutzung der Infomationen erfolgt somit auf eigene Gefahr.
    • Neu

      simon.bethke schrieb:

      @tomstoms und gerade weil man nicht so lange in die Vergangenheit schauen kann/will nutzt man andere Algorithmen die schlechtere Ergebnisse mit weniger Latenz bieten aber rechenintensiver sind.

      Das Problem ist, dass du nun mal bei einem PT1 bei der Grenzfrequenz eine Phasenverschiebung von 45° hast, heißt bei zB 100Hz sind das 1,25ms, und wir sind uns einig, dass bei einer 8Khz Pid Loop maximal 0,125ms dazu kommen (hier ist alles inkludiert, auslesen der Werte vom Sensor, FFT des dynamischen Filters, der Filter selbst usw…). Durch schnellere Prozessoren kannst du die Berechnung zwar beschleunigen, aber nicht das Delay, welches aus dem Filter selbst stammt. Da bleiben immer 1,25ms stehen und ist damit mindestens eine Größen Ordnung höher als die Digitale Verarbeitung an sich.

      Und die Ansätze andere Filter Typen um zu setzen, wurde ja leider in Bf3.5 wieder rausgenommen. Der Kalmann Filter hat ja die Zukünftigen Werte geschätzt, was dir das Delay verringert. Hatte aber wohl trotzdem die Probleme, dass der Schätzer wohl doch nicht so geeignet war. Stecke jetzt aber in der Regelungstechnik nicht so drin, deswegen höhere ich an dem Punkt auf bevor ich noch Blödsinn rede. Aber soweit ich das mit bekommen habe war der Fast Kalman, quasi nur ein weiterer PT1, und damit auch nicht besser…

      Rechenleistung ist momentan kaum ein Problem, wenn du dir mal anschaust wie sich ein F7 bei 2Khz Pidloop langweilt… Und wenn das nicht reicht, dann gibt es genug andere CPUs, dann kostet halt ein FC 100€, na und? Aber erst, wenn dieser auch benötigt wird, wird ein Dev dafür Programmieren und dann erst wird ein Hersteller das auch in Serie bauen…

      Und da wir an der momentanen Implementierung nichts ändern können (außer die Devs selbst ;) ). Und keiner von uns ein Paper mit einem neuen tollen Filter geschrieben hat, müssen wir wohl damit leben wie es gerade ist. Heißt Filtergrenzfrequenzen möglichst hoch wählen und nicht nötige Filter deaktivieren. Und immer auf die Motortemperatur achten. (Gott mein Copter kann so geil fliegen, aber meine Motoren hassen mich dafür :( )
    • Neu

      Ich verstehe nicht ganz warum wir nix ändern können und noch weniger verstehe ich warum wir es sollten. Der kalmann Filter ist ausgebaut worden, weil er quasi nur ein anderer rechenweg zu einem bestehenden Filter ist.
      Ausschließlich in der Mitte von Nix zu schweben macht mich depressiv!
      ...meine Rechtschreibprüfung funktioniert zum Glück nur bei kurzen Wörtern. Korrekte Wörter werden da immer durch unsinnige andere ersetzt.
    • Neu

      tomstoms schrieb:

      Und die Ansätze andere Filter Typen um zu setzen, wurde ja leider in Bf3.5 wieder rausgenommen. Der Kalmann Filter hat ja die Zukünftigen Werte geschätzt, was dir das Delay verringert.

      Es gibt einige Ansätze, die alle in Testversionen seit Monaten zu testen sind. Der Kalman Filter wurde wieder entfernt und 32k nicht mehr genutzt, weil es keine Vorteile gab und es garkein Kalman Filter war, sondern eine Approximation per PT1. Es konnte jeder den Kalman Filter in Butterflight testen und fliegen, irgendwie kam da dann aber nichts mehr.

      Du kannst sehrwohl als normaler Nutzer helfen. Auf Github und Slack kannst du neueste Features testen, Filterpresets erstellen, Tipps geben was für dich gut funktioniert.
      Je weniger du selber machst, desto weniger machst du auch falsch :P

      blackcatframes.racecopter.at/product/sica-5-6/