Signalverarbeitung & Filterung
Hard · 30 min · Kostenlos
Ziel & Lerninhalt
Lerne die Grundlagen der mathematischen und elektronischen Rauschunterdrückung.
- Den Unterschied zwischen Rauschen und echten Messwerten verstehen.
- Einen gleitenden Mittelwertfilter in Software schreiben.
- Analoge Tiefpassfilter aus Widerstand und Kondensator aufbauen.
Erklärung & Wissen
Basic
Sensoren messen die echte Welt, aber sie sind oft unruhig. Wenn du einen Temperatursensor ausliest, springt der Wert vielleicht ständig zwischen 21, 22 und 20 Grad hin und her, obwohl die Lufttemperatur völlig konstant ist. Das liegt an elektrischem Rauschen. Durch geschickte mathematische Filter glätten wir diese Zacken und erhalten ein ruhiges, schönes Signal.
Medium
In der Software nutzen wir meistens den gleitenden Mittelwert (Moving Average). Dabei addieren wir die letzten 10 Messwerte auf und teilen das Ergebnis durch 10. Springt ein Wert kurzzeitig extrem aus der Reihe, wird er durch die anderen 9 stabilen Werte stark gedämpft. Hardwareseitig können wir ein RC-Glied (Tiefpass) vor den Mikrocontroller schalten, das hochfreqünte Störungen einfach schluckt.
Expert
Mathematisch lässt sich Rauschen durch die Standardabweichung beschreiben. Analoge RC-Tiefpassfilter werden über ihre Grenzfrequenz (f_g = 1 / (2 * pi * R * C)) definiert. In der Software-Signalverarbeitung kommen bei schnellen, verrauschten Systemen (z. B. Drohnen-Lagesensoren) rekursive Filter wie der Tiefpass 1. Ordnung oder komplexe Kalman-Filter zum Einsatz. Diese schätzen den wahren Systemzustand basierend auf einer physikalischen Modellierung und den sensorischen Messfehlern optimal.
Fun Fact
Ohne hochentwickelte Signalfilterung könnte kein einziges Smartphone GPS-Daten auswerten! Die GPS-Signale aus dem Weltall kommen nämlich extrem schwach und extrem verrauscht auf der Erde an.
- Rauschen
- Zufällige Schwankungen im Messsignal, die nicht von der gemessenen Größe stammen — sie entstehen durch Elektronik, Strom oder Umgebung. Rauschqüllen: Thermisches Rauschen (Elektronen bewegen sich zufällig), Schaltgeräusche von Motoren/Servos auf der Versorgungsleitung, 50-Hz-Einkopplung aus dem Stromnetz. Wichtig: Rauschen ist zufällig — das ist gut, denn zufällige Fehler lassen sich durch Mittelwertbildung reduzieren. Systematische Fehler (Offset) lassen sich dagegen nicht 'rausfiltern'.
- Gleitender Mittelwert
- Die letzten N Messwerte werden gemittelt — Ausreißer werden gedämpft, das Signal wird glatt. Für N = 10: Die letzten 10 Messungen werden addiert und durch 10 geteilt. Springt ein Wert kurzzeitig auf 900 statt 500, wird er durch die 9 stabilen Werte auf 540 gedämpft. Nachteil: Das Signal reagiert langsamer — mit 10 Werten hat man eine Verzögerung von ~10 Messzyklen. Mehr Werte = glatter, aber träger.
- RC-Tiefpass
- Widerstand + Kondensator: schnelle Änderungen (Rauschen) werden gebremst, langsame Änderungen (echtes Signal) kommen durch. Der Kondensator kann sich nicht sofort aufladen — hohe Frequenzen werden gedämpft, tiefe passieren fast ungehindert. Grenzfrequenz: $f_g = \frac{1}{2\pi RC}$. Beispiel: R = 10 kΩ, C = 100 nF → $f_g \approx 160\,\mathrm{Hz}$. Alles über 160 Hz wird unterdrückt. Im DIY: Kleiner Kondensator (100 nF) zwischen Sensor-Ausgang und GND — sofort spürbar ruhigeres Signal.
- Tiefpassfilter (Software)
- Einfacher Software-Filter: neuer Ausgabewert = Mischung aus altem Wert und neuem Messwert. Formel: $y = \alpha \cdot x_{neu} + (1-\alpha) \cdot y_{alt}$. $\alpha$ ist der 'Gewichtungsfaktor' zwischen 0 (total träge) und 1 (keine Filterung). Bei $\alpha = 0{,}1$: 90% des alten Wertes + 10% Messung. Einfachster effektiver Filter, der mit einem Integer auskommt: `filtered = (9*filtered + raw) / 10`. Ideal für Drucksensoren, Potis, jede träge Messgröße.
Praktischer Aufbau: Software-Signalfilter
Wir verrauschen absichtlich ein Sensorsignal und glätten es live über einen gleitenden Mittelwertfilter.
- ProtoPeaks Mainboard
- DIY-Lichtsensor oder Poti
- PC mit seriellem Plotter
Code hochladen
Lade das Codebeispiel hoch, das sowohl den rohen als auch den gefilterten Messwert ausgibt.
Tipp: Nutze den Seriellen Plotter der Arduino IDE, um die Kurven grafisch übereinandergelegt anzuzeigen.
Schließe den Schleifkontakt eines Potentiometers an den analogen Pin A0 an, um manuell Werte zu verändern.
// ProtoPeaks - Gleitender Mittelwert
const int pin = A0;
const int numReadings = 10;
int readings[numReadings];
int readIndex = 0;
long total = 0;
void setup() {
Serial.begin(9600);
for (int i = 0; i < numReadings; i++) readings[i] = 0;
}
void loop() {
total = total - readings[readIndex];
readings[readIndex] = analogRead(pin);
total = total + readings[readIndex];
readIndex = (readIndex + 1) % numReadings;
int average = total / numReadings;
// Ausgabe für den Seriellen Plotter
Serial.print("Rohwert:");
Serial.print(analogRead(pin));
Serial.print(",Gefiltert:");
Serial.println(average);
delay(50);
}- Das Signal reagiert sehr träge auf Änderungen — Wenn du zu viele Werte mittelst (z. B. numReadings = 50), reagiert der Filter extrem langsam. Verringere den Wert für ein schnelleres Ansprechverhalten.
Kurzzusammenfassung
Signalverarbeitung schlägt die Brücke zwischen unvollkommener physikalischer Hardware und sauberer digitaler Software.