Forum: Digitale Signalverarbeitung / DSP / Machine Learning Einfach digitaler Tiefpass IIR oder FIR?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von tobi (Gast)


Lesenswert?

Moin,

vorweg: ich habe wenig Ahnung von Filtern.

Ich habe auch lediglich eine Klassifizierungsfrage.

Der einfach digitale Tiefpass
1
y[n] = (1-e) * y[n] + e * y[n-1];

Bin mir sicher mal gelesen zu haben das dieses Filter zu Klasse der 
FIR-Filter gehört. Allerdings ist laut Wikipedia der exponentiell 
geglättete Mittelwert ein IIR Filter 1. Ordnung. Dieser hat aber die 
selbe Berechnungsvorschrift wie das Tiefpassfilter im obigen Beispiel.

Zählt der nun zu FIR oder zu IIR Filtern?

von Thomas D. (t0mmy)


Lesenswert?

Wo ist denn da der Input?

Ich würd ein IIR Tiefpass so machen:

y[n] = (T/(dT+T))* y[n-1] + (dT/(dT+T))* x[n]

dT=1/Samplingfrequenz
T=Zeitkonstante des Filters

Unterscheidung IIR/FIR: Der IIR hat eine Rückkopplung, der FIR benutzt 
nur aus den aktuellen und vergangenen Eingangswerten.

So ich hoffe das stimmt auch. Hab ich der Vorlesung nicht immer 
aufgepasst ;)

von tobi (Gast)


Lesenswert?

Thomas Decker schrieb:
> Unterscheidung IIR/FIR: Der IIR hat eine Rückkopplung, der FIR benutzt
> nur aus den aktuellen und vergangenen Eingangswerten.

Soweit ich weiß hat ein FIR Filter nicht zwangsläufig keine 
Rückkopplung.

von Thomas D. (t0mmy)


Lesenswert?

Ja du hast recht, bei Wiki unter FIR ist das nachzulesen. Scheint aber 
selten zu sein.

von Marius W. (mw1987)


Lesenswert?

tobi schrieb:
> Der einfach digitale Tiefpass
> y[n] = (1-e) * y[n] + e * y[n-1];

Das ist sicherlich KEIN FIR-Filter. Du benutzt doch auf der rechten 
Seite alte y Werte, hast also eine Rückkopplung drin. Wo ist überhaupt 
das Eingangssignal? Ersetze y[n] und y[n-1] durch x[n] bzw. x[n-1] dann 
haste nen FIR-Filter.

MfG
Marius

von Karl (Gast)


Lesenswert?

Die Frage von Thomas Decker ist schon ganz berechtigt: Wo ist der 
Eingang und wo der Ausgang.

Im Zweifel hilft IMMER die schnöde Definition:
IIR = Infinite Impulse Response
FIR = Finite Impulse Response

Diese Definitionen sind natürlich nur mit idealen Zahlen ohne 
Quantisierung, Rundungsfehler etc. gültig.

(Es sieht aber verdammt nach IIR TP 1. Ordnung aus ;))

von tobi (Gast)


Lesenswert?

y[n] ist in diesem Fall der Eingangswert und nach der Berechnung 
ebendfalls der Ausgangswert. Hätte wohl besser x[n] auf der rechten 
Seite schreiben sollen.

Also gut, mit Rückkopplung ist dies ein IIR und ohne Rückkopplung wäre 
es ein FIR. Also

IIR
1
y[n] = e * x[n] + (1 - e) * y[n-1];

FIR
1
y[n] = e * x[n] + (1 - e) * x[n-1];

?

von Karl (Gast)


Lesenswert?

Ja, wobei der FIR ziemlich sinnbefreit ist, weil man damit quasi nichts 
anfangen kann. Bestens noch einen Moving average über 2 Samples, wenn e 
= 0.5 ist.

von tobi (Gast)


Lesenswert?

Karl schrieb:
> Ja, wobei der FIR ziemlich sinnbefreit ist

Das habe ich bereits feststellen müssen ^^

von Henrik H. (Firma: TU Chemnitz) (heha)


Lesenswert?

Auch mit FIR kann man einen Tiefpass realisieren, braucht aber sehr viel 
mehr Speicher.

Betrachtet man ein IIR-Tiefpass mit einem Speicher ist die 
Einheitssprungantwort eine Exponentialfunktion, und nach N Samples ist 
die Höhe ≈ 0,65 × N:

 y := x + (N-1)/N × y

Den krummen Faktor erspart man sich durch Addition:

 y += x + y/N

Die Division erspart man sich, indem N = 2^K gewählt wird:
1
y += x - (y>>K)
Interessant erscheint: Je kleiner der Subtraktionsanteil ist, desto 
größer wächst y.

Für ein in etwa gleichwertigen FIR-Tiefpass braucht man N Speicher. 
Diese werden einfach addiert. Die Einheitssprungantwort ist eine 
lineare Rampe, die bei N mit dem Wert N aufhört, mit dem gleichen 
Anstieg wie am Anfang der IIR-Exponentialfunktion.
Um sich die Kettenaddition zu sparen benutzt man für die N Speicher 
einen Ringpuffer und einen Schreib/Lesezeiger und subtrahiert den zu 
überschreibenden Wert:
1
 auto o = Y[p];
2
 y = (Y[p] = x) - o;
3
 if (++p==N) p=0;
Da auf AVR-Controllern Speicher eher knapp ist wird man IIR-Filter 
bevorzugen. Höhergradige Filter sind bei IIR allerdings schwieriger zu 
berechnen.

: Bearbeitet durch User
von X. Y. (Gast)


Lesenswert?

tobi schrieb:
> Der einfach digitale Tiefpassy[n] = (1-e) * y[n] + e * y[n-1];

In dem Moment, wo du auf die stetig ändernde Summe aus der vorherigen 
Zeit zugreifst und das nicht limitierst, ist es eine unendliche 
Operation.

-> Infinite!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.