nichtgedacht
User
Hallo zusammen,
für ein Eigenbau Vario verwende ich zur Bestimmung der Steigrate das
Dual Filter Differenz Prinzip. Siehe auch
https://gregstanleyandassociates.co...sis/Filtering/MACD-approach/macd-approach.htm
Dabei wird die Eigenschaft eines Tiefpassfilters nützlich, sich der Steigung des Eingangssignals anzunähern und dieser
dann zeitlich um den Betrag Tau verzögert zu folgen. Die Differenz der Ausgänge zweier paralleler Tiefpassfilter ist dabei
der Steigung Proportional. Siehe Bild 1. In dem gelben rechtwinklige Dreieck ist die Steigung gebildet aus der Differenz der
Ausgangssignale geteilt durch die Differenz der Zeitkonstanten und entspricht genau der Steigung der blauen Linie
wenn der Vorgang einige Tau lang andauert.
Bei passender Wahl der Zeitkonstanten erhält man so die Erste Ableitung der Kurve (Steigung) bei gleichzeitiger Unterdrückung
des Rauschens der Sensordaten. Während aber das gewonnene Signal für die Höhe bereits durch den Tiefpassfilter mit der
kleineren Zeitkonstanten gut geglättet erscheint, ist das Signal für das Steigen nicht so gut geglättet. Das liegt daran, dass
die Ableitung der Steigung eines Verlaufs ja mit einem wie auch immer gearteten Hochpassfilter erfolgen muss. Und ein
Hochpassfilter verstärkt ja prinzipiell das Rauschen.
Es liegt nun also nahe das Variometersignal selbst durch einen weiteren Tiefpass zu schicken.
Dabei tritt aber eine weitere Verzögerung auf.
Was man bei einem Vario haben will ist ja eine möglichst spontane Reaktion ohne zappelig zu sein.
Das Rauschen des MS5611 Sensors ist vorhersehbar und bleibt dauerhaft unter einer bestimmten Schwelle.
Bei schnellen Anstiegen des Signals wird die Kurve durch das Rauschen relativ weniger stark verzerrt.
In Anlehnung an https://onlinelibrary.wiley.com/doi/abs/10.1002/aic.690260120
habe ich den Fillterkoeffizienten dynamisch gemacht um diesen Umstand zu berücksichtigen.
Der Filter hat dadurch eine höhere Reaktionsgeschwindigkeit ohne die Glättung schlechter
werden zu lassen. Bild 2 und 3 zeigen den Unterschied. Das originale Sensorsignal
ist mit einem künstlich erzeugtem Höhenverlauf beaufschlagt, Siehe Code Block.
Gruß
Dieter
für ein Eigenbau Vario verwende ich zur Bestimmung der Steigrate das
Dual Filter Differenz Prinzip. Siehe auch
https://gregstanleyandassociates.co...sis/Filtering/MACD-approach/macd-approach.htm
Dabei wird die Eigenschaft eines Tiefpassfilters nützlich, sich der Steigung des Eingangssignals anzunähern und dieser
dann zeitlich um den Betrag Tau verzögert zu folgen. Die Differenz der Ausgänge zweier paralleler Tiefpassfilter ist dabei
der Steigung Proportional. Siehe Bild 1. In dem gelben rechtwinklige Dreieck ist die Steigung gebildet aus der Differenz der
Ausgangssignale geteilt durch die Differenz der Zeitkonstanten und entspricht genau der Steigung der blauen Linie
wenn der Vorgang einige Tau lang andauert.
Bei passender Wahl der Zeitkonstanten erhält man so die Erste Ableitung der Kurve (Steigung) bei gleichzeitiger Unterdrückung
des Rauschens der Sensordaten. Während aber das gewonnene Signal für die Höhe bereits durch den Tiefpassfilter mit der
kleineren Zeitkonstanten gut geglättet erscheint, ist das Signal für das Steigen nicht so gut geglättet. Das liegt daran, dass
die Ableitung der Steigung eines Verlaufs ja mit einem wie auch immer gearteten Hochpassfilter erfolgen muss. Und ein
Hochpassfilter verstärkt ja prinzipiell das Rauschen.
Es liegt nun also nahe das Variometersignal selbst durch einen weiteren Tiefpass zu schicken.
Dabei tritt aber eine weitere Verzögerung auf.
Was man bei einem Vario haben will ist ja eine möglichst spontane Reaktion ohne zappelig zu sein.
Das Rauschen des MS5611 Sensors ist vorhersehbar und bleibt dauerhaft unter einer bestimmten Schwelle.
Bei schnellen Anstiegen des Signals wird die Kurve durch das Rauschen relativ weniger stark verzerrt.
In Anlehnung an https://onlinelibrary.wiley.com/doi/abs/10.1002/aic.690260120
habe ich den Fillterkoeffizienten dynamisch gemacht um diesen Umstand zu berücksichtigen.
Der Filter hat dadurch eine höhere Reaktionsgeschwindigkeit ohne die Glättung schlechter
werden zu lassen. Bild 2 und 3 zeigen den Unterschied. Das originale Sensorsignal
ist mit einem künstlich erzeugtem Höhenverlauf beaufschlagt, Siehe Code Block.
Code:
if (ms5611.data_ready) { // flag is interrupt trigggered and reset by ms5611.getPressure
long realPressure = ms5611.getPressure (true);
double relativeAltitude = ms5611.getAltitude (realPressure, referencePressure);
j++;
if ( j <= 200) {
relativeAltitude += j * 0.0125; //2.5 m / 2.5 s
}
else {
if ( j <= 280 ) {
relativeAltitude += 2.5; //2.5 m
} else {
if ( j <= 300 ) {
relativeAltitude += 2.5 - ( j - 280 ) * 0.1250; //2.5 m / 0.25 s
}
}
}
if ( j == 360) {
j = 0;
}
r_altitude0 = r_altitude0 - 0.076923 * (r_altitude0 - relativeAltitude); // dt 12500 us T = 0.15
r_altitude = r_altitude - 0.04 * (r_altitude - relativeAltitude); // T = 0.3
climb0 = (r_altitude0 - r_altitude) * 6.66667; // dt 12500 us
dyn_alfa = abs( climb - climb0 / 1 );
if ( dyn_alfa >= 1 ) {
dyn_alfa = 1;
}
climb = climb - dyn_alfa * ( climb - climb0 );
...
Gruß
Dieter