Was sind Filter?
Die Signale vom u.a. Gyroskop-Chip oder D-Term die gefiltert werden kann man sich wie ein Rauschen an einer viel befahrenen Innenstadt-Straße vorstellen. Man hört Autolärm, Musik aus Bars, Gespräche anderer Leute und seinen eigenen Gesprächspartner, der neben einem steht. Unser Gehirn kann die unwichtigen Geräusche von den wichtigen trennen und wir verstehen den Inhalt des Gesprächs obwohl der vorbeifahrende LKW viel lauter ist und alles übertönt. Ähnliches muss die Flightcontroller-Software mit den Signalen machen die von Sensoren (Gyroskop) oder Eingabegeräten (RC-Link) kommen oder errechnet werden (D-Term).
Die Signale kommen als „Rauschen“ rein und die Kunst ist es das brauchbare, echte Signal von den Störgeräuschen „Noise“ zu trennen. Letztendlich weiß niemand welche Teile des Signals brauchbares Signal oder Noise sind. Man weiß aber, je mehr brauchbares Signal und je weniger Noise in dem endgültigen (gefilterten) Signal steckt, desto besser wird der Quadcopter am Ende fliegen. Daran und letztendlich nur daran kann man „gute“ Filterung von „schlechter“ Filterung unterscheiden. Homogenere oder niedrigere Signale in der Spektralanalyse oder dem 2D-Noiseanalyse sind nicht unbedingt besser, da hier eine Überfilterung stattfinden kann. Es gehen relevante Informationen aus dem Signal verloren.
Jede Filterberechnung kostet Zeit. Einerseits weil erstmal Datensätze angehäuft werden müssen um gewisse Berechnungen durchzuführen: zum Beispiel Durchschnitt berechnen oder Mitteln. Andererseits kostet die Berechnung selbst Zeit. Schnellere und leistungsfähigere Prozessoren bieten hier Vorteile. Die Generation Prozessor F4 ist besser als F3. Prozessoren, die die Signale des Gyroskops in Echtzeit berechnen (8kHz Gyroskopsignal und 8kHz PID-Loop) müssen keine Aliasing-Effekte filtern, die bei 8kHz Gyroskopsignal und 4kHz PID-Loop entstehen. Wir möchten eine möglichst kurze Zeit (Delay) zwischen dem Messen/ Aufzeichnen des Signals und der Reaktion des Quadcopters darauf erzielen. Je kürzer die Zeit, desto schneller kann die Motordrehzahl bei Prop-Wash angepasst werden und desto weniger Prop-Wash entsteht.
Ziel: So wenig Filterung wie möglich, um das Filter-Delay so klein wie möglich zu halten, und so viel Filterung wie nötig um störungsfreie Signale in die weiteren Berechnungseinheiten zu schicken.
Man muss den Sweet-Spot für die jeweiligen Filtereinstellungen treffen. Da dies sehr von der Bauqualität des Quadcopters, den Komponenten und der Software abhängig ist und es unzählige Variablen gibt, ist dies sehr komplex geworden. Hier helfen die Slider enorm. Man muss nicht jeden Sinn und Zweck der einzelnen Filter und dessen Parameter verstehen. Man kann mit sinnvollem Maß „mehr“ und „weniger“ Filtern und dabei zwischen den Filtern eine gesunde Balance erhalten.
Wie stark die einzelnen Filter Noise unterdrücken wird im Folgenden erklärt. Um die genaue Latenz zu errechnen und zwei Filtereinstellungen zu vergleichen lege ich euch sehr Mark Spatz’s Filter-Calculator ans Herz:
https://drive.google.com/file/d/1T9Jd4QP1A8sP3d5es54TexNdkjvUdGO/
Macht euch die Mühe und speichert eine Kopie für jede Filtereinstellung. Tragt Eure Einstellungen aus Betaflight hier ein und schaut euch das entstehende Delay an. Wenn Ihr eine Einstellung ändert könnt ihr jetzt die Auswirkungen auf das Filterdelay und die Arbeit der Filter berechnen.
Die Filter werden in folgender Reihenfolge abgearbeitet:
https://github.com/betaflight/betaflight/issues/9896
Vorsicht: Die Reihenfolge entspricht nicht derer, in denen die Filter im Betaflight Configurator aufgelistet werden.
Vorsicht: Filtert nicht unter 90Hz, hier greift Ihr ins Prop-Wash oder die gewünschten Bewegungen des Quadcopters ein. Es kann dann passieren, dass der Quadcopter seine eigene Bewegung nicht mehr erkennt und abstürzt.
Anbei das Flow-Chart wie die einzelnen Funktionen von Betaflight miteinander interagieren, damit man sieht wo die Filter integriert sind:
Filtertypen #
Lowpass-Filter #
Der Tiefpass Filter lässt Schwingungen niedriger Frequenzen passieren und unterdrückt (attenuates) Schwingungen höherer Frequenzen. Der Punkt, ab dem er niedrige von hohen Frequenzen unterscheidet wird cutoff genannt. Je niedriger der cutoff ist, desto „mehr“ filtert der Lowpass Filter und desto mehr Delay erzeugt er auch. Der cutoff ist nicht scharf, sondern ein fließender Übergang von keiner – wenig – cutoff – viel – sehr viel Filterung.
Analog dazu gibt es den Hochpass-Filter der niedrige Frequenzen unterdrückt und hohe Frequenzen passieren lässt. Dieser findet in Betaflight keine Anwendung.
https://de.wikipedia.org/wiki/Tiefpass
Beispiel:
In der oberen Kurve ist eine Schwingung von 10 Hz mit zwei Schwingungen mit 333 und 1000 Hz überlagert.
Durch Einsatz eines Tiefpassfilters bei 50 Hz in der unteren Kurve wird nur noch die 10 Hz Schwingung durchgelassen, während die Schwingungen mit 333 und 1000 Hz vom Filter unterdrückt werden.
Lowpassfilter sind unpräzise. Sie löschen Störungen nicht raus sondern mildern diese nur ab. Ihre Berechnung erzeugt im Vergleich zu allen anderen Filtertypen viel Delay. Sie wirken schlecht gegen einzelne Störende Frequenzen, senken aber das generelle Rauschen im Frequenzspektrum ab. Je weiter die störende Frequenz vom Cutoff weg ist, desto stärker wird sie abgeschwächt.
Biquad Lowpass Filter #
In Betaflight stehen mehrere Arten von Lowpass-Filtern zur Verfügung. Diese unterscheiden sich in der Art und Weise wie sie den Übergang am Cutoff gestalten: PT1, PT2, PT3 und Biquad. Der Biquad Filter ist der älteste. Er unterdrückt nahe des cutoffs schlecht aber in weiterer Entfernung gut. Die Berechnung kostet viel Delay. Daher ist er heutzutage weitgehend obsolet. Für sehr störanfällige Quads kann er noch vereinzelt Anwendung finden. Eine bessere Alternative zum Biquad Filter ist der PT3 Filter.
PT1, PT2 und PT3 Lowpass Filter #
Die aktuelle Generation von Lowpassfiltern ist die PT-Klasse. Diese filtern mit kürzerer Berechnungszeit effizienter. Es gibt 3 verschiedene „stärken“. Je stärker der PT Filter filtert, desto länger ist seine Berechnungszeit.
Ein PT1 Filter bei 125Hz erzeugt ca 1ms Delay. Verdoppelt man den cutoff halbiert man in etwa das Delay. Das bedeutet ein PT1 Filter bei 250Hz hat circa 0,5ms Delay.
Ein PT2 Filter bei 125Hz besteht aus dem PT1 Filter und einem zweiten PT1 Filter der um 1,55x im Frequenzspektrum nach oben verschoben wird, also 193Hz. Zusammen erzeugt das ein Delay von ca 1,25ms Delay, also ca +25% gegenüber einem PT1 Filter.
Ein PT3 Filter bei 125Hz besteht aus dem PT1 Filter, einem PT1 Filter der um 2x im Frequenzspektrum nach oben verschoben wird, also 250Hz und einem dritten PT1 Filter, der wiederum um 2x im Frequenzspektrum nach oben verschoben wird. Zusammen erzeugt das ein Delay von ca. 1,5ms, also +50% gegenüber dem PT1 Filter.
Zwar ist das Delay höher, aber die Dämpfungskraft des PT3 entspricht dem des Biquad-Filters mit deutlich weniger Delay. Ein PT3 Filter ist effizienter als 2 PT1 Filter einzeln. Also lieber einen PT3 Lowpass Filter nutzen statt 2 einzelner PT1 Lowpass Filter.
Notch Filter #
Übersetzt so viel wie Kerbfilter. Dieser Typ Filter schlägt eine Kerbe in das Signalsprektrum. Er lässt höhere und niedrige Frequenzen (cutoff) passieren und unterdrückt die Frequenzen in seiner Mitte (center). Wenn in Betaflight cutoff geschrieben wird, wird immer der untere cutoff gemeint. Der obere cutoff ist vom center genauso weit entfernt wie der untere cutoff. Die Filter sind immer symmetrisch:
Beispiel: cutoff = 100Hz, center = 200Hz bedeutet der untere cutoff liegt bei 100hz und der obere cutoff bei 300Hz.
Die Filterung beginnt schon kurz vor dem cutoff, ist hier jedoch schwach ausgeprägt. Notch Filter sind effizienter zu berechnen und unterdrücken Frequenzen deutlich stärker als Lowpass Filter, sie schneiden sie förmlich aus dem Frequenzsprektrum raus.
https://de.wikipedia.org/wiki/Kerbfilter
Alternativ gäbe es die Möglichkeit einen Hochpass und Tiefpassfilter zu kombinieren. Da dies jedoch eine deutlich ineffizientere Filtermethode ist wurde dies in Betaflight nie implementiert.
Kalman Filter #
https://de.wikipedia.org/wiki/Kalman-Filter
Kalman Filter ermöglichen es den weiteren Verlauf der Daten im Voraus zu schätzen, bevor diese gemessen werden um eine Filterung im Voraus zu berechnen. Der Gedanke dahinter ist, dass die Filterung berechnet ist, während die Daten eintreffen um das Delay möglichst kurz zu halten. Das Problem ist, dass diese Filter sehr (sehr sehr) rechenaufwändig sind und die bei uns verwendete Hardware überfordern. Vereinfachte Algorithmen des Kalman Filters waren weniger leistungsfähig und im Endeffekt fast nichts anderes als herkömmliche Lowpassfilter. Daher wurde diese wieder entfernt. Wie so oft gab es in der Entwicklergemeinschaft (wenn man die Entwickler um Betaflight als Gemeinschaft bezeichnen möchte) hierrüber Verwerfungen, weshalb Butterflight als Fork von Betaflight abgespalten wurde. Wer mag kann gern Butterflight und Kalman Filter ausprobieren. https://github.com/ButterFlight/butterflight
Die letzte Aktualisierung ist vom Februar 2019, Version 3.6.6 welche die Betaflight-Version 3.5.6 zur Grundlage hat. War halt einfach wirklich keine gute Idee.
Anwendung der Theorie in der Praxis #
Kommen wir von der Theorie zur Anwendung der Filter in der Flight-Controller-Software. Beherzigt oben genannte Faustregeln. Alles unter 100Hz sind echte Bewegungen, wenn auch zum Teil ungewünscht. Die filtern wir nicht raus, denn wir möchten diese Bewegungen erfassen und mit oder gegen diese arbeiten. Eine Filterung in diesem Bereich macht alles eher schlimmer als besser. Alles über 600Hz sehen wir eh nicht und erzeugt kaum Wärme in den Motoren. Das lassen wir unangetastet. Alle Störungen zwischen 100 und 600Hz filtern wir mit den Defaulteinstellungen von Betaflight erstmal weg. Meist kann man die Filterung schrittweise reduzieren. Die Performance steigt aber auch die Störungen. Der Sweetspot ist individuell. Schrittweise rantasten, vergleichen, Blackbox analysieren.
Unter 100Hz haben wir ein Problem, hier greifen keine Filter. Wenn wir die Filterung zwischen 100 und 600Hz jedoch reduzieren und damit das Delay, steigt die Reaktionsgeschwindigkeit des Quadcopters und die Schwingungen unter 100Hz treten weniger stark auf. Hier gilt: weniger ist mehr.
Gyro-Filterung #
Das Gyroskop-Signal durchläuft eine Reihe von Filtern. Die erste Ebene findet bereits im Gyroskop-Chip selbst statt. Hier ist ein Lowpass-Filter aktiv, dessen Parameter der Hersteller (InvenSense, Bosch) festgelegt hat. Die Einstellungen können nicht verändert werden. Das rohe Gyroskopsignal (in der Blackbox gyro_scaled) ist also eigentlich schon einmal gefiltert. Die Reihenfolge der Filter ist festgelegt.
Gyro RPM Filter #
Der ESC teilt dem Flightcontroller in (fast) Echtzeit die aktuelle Drehzahl des Motors mit. Diese Information kann der Flightcontroller mit dem Noise-Spektrum dieses Motors auf einer Achse abgleichen und hier gezielt einen sehr effizienten Notchfilter platzieren (1st harmonic = Fundamental). Ein Motor dreht sich sehr regelmäßig und erzeugt eine Sinus-förmige harmonische Schwingung. Diese haben jedoch die unangenehme physikalische Eigenschaft, dass sie Überschwingungen, also Schwingungen mit genau doppelter, vierfacher, achtfacher, usw. Frequenz mit erzeugen. Diese sind zwar jeweils nur halb, viertel, achtel, usw. stark wie die fundamentale Schwingung, stören jedoch trotzdem. Daher müssen auch meist die 2. und 3. Überschwingung (harmonic) gefiltert werden.
Zusätzlich verdoppelt der Flightcontroller also die errechneten Filterparameter und legt einen 2. Filter auf die zweite Harmonie (2nd harmonic). Anschließend wird dieser Wert wieder verdoppelt und auf die 3. Harmonie (3rd harmonic) gelegt. Dies geschieht auf jeder der drei Achsen. Wir haben also 9 effiziente Notch-Filter pro Motor, welche den Großteil des Noisespektrums sehr stark und effizient herausfiltern. Insgesamt bis zu 36 Notchfilter. Diese Filtern Störungen von Motoren, Propellern und Propeller-Muttern heraus. Diese Störungen machen einen Großteil der Störsignale aus. Die Einführung der RPM Filter konnte 50-75% des Filterdelays von Betaflight <4.0.x reduzieren.
set gyro_rpm_notch_harmonics = 3
Die Eingabe von 0 harmonics deaktiviert die Filterbank.
Die Standardeinstellungen müssen selten geändert werden. Wenn in der Heatmap kein Anzeichen einer 3rd harmonic zu sehen ist kann man die Harmonien auf 2 reduzieren. Hierzu sollte man aber das scaling in PID-Toolbox ändern um genau zu sehen, dass auch wirklich kein Rest-Rauschen der 3rd harmonic in den D-Term wandert und dort verstärkt wird. Dies bringt aber nur wenig Verkürzung des Delay.
In der CLI kann man den Qualitätsfaktor (Q-Faktor) verändern:
set gyro_rpm_notch_q =
Der Q Faktor beschreibt die Selektivität des Filters. Kleinere Werte ergeben einen breiteren Filter, der aber weniger gezielt Rauschen unterdrück. Höhere Werte ergeben einen schmaleren Filter, der gezielter Rauschen unterdrückt. Kleinere Werte erzeugen mehr Delay. Sollte der RPM-Filter nicht ausreichend Filtern kann man diesen Faktor anpassen.
RPM-Filter lässt in diesem Beispiel noch viel Motor-Noise in den D-Term.
Besserung der Noise im gefilterten D-Term nach Anpassen des Q-Faktors.
set gyro_rpm_minHz = 120
Mit diesem Parameter wird bestimmt ab welcher Frequenz der RPM-Filter zu arbeiten beginnt. Je Höher der Wert, desto kürzer das Delay und desto besser das Prop-Wash-Handling bei niedriger Motor-Drehzahl. Jedoch muss man bedenken, dass hier mehr Störungen durchgelassen werden. Zum analysieren sollte man das gyro_scaled und gyro Signal vergleichen. Im unteren Bereich des Motorbandes sollten nicht zu viele Störungen durchgelassen werden.
Ein Problem sind „geparkte“ Notchfilter an der minHz Grenze. Ist die Drehzahl niedriger als der oben gesetzte Wert werden die Notch-Filter an der Grenzfrequenz (minHz) geparkt. Hier summieren sie sich und es kommt zum idle-rabble. Einem unsauberen Geräusch direkt nach dem armen. Dies ist Ausdruck einer fehlerhaften Noise-Unterdrückung durch die sich überlagernden geparkten Notches. Mit Betaflight 4.3 wird ein crossfading integriert, welches die Wirkung des RPM-Filters ab der doppelten minHz Frequenz linear reduziert wird, bis die RPM_Filter bei minHz quasi abgeschaltet sind. Bedenkt also das bei o.g. Einstellung ab Betaflight 4.3 die Wirkung der RPM-Filter bei 240Hz reduziert wird und ab 120Hz keine Wirkung mehr eintritt. Ggf. muss man den alten Wert von Betaflight 4.2 leicht absenken.
Quelle: Add biquad crossfeeding + RPM filter fix
Gyro Dynamic Lowpass Filter 1 #
Im Gegensatz zum statischen Lowpass Filter ist der untere cutoff, also Beginn des Lowpass Filters von der Stellung des Gashebels abhängig. Je höher der Gashebel steht und die Motoren sich drehen, desto höher ist der untere cutoff. Hierdurch wird gegenüber einem statischen Lowpass Filter das Delay bei höheren Frequenzen deutlich reduziert. In Tests zeigte sich, dass die Qualität der Filterung nicht signifikant schlechter ist als beim statischen Lowpass Filter. Aktiviert wird der dynamische Lowpass Filter indem der untere cutoff auf einen Wert über 0 gestellt wird.
set dyn_lpf_gyro_min_hz = 150
Um den Effekt auf das Delay zu sehen schaut in den Filter Calculator und schiebt den Throttle-Slider hoch und runter. Beobachtet die Linie für den Gyro Lowpass:
https://github.com/betaflight/betaflight/wiki/4.0-Tuning-Notes#Dynamic-lowpass-filtering
Den Effekt des Lowpass Filters kann man am besten im Analyser Tab vom Blackboxexplorer sehen. Schaut euch die 3D-Analyse eines Gryo_scaled Signales an. Der Lowpassfilter filtert alles oberhalb seines cutoffs. Je weiter weg, desto stärker.
Die grüne gebogene Linie ist der Gyro Lowpass 1 Filter, Typ PT1, als dynamischer Filter von 280-700hz. Er liegt oberhalb des Großteils der gemessenen Störungen (Motor-Noise). Im unteren Bereich sieht man leicht rot schimmernd Störungen. Zu diesen hat der Filter gut Abstand, daher sollte die Unterdrückung ausreichend sein. Schauen wir mal im Gyro-Signal (ohne scaled) nach:
Ja, der Lowpassfilter unterdrückt die Störungen gut. Der gute Beobachter merkte auch, in dem gyro_scaled Signal waren auch Störungen bei 500Hz-600Hz genau am cutoffs. Diese werden vom dynamischen Gyro Lowpass Filter schlecht erfasst und sind trotzdem weg. Nicht vergessen, der RPM Filter ist auch noch da. Warum bricht das Spektrum bei knapp 600Hz abrupt ab? Hier kommt die hardware-seitige Lowpassfilterung der ICM-Gyroskope zum tragen. Wie viel Filterung nötig ist ist komplex. Hier helfen die Slider in Betaflight enorm. Verschiebt den Gyro-Filter-Slider Stück für Stück nach rechts. Messen, kontrollieren. Habt ihr wenig Noise könnt ihr auch versuchen den Gyro Lowpass komplett abzuschalten. Siehe auch die Tuningalternative – Gyro Lowpass deaktivieren.
Gyro Lowpass Filter 1 (static) #
Die statische Variante des dynamic Lowpass Filters. Veraltet, aber wer mit einem oder zwei statischen Lowpassfiltern fliegen möchte kann diesen hier aktivieren.
Gyro Lowpass Filter 2 (static) #
Wird hauptsächlich genutzt um aliasing Effekte zu entfernen, die entstehen, wenn man mit unterschiedlichen Frequenzen von Gyroskop und PID-Loop arbeitet. Bei 8kHz PID-Loop kann diesen Filter abschalten. Bei 2 oder 4 kHz PID-Loop sollte dieser aktiviert bleiben und wird per Slider gesteuert. Hat man viele Signalstörungen so kann man zwei Lowpass-Filter nutzen.
Gyro (multiple) Dynamic Notch Filter #
Der Dynamic Notch Filter wird nach dem RPM Filter eingesetzt und springt in seinem Wirkbereich zwischen max_hz und min_hz um die dort höchste verbleibende Signalspitze zu unterdrücken. Dies sind meist Schwingungen vom Rahmen, also Biegen des Carbons oder beginnender Delaminierung, Antennen, GoPros, aber auch verbogene Propeller. Habt Ihr oben aufmerksam gelesen? Notch-Filter müssen immer symmetrisch sein. Max_hz muss mindestens doppelt so hoch wie min_hz sein.
Empfohlene Einstellungen für den Dynamic Notch bei aktiven RPM-Filtern:
# Filter RPM enabled - Dynamic notch BF 4.2 adapted set dyn_notch_max_hz = 350 set dyn_notch_min_hz = 100 set dyn_notch_width_percent = 0 set dyn_notch_q = 250
# Filter RPM enabled - Dynamic notch BF 4.3 adapted
set dyn_notch_count = 2
set dyn_notch_q = 500
set dyn_notch_min_hz = 120
set dyn_notch_max_hz = 400
Empfohlene Einstellungen für den Dynamic Notch ohne RPM Filter:
# Filter RPM disabled - Dynamic notch BF 4.3 adapted
set dyn_notch_count = 3
set dyn_notch_q = 300
Der ursprüngliche Dynamic Notch hatte 2 Gipfel. Diese hatten einen festen Abstand. Wenn diese nebeneinander liegen haben diese mit einer deutlich verkürzten Berechnungszeit eine breite Kerbe in das Signal geschnitten. Vor der RPM Filterung wurde dies genutzt um das Motor-Störband zu filtern. Dies war für einen einzelnen Notch zu breit. Seit der RPM-Filterung wird dieser Effekt nicht mehr benötigt. Wie weit die beiden Gipfel voneinander entfernt waren wurde mit der width eingestellt. Aktuell wird dies nicht genutzt und mit width = 0 deaktiviert.
Wer einen sehr sauberen Build hat und das Risiko eingehen möchte, dass ein verbogener Propeller einen Motor überhitzt kann den Dynamic Notch ganz deaktivieren. (Nicht zu empfehlen.) Je tiefer die Frequenz ist, bei der der Dynamic Notch aktiv werden muss, desto mehr Delay erzeugt er.
https://github.com/betaflight/betaflight/wiki/4.2-Tuning-Notes#Improved-dynamic-notch-filter
https://github.com/betaflight/betaflight/wiki/4.0-Tuning-Notes#Improved-dynamic-notch-code
Ausgehend von o.g. Standardeinstellungen wird der Dynamic Notch folgendermaßen justiert. Ihr sucht euch horizontale Linien in der Parula Heatmap:
Ein Beispiel ist oben gezeigt. Hier erwischt der dynamische Notch die Resonanz gerade so nicht. Der obere cutoff muss also leicht nach oben verschoben werden (400Hz). Um diese Resonanzen deutlich darzustellen muss oft der scale Faktor in PID-Toolbox nachgestellt werden. Je höher der untere cutoff liegt, desto weniger Latenz werden ihr haben. Ich würde allerdings nicht deutlich in das schräge Motornoiseband reingehen (Schmerzgrenze in oberem Beispiel 180Hz untere cutoff-Frequenz). Verbogene Propeller erzeugen massive Resonanzen. Wenn man crasht und mit einem verbogenen Propeller heimfliegt hilft der Dynamic notch ungemein hier die Schwingung zu reduzieren und weniger in den D-Term zu schleusen. Erwischt der diese Frequenzen nicht, weil der cutoff zu hoch ist, könnte ein Motor überhitzen und eine Windung schmelzen (engl.: to burn a motor).
set dyn_notch_count = 1 .. 5
Mit der Anzahl der dynamischen Notches kann man wählen wie viele „horizontale Linien“ man wegfiltern möchte. Eine wird bei jedem Quadcopter empfohlen. Zwei oder drei nur, wenn man auch 2 oder 3 horizontale Linien in der Parula Heatmap findet. Vier oder 5 sollte nur für sehr unsauber gebaute Quadcopter verwendet werden.
set dyn_notch_q = 500
Je größer der Q-Faktor ist desto schmaler ist die Kerbe. Dies erzeugt weniger Delay, unterdrückt aber auch ein weniger breites Signalspektrum.
Um genau zu sehen wo die einzelnen notch Filter nun arbeiten kann man mit folgender Option loggen:
set debug_mode = FFT_FREQ set gyro_filter_debug_axis = ROLL
Channel | Data |
---|---|
0 | centerFreq1 |
1 | centerFreq2 |
2 | centerFreq3 |
3 | Gyro signal pre dynNotch |
Derzeit kann man nur die ersten 3 Notch-Filter loggen.
https://github.com/betaflight/betaflight/pull/10554
Gyro Static Notch Filter #
Eigentlich obsolet, sollte nur in speziellen Einzelfällen angewendet werden. Der statische Notchfilter kann genutzt werden um eine Resonanz eines statischen, also sich nicht drehenden, Anbauteils zu filtern. Habt Ihr einen Rahmen der mit einer bestimmten Eigenfrequenz schwingt, eine GoPro-Mount oder Antenne die Störungen erzeugt, so könnt ihr diese damit ganz gezielt Filtern. Schlägt sich diese Schwingung (horizontale gelbe Linie in der Parula Heatmap) in den P-Term durch und stört da, dann sollte die Filterung auf Gyro-Ebene erfolgen. Schlägt sich diese nicht deutlich in den P-Term durch (meistens) dann ist eine Filterung erst auf D-Term Ebene möglich. Es hat sich aber gezeigt das die Störungen im P-Term trotzdem signifikant sind und daher lieber auf Gyroskop-Ebene gefiltert werden sollte.
Messt in der Parula Heatmap das Zentrum der störenden Schwingung und leicht darunter, gegeben Falles muss die Skalierung angepasst werden:
Wählt die center Frequenz nun in etwa im Bereich des gemessenen maximalen Wertes. Hier 240 Hertz. Die untere cut-off Frequenz sollte leicht unter der gemessenen Störung liegen – ggf. muss wieder zurückskaliert werden (scale 0.5). In diesem Beispiel 210 Hertz. Der obere cut-off liegt damit automatisch bei 270 Hertz. Siehe auch hier. Kontrolliert den Effekt in einem Vorher-Nachher-Vergleich.
D-Term Filter #
Im Gegensatz zum P-Term und I-Term benötigt der D-Term eine eigene Filterung, da dieser verbleibende Störsignale aus dem gefilterten Gyroskopsignal 10x-100x verstärkt. Das Gyroskop so stark zu filtern, dass keine D-Term Filterung nötig wird, würde ein immenses Delay erzeugen.
D-Term Dynamic Lowpass Filter #
Wie auch beim Gyro Lowpass hat sich beim D-Term ein dynamischer Filter etabliert. Er passt die Filterung der Gashebelstellung an, aber nicht linear, sondern etwa exponentieller Form:
https://github.com/betaflight/betaflight/wiki/4.2-Tuning-Notes#Dynamic-D-filtering-expo
set dyn_lpf_dterm_curve_expo = 6
Je niedriger die Zahl, desto sanfter steigt die Kurve an, je höher die Zahl, desto aggressiver. Möchte man die D-Term Filterung nur bei niedrigen Throttle-Werten bremsen, da hier langsame Wobbles entstehen kann man versuchen das Expo zu senken. Ist D-Term in niedrigen Throttle-Bereichen gut eingestellt, aber braucht in hohen Bereichen mehr Wirkung kann man das Expo erhöhen. Ab Betaflight 4.3 wird diese Option auch in der GUI einstellbar sein.
D-Term Lowpass Filter (static) #
Hat ebenso wie die statischen Lowpass Filter 1 auf Gyroskopebene keine Bedeutung mehr.
D-Term Static Notch Filter #
Habt Ihr einen Rahmen der mit einer bestimmten Eigenfrequenz schwingt, eine GoPro-Mount oder Antenne die Störungen erzeugt, so könnt ihr diese damit filtern. Schlägt sich diese Schwingung (horizontale gelbe Linie in der Parula Heatmap) NICHT in den P-Term durch und stört da nicht, dann kann die Filterung hier erfolgen.
Weitere Filter: #
Filter werden auch noch an vielen anderen Ebenen eingesetzt.
Yaw Lowpass Filter #
Sensible Feed-Forward Einstellungen in Verbindung mit unruhigem Throttle-Fingern in Racesituationen können ungeliebte Yaw-Bewegungen auslösen. Wer schnell am Gashebel agiert mischt immer mal unterbewusst etwas Yaw mit rein. Hier kann man festlegen, dass allzu schnelle Yaw-Bewegungen gefiltert werden. Zudem reduziert der Filter die Yaw Bewegung wenn man eine Gatestange trifft. Die Default 100 Hz sollten nicht unterschritten werden. Tunt erstmal mit dem Filter an, wenn Ihr mit den Filtern fertig seid, dann macht einen Vergleichslauf mit deaktiviertem Yaw Lowpass und schaut ob ihr Ihn wirklich benötigt. Meist kann er deaktiviert werden.
RC-Smoothing Filter #
Hier muss eigentlich nur noch eingestellt
set rc_smoothing_auto_smoothness = 10
werden. Der Input-Filter glättet den P-Term und Setpoint und ist als Biquad konfiguriert, der D-Term wird mit eine PT1 Filter geglättet (beiden Lowpass-Filter). Die Einstellung der smoothness hängt sehr von eurem RC-Link ab. Sehr gute Links kommen mit 5 hin. Racer stellen ca. 8 ein, Freestyler eher 12. Ältere Funkfernsteuerprotokolle benötigen 20, FrySky R9 Systeme sogar 40! (Dazu ff_interpolate_sp = averaged_4 setzen). FrSky R9 ist nur für Wings und Kameraplattformen zu ertragen, alle anderen sollten auf Express LRS umflashen. Mit Betaflight 4.3 wird hier alles anders.
set rc_smoothing_type = FILTER
set rc_smoothing_input_hz = 0
set rc_smoothing_derivative_hz = 0
set rc_smoothing_input_type = BIQUAD
set rc_smoothing_derivative_type = PT1
set rc_smoothing_auto_smoothness = 10
https://github.com/betaflight/betaflight/wiki/4.2-Tuning-Notes#RC-smoothing-improvements
Weitere Quellen zum Thema:
https://github.com/betaflight/betaflight/wiki/Gyro-&-Dterm-filtering-recommendations
https://github.com/betaflight/betaflight/wiki/Bidirectional-DSHOT-and-RPM-Filter
https://drive.google.com/drive/folders/1jCIJ2FKL7t-ZADcErNrZOcWfWtkgSVdr
https://oscarliang.com/betaflight-filtering/