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 1. Ordnung
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
| TiefpassFilter.m |
function xTPF = TiefpassFilter(x)
persistent vorherigesX alpha bErsterDurchlauf
if nargin < 1
bErsterDurchlauf=[];
disp('Reset TiefpassFilter...')
else
if isempty(bErsterDurchlauf) % Initalisierung der Variablen bei ersten Durchlauf
vorherigesX = x;
dt = 0.0681; % Abtastzeit Arduino
tau = 0.08; % Filterzeitkonstante in s
alpha = tau/(tau+dt); % Wichtung (Parameter)
bErsterDurchlauf = 1;
disp('Init TiefpassFilter ...')
end
xTPF = alpha*vorherigesX + (1 - alpha)*x; % Tiefpassfilter 1. Ordnung
vorherigesX = xTPF;
end
|
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 |
|
|
Butterworth Tiefpassfilter 2. Ordnung
Der Butterworth-Filter ist ein digitaler oder analoger Filter, der für seinen maximal flachen Frequenzgang im Durchlassbereich bekannt ist. Das bedeutet, dass er im gewünschten Frequenzbereich keine Welligkeit aufweist und Signale dort möglichst unverfälscht durchlässt.
Typischerweise wird er als Tiefpass, Hochpass oder Bandpass eingesetzt, wobei der Tiefpass besonders häufig in der Signalverarbeitung verwendet wird, um hochfrequentes Rauschen zu unterdrücken und langsam veränderliche Signalanteile zu erhalten.
In der digitalen Signalverarbeitung wird der Butterworth-Filter oft als IIR-Filter (Infinite Impulse Response) realisiert. Dadurch erreicht er eine gute Filterwirkung bei vergleichsweise geringer Filterordnung, allerdings mit einer gewissen Phasenverzerrung, die in vielen Messanwendungen akzeptabel ist.
Aufgrund seines guten Kompromisses aus Glättung, Stabilität und geringer Komplexität ist der Butterworth-Filter ein Standardverfahren in der Messtechnik, Robotik und Sensordatenverarbeitung.
Formel
- Der aktuelle Ausgang entsteht aus einer Mischung aus aktuellen und vergangenen Eingangswerten sowie vergangenen Ausgangswerten.
- Der Signalanteil berücksichtig die aktuellen und 2 vorherige Messwerte.
- Die Rückkopplung beschreibt das Gedächtnis des Filters (2 vorherige Filterwerte).
Bestimmen Sie die Parameter mit MATLAB®.
%% Butterworth-Filter-Designer
fs = 10; % Abtastrate in Hz
fc = 2; % Grenzfrequenz in Hz
n = 2; % Ordnung
Wn = fc/(fs/2); % normierte Frequenz (Nyquist!)
[b, a] = butter(n, Wn, 'low');
% Parameterzuordnung
% a1 = a(2)
% a2 = a(3)
%% Filtergleichung Butterworth 2. Ordnung
y = filter(b, a, x);
Vorteile:
Nachteile:
Anwendungsgebiete:
Literatur
