Das lernst du heute
- Gleitender Mittelwert
- Exponentielles Glätten
- Rauschen gegen Trägheit
Der Gassensor im Hangar hängt direkt neben der Lüftung. Seine Druckwerte springen jeden Takt um ein paar kPa, und die Regelung dahinter schaltet die Pumpe im Sekundentakt an und aus. Der Druck im Raum ist dabei ganz ruhig – nur die Messung zappelt. Die Lösung: Messwerte glätten, bevor die Regelung sie sieht.
Gleitender Mittelwert
Der einfachste Weg: die letzten N Messwerte merken und den Durchschnitt bilden. Die Werte liegen in einem Ringpuffer im Stack, wie im Projekt „Messwert-Verlauf“. Ein Index läuft im Kreis und überschreibt immer den ältesten Wert:
add i i 1
mod i i N # 0 bis N-1, dann wieder 0
poke i x # aeltesten Wert ersetzen
move summe 0
move k 0
summieren:
get tmp db k
add summe summe tmp
add k k 1
blt k N summieren
div mittel summe N
Ein einzelner Ausreißer zählt nur noch zu einem N-tel. Dafür braucht der Mittelwert N Takte, bis ein echter Sprung ganz angekommen ist, und jeder Platz im Puffer kostet Stack.
Exponentielles Glätten
Ohne Puffer geht es mit einer einzigen Formel:
g = g + a · (x − g)
g ist der geglättete Wert, x die neue Messung, a ein Anteil zwischen 0 und 1. Jeden Takt rückt g um diesen Anteil an die Messung heran:
sub d x g
mul d d ANTEIL # ANTEIL = 0.25
add g g d
Drei Zeilen, ein Register für den Zustand – kein Stack, keine Schleife. Mit a = 0,25 und einem Sprung von 100 auf 120 kPa zeigt g nacheinander 105, 108,75, 111,6 … und kommt dem neuen Wert immer näher.
Wichtig ist der Startwert. Beginnt g bei 0, kriecht es nach dem Einschalten erst langsam auf 100 kPa hoch – eine Regelung hält den Raum so lange für fast leer. Setz g deshalb vor der Hauptschleife auf die erste Messung.
Rauschen gegen Trägheit
Glätten hat einen Preis. Je stärker du glättest, desto später merkt der Chip eine echte Änderung:
| a | ähnlich wie Mittelwert über | 63 % eines Sprungs nach |
|---|---|---|
| 0,5 | 3 Werte | 1–2 Takten |
| 0,25 | 7 Werte | 3–4 Takten |
| 0,05 | 39 Werte | rund 20 Takten, also 10 s |
Für eine Anzeige darf es ruhig träge sein. Für eine Regelung reicht meist wenig Glättung, den Rest erledigt die Hysterese.
Ein einziger NaN-Wert vergiftet den Filter. Fehlt der Sensor einen Takt lang, wird g + a · (NaN − g) zu NaN – und bleibt es für immer, auch wenn der Sensor längst zurück ist. Im Ringpuffer verdirbt ein NaN den Mittelwert, bis es nach N Takten überschrieben ist. Prüf die Messung mit snan, bevor sie in den Filter geht, oder fang mit dem nächsten gültigen Wert neu an.
Not-Aus und Überdruckschutz gehören an die ungeglätteten Werte. Ein Filter, der Rauschen schluckt, verschluckt auch die ersten Takte eines echten Notfalls.
Übung
Aufgabe
Der Gassensor „Halle“ liefert einen zappelnden Druck. Die LED-Anzeige „Druck“ soll den exponentiell geglätteten Wert zeigen, mit ANTEIL = 0,25.
gstartet mit der ersten Messung (die Zeile vorstart:gibt es schon)- Fehlt die Messung (NaN), zeigt die Anzeige −1
- Danach fängt der Filter mit der nächsten gültigen Messung neu an, statt NaN weiterzuschleppen
Tipp: Ist g NaN, übernimm einfach x.
Hinweise
Hinweis 1
Neu anfangen: snan tmp g, dann select g tmp x g.
Hinweis 2
Glätten: sub d x g, mul d d ANTEIL, add g g d.
Hinweis 3
Ist x NaN, wird g durch die Rechnung selbst NaN – im nächsten Takt greift dann das Neu-Anfangen.
Quiz
5 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Übung im Simulator bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden