Habe das Vario von nightflyer (
github.com/nightflyer88/Jeti_VarioGPS-Sensor), der auf dem Code von
www.rc-thoughts.com/jeti-variometer/ basiert, nachgebaut und den Code analysiert, um weitere Vario-Features zu testen.
Der Code bzgl. der von dir angesprochenen beiden Filter-Parameter X und Y ist in beiden Code-Quellen identisch, aber aus meiner Sicht in beiden nicht ganz korrekt.
Der Code implementiert einen digitalen Low-Pass-Filter einen sogenannten IIR (infinite impulse response) Filter, der eigentlich recht simpel, den letzten realen Messwert mit einem Faktor (Y) gewichtet und den letzten "geglätteten" Wert mit einem Faktor (X) gewichtet und daraus einen neuen "geglätteten" Wert berechnet.
Nun sind aber die beiden Glättungsfaktoren X und Y nicht wie in den beiden oben genannten Implementierungen des IIR - Filters realisiert, unabhängig voneinander, sondern sie müssen in der Relation Y = (1-X) zueinander stehen, oder anders ausgedrückt: X + Y muss 1 ergeben.
Siehe hierzu:
en.wikipedia.org/wiki/Low-pass_filter#Si...ulse_response_filter
So, was heißt das praktisch (immer unter der Bedingung X+Y=1) :
Je kleiner Y, desto mehr wird der Messwert geglättet und desto mehr werden die vergangenen Messwerte in den neuen geglätteten Wert gewichtet, aber auch desto träger wirkt sich eine aktuelle Wertänderung aus.
Der Wert X=0.12 (Y=0.88) glättet hochfrequente Schwankungen schon sehr stark, aber man hat noch einigermaßen ein zeitnahes Ansprechen des Varios.
Der Bosch-Sensor BMP280 rauscht sehr stark. Du kannst das einfach mal ausprobieren und Y=1 und X=0 ausprobieren, da hüpft der einzelne Messwert extrem. Je kleiner man Y wählt (und damit X automatisch größer wird), desto mehr wird der geglättete Wert über die Werte der Vergangenheit gewichtet und desto träger wird deine Anzeige.
Ich hoffe, es war nicht zu theoretisch und du kannst damit was anfangen
)
Wenn jemand an einer korrekten Implementierung Interesse hat, und diese in seinen Code patchen will, kann sich hier gerne nochmals melden, dann schicke ich noch das gefixte Codefragment. In diesem Code benötigt man nur noch einen "Smoothing-Factor", da der andere ja berechnet werden kann.
Gruß
Rainer