Rekursive Filter
| Autor: | Prof. Dr.-Ing. Schneider |
Einleitung
Rekursive Softwarefilter spielen eine zentrale Rolle in der digitalen Signalverarbeitung, da sie es ermöglichen, Messwerte effizient zu glätten, Störungen zu reduzieren und relevante Informationen hervorzuheben. Im Gegensatz zu nicht-rekursiven Verfahren nutzen rekursive Filter neben aktuellen auch vergangene Ausgabewerte, wodurch sie mit geringem Rechenaufwand oft eine hohe Filterwirkung erzielen. Zu den grundlegenden Filtertypen zählen der einfache Mittelwertfilter, der gleitende Mittelwert sowie der Medianfilter, die vor allem zur Glättung und Ausreißerunterdrückung eingesetzt werden. Ergänzt werden diese durch rekursive Tiefpassfilter, die insbesondere hochfrequente Störungen dämpfen und langsame Signalverläufe betonen. Die Auswahl des geeigneten Filters hängt dabei stark von den Eigenschaften des Eingangssignals und den Anforderungen an die Signalverarbeitung ab, wie etwa Rechenaufwand, Verzögerung oder Empfindlichkeit gegenüber Ausreißern.
Inhalt
Mittelwertfilter
Vorteile:
- Sehr einfach zu implementieren
- Gute Glättung bei zufälligem Rauschen
- Geringer Rechenaufwand
Nachteile:
- Träge Reaktion auf Signaländerungen, keine Filterung dynamischer Signale möglich
- Verwischt Kanten und schnelle Übergänge
- Empfindlich gegenüber Ausreißern
Anwendungsgebiete:
- Einfache Signalglättung für statische Messung
- Messwertverarbeitung (z. B. Temperatur, Feuchte)
- Grundlegende Datenvorverarbeitung
Formel
Standardabweichung
Formel
Rekursive Varianz
Rekursive Standardabweichung
Gleitendes Mittelwertfilter
Formel
Die Formel für das gleitende Mittelwertfilter lautet: für k Messwerte
Vorteile:
- Kontinuierliche Glättung von Datenströmen
- Effizient berechenbar
- Gut für Echtzeitanwendungen
Nachteile:
- Zeitverzögerung (Delay)
- Glättet auch relevante Signaländerungen
- Empfindlich gegenüber Ausreißern
Anwendungsgebiete:
- Zeitreihenanalyse
- Embedded Systems / Mikrocontroller
- Trendanalyse in Finanzdaten
💻 Demos
| GleitendesMittelwertFilter.m |
function GM = GleitendesMittelwertFilter(x)
persistent n aFIFO
persistent bErsterDurchlauf
%% Initialisierung des Array
if isempty(bErsterDurchlauf)
n = 10; % Fensterbreite
aFIFO = x*ones(1,n); % Initialisierung mit erstem Wert
bErsterDurchlauf = 1;
disp('Init GleitendesMittelwertFilter ...')
end
%% alten Wert löschen, neuen Wert hinzufügen (FIFO)
aFIFO = [aFIFO(2:end),x]; % Schieberegister
GM = sum(aFIFO) / n; % gleitender Mittelwert
|
Tiefpassfilter
Formel
- Die Formel für das Tiefpassfilter lautet: für den aktuellen Messwert .
- ist hierbei ein Filterparameter .
Vorteile:
- Sehr effizient (geringer Speicherbedarf)
- Gute Glättung dynamischer Werte bei geringer Verzögerung
- Einfacher zu implementieren als Median oder gleitender Mittelwert
- Flexibel parametrierbar
- Die Eckfrequenz ist eine physikalischer Parameter.
Nachteile:
- Zeitverzögerung (Delay)
- Parameterwahl teilweise komplex
- Kann instabil werden bei falscher Auslegung
- Beeinflusst die Phasenlage
Anwendungsgebiete:
- Echtzeit-Signalverarbeitung
- Audiofilterung und Rauschunterdrückung
- Regelungstechnik und Sensorfusion
💻 Demos
Medianfilter
Vorteile:
- Sehr robust gegenüber Ausreißern
- Erhält Kanten und Strukturen gut
- Keine Verzerrung durch Extremwerte
Nachteile:
- Höherer Rechenaufwand (Sortierung)
- Weniger geeignet für gaußsches Rauschen
- Rekursive Umsetzung aufwändiger
Anwendungsgebiete:
- Bildverarbeitung (z. B. Salz-und-Pfeffer-Rauschen)
- Sensorsignale mit Störimpulsen
- Mustererkennung und Vorverarbeitung
💻 Demos
| RekursivesMedianFilter.m |
function xMedian = RekursivesMedianFilter(x)
persistent aFIFO Filterbreite bGerade
if isempty(aFIFO) % Einmalige initialisierung
Filterbreite = 5; % Parameter, Größe des FIFO
aFIFO=ones(1,Filterbreite)*x; % Initialisierung des FIFO mit dem ersten Wert
if mod(Filterbreite,2) == 0 % Behandlung von geradzahligen FIFOS
bGerade = true;
else
bGerade = false;
end
disp('Init RekursivesMedianFilter ...')
end
aFIFO = [aFIFO(2:end),x]; % Schieberegister
aSortiertesFIFO = sort(aFIFO);
%% Rückgabewert
if bGerade
i = Filterbreite/2;
xMedian=(aSortiertesFIFO(i)+aSortiertesFIFO(i+1))/2;
else
i = ceil(Filterbreite/2);
xMedian = aSortiertesFIFO(i);
end
|
Video Tutorials
| Median - einfach erklärt |
| Median-Filter |
|
|
| Lookup-Table |
|
|
Literatur
