Forum: Digitale Signalverarbeitung / DSP / Machine Learning Grundsatzfrage zur Verkettung von IIR-Filtern


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 Mark (Gast)


Lesenswert?

Ich habe eine Frage bezüglich der Hintereinanderschaltung von 
IIR-Filtern, die ich nicht beantwortet bekomme. Hier gibt es dazu etwas 
in Sachen Verzögerung, was das Thema aber nur am Rande behandelt:
Beitrag "Genauigkeit von IIR-Filtern beziffern"

Ich benutzte ein einfaches Filter des Typs: Y(n) = (7 * Y(n-1) + X (n) ) 
/ 8

Als Beispiel erhalte ich beim Sprung X = 0->1  die folgenden Werte für 
Y:

0  |  0,00  …
0  |  0,00  …
1  |  0,13  …
1  |  0,23  …
1  |  0,33  …
1  |  0,41  …
1  |  0,49  …
1  |  0,55  …
1  |  0,61  …
1  |  0,66  …
1  |  0,70  …
1  |  0,74  …
1  |  0,77  …
1  |  0,80  …
1  |  0,82  …
1  |  0,85  …
1  |  0,87  …
1  |  0,88  …
1  |  0,90  …
1  |  0,91  …
1  |  0,92  …
1  |  0,93  …
1  |  0,94  …


Wie berechne ich daraus die Grenzfrequenz des Filters?

Nach dem Wechsel von 0 auf 1 dauert es 16 Takte, bis die 90% erreicht 
sind, also wäre die Anstiegszeit 6% der Tastfrequenz. Kann ich das in 
eine (relative) Grenzfrequenz umrechnen? Wenn die Abtastung 1.2kHz 
beträgt, wären dies etwa 13ms. Mit der bekannten Formel t = 0,35/fg 
gelange ich zu 215 Hz als Grenzfrequenz. Kommt das hin?

Das Filter hat dann 6dB pro Oktave Abfall soweit ich weis. Was passiert, 
wenn ich 2 dieser Filter hintereinander benutze? Bei der GF müssten es 
dann 6dB statt 3dB sein und damit die neue GF etwas sinken?

Bekomme ich dann bei der neuen GF insgesamt ein Filter mit 12 dB / 
Oktave?

von Egon D. (Gast)


Lesenswert?

Mark schrieb:

> Wie berechne ich daraus die Grenzfrequenz des Filters?

Ich würde (wie bei einem RC-Filter) über die Zeitkonstante
"tau" gehen.


> Nach dem Wechsel von 0 auf 1 dauert es 16 Takte, bis
> die 90% erreicht sind, also wäre die Anstiegszeit 6%
> der Tastfrequenz. Kann ich das in eine (relative)
> Grenzfrequenz umrechnen? Wenn die Abtastung 1.2kHz
> beträgt, wären dies etwa 13ms.

Sind alles Näherungsformeln; muss aber im Prinzip auch
(ungefähr) zum richtigen Ergebnis führen.


> Mit der bekannten Formel t = 0,35/fg gelange ich zu
> 215 Hz als Grenzfrequenz. Kommt das hin?

Hmm. Ich komme auf ungefähr 25Hz...


> Das Filter hat dann 6dB pro Oktave Abfall soweit ich
> weis.

Ja.


> Was passiert, wenn ich 2 dieser Filter hintereinander
> benutze? Bei der GF müssten es dann 6dB statt 3dB sein
> und damit die neue GF etwas sinken?

Ja, klar.
Die übliche 3dB-Grenzfrequenz sackt etwas ab.


> Bekomme ich dann bei der neuen GF insgesamt ein Filter
> mit 12 dB / Oktave?

Klar.

von Mark (Gast)


Lesenswert?

Egon D. schrieb:
> Ich würde (wie bei einem RC-Filter) über die Zeitkonstante
> "tau" gehen.
Ich suche ja diesen Zusammenhang. Die Frage ist, was Tau ist. Ich habe 
aktuell 1.2kHz Abtastfrequenz und bekomme eben diese knapp 17 Takte bis 
das Signal auf 90% kommt.

Egon D. schrieb:
> Sind alles Näherungsformeln; muss aber im Prinzip auch
> (ungefähr) zum richtigen Ergebnis führen.
Das sind keine Näherungsformeln. Das ist umgerechnet 1.2kHz / 17 Takte.

Egon D. schrieb:
> Hmm. Ich komme auf ungefähr 25Hz...
Wie das?

Kann man eigentlich irgendwie direkt von dem Faktor 7/8 auf Tau und fg 
kommen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Mark schrieb:
> Kann man eigentlich irgendwie direkt von dem Faktor 7/8 auf Tau und fg
> kommen?

Ja, klar kann man. Ist halt bisschen Rechnerei. Aber ich find Tau und 
6dB/octave da jetzt nicht so passend. Grad in den oberen 
Frequenzbereichen, also knapp vor Fabtast/2 sieht so ein digitales 
Filter halt doch etwas anders aus, als das analoge RC-Tiefpasspendant.

Zum Berechnen nimmste den Frequenzgang in der z-Ebene, das waeren bei 
deinem Beispiel also
1
h(z)=1/(8-7*z⁻¹)
Dann kannste fuer z auch exp(j*Omega) einsetzen; das dann in sin und cos 
aufspalten; fuer den -3dB Punkt sollte dann der Betrag von |H(z)|= 0.707 
sein, d.h. das Quadrat des Betrags 0.5; so kommste dann auf einen Wert 
fuer Omega; den dann mit der Abtastfrequenz entnormieren und "schon ists 
fertig".
Geht sicher auch mit 2 in Kette geschalteten Filtern, aber mir isses 
fuer solche Faxen zu rechnen grad eindeutig viel zu heiss ;-)

Gruss
WK

von Jaroslaw (Gast)


Lesenswert?

Mark schrieb:
> Kann man eigentlich irgendwie direkt von dem Faktor 7/8 auf Tau und fg
> kommen?

Fur ein Tiefpassfilter mit folgender Gleichung:
    Y(n) = (m-1)/m*Y(n-1) + 1/m*X(n)
habe ich berechnet, dass die 3dB-Grenzfrequenz
    f0 = fsampl/(2*PI) * arccos{[4m(m-1)+2]/[2m(m-1)]}
und die Zeitkonstante
    tau = 1/fsampl * ln[m/(m-1)]
betragen.

von Mark (Gast)


Lesenswert?

Jaroslaw schrieb:
> arccos{[4m(m-1)+2]/[2m(m-1)]}
Der Term liefert aber einen Wert von 2.x und dafür gibt es keinen 
ARCCOS. vlt ARCTAN?

von Jaroslaw (Gast)


Lesenswert?

Mark schrieb:
> Jaroslaw schrieb:
>> arccos{[4m(m-1)+2]/[2m(m-1)]}
> Der Term liefert aber einen Wert von 2.x und dafür gibt es keinen
> ARCCOS. vlt ARCTAN?

Mein Fehler. Bei +33*C kann sowas passieren.
Ausgebessert:
    f0 = fsampl/(2*PI) * arccos{[2m(m-1)-1]/[2m(m-1)]}
Fuer m=8 haetten wir
    f0 = fsampl/(2*PI) * arccos(111/112) ~ fsampl * 0,021284

von Mark (Gast)


Lesenswert?

wären aber nur 2% der Abtastfrequenz. Kann irgendwie nicht stimmen. Der 
Anstieg beim Sprung ist steiler, finde ich. Es passt auch nicht zur der 
Faustformel in der WP mit den 0,35 fg. Oder kommt es von der digitalen 
Filterung und die Formeln gelten nicht?

von Egon D. (Gast)


Lesenswert?

Mark schrieb:

> wären aber nur 2% der Abtastfrequenz.

Richtig.
Ziemlich genau der Wert, den ich schon vor Tagen nannte...

> Es passt auch nicht zur der Faustformel in der WP mit
> den 0,35 fg.

Da fehlt der Kehrwert: t_a = 0.35 / fg
Oder umgeformt: fg = 1 / (2.85 * t_a)

Für ta = 17 Takte ergibt sich eine Grenzfrequenz von
fg = 1/48 * f_sample, also ca. 0.02 * f_sample.

von Jürgen S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Egon D. schrieb:
> fg = 1/48 * f_sample, also ca. 0.02 * f_sample.
Die 2,128% sind sogar ziemlich genau 1/47.

Das sind gut 2 Wellen pro 100 Samples - egal bei welcher Frequenz.

Sobald die Welle eingeschwungen ist, sind es gut 70% Amplitude. Der 
Anstieg nach dem Sprung (Beginn mit Cosinus = 1) scheint auch plausibel. 
Der zitierte  Anstieg beim Puls aus der Tabelle ist vielleicht scheinbar 
steiler, das liegt aber an der schlechten Dämpfung dieses Filters und 
den vielen Oberwellen im rechteckigen Sprung.

Nehme ich noch eine Welle dazu, gibt es noch mehr Dämpfung und 
Phasenverschiebung - die 50% / - 6dB passen genau. Um jetzt mit diesen 2 
Stufen nur auf -3dB zu kommen, also die Grenzfrequenz zu ermitteln, 
braucht es eine Frequenz von knapp 2/3.

von Mark (Gast)


Lesenswert?

Also die Dämpfung bei der gewählten Konstellation kann ich jetzt 
nachvollziehen. Ich komme aber mit der Formel noch nicht ganz klar:

Jaroslaw schrieb:
> f0 = fsampl/(2*PI) * arccos{[2m(m-1)-1]/[2m(m-1)]}

Eine gewählte Konstellation wie oben, 7/8, ist dasselbe wie 14/16. Wie 
berechne ist das dann? Das eigentliche Ziel wäre ein parametrischer 
Filter wie z.B. X/32, bei dem mit X die Grenzfrequenz des Filters in 
3%-Stufen genau eingestellt werden könnte.

von Jaroslaw (Gast)


Lesenswert?

>> f0 = fsampl/(2*PI) * arccos{[2m(m-1)-1]/[2m(m-1)]}
> Eine gewählte Konstellation wie oben, 7/8, ist dasselbe wie 14/16. Wie
> berechne ist das dann?

Allgemeine Form:
Y(n) = (m-1)/m*Y(n-1) + 1/m*X(n)

m ist immer der Kehrwert des Koeffizienten bei X(n)!

"Unser" Filter:
Y(n) = 7/8*Y(n-1) + 1/8*X(n)
m = 8

Y(n) = 14/16*Y(n-1) + 2/16*X(n)
m = 8 (Filter ist identisch)

Y(n) = 15/16*Y(n-1) + 1/16*X(n)
m = 16 --> niedrigere fg, hoehere tau

Y(n) = 14/16*Y(n-1) + 1/16*X(n)
verhaelt sich etwas anders als ein klassischer analoger "R in Serie, C 
auf Masse" Tiefpass 1. Ordnung; z.B. die Uebertragungsfunktion bei f=0 
betraegt 1/2.

von Mark (Gast)


Lesenswert?

Jaroslaw schrieb:
> Y(n) = 14/16*Y(n-1) + 2/16*X(n)
> m = 8 (Filter ist identisch)
ja, das wäre dasselbe wie 1/8 , 7/8.

Aber wie berechne ich das mit der Formel arccos{[2m(m-1)-1]/[2m(m-1)]}

Und wie berechnet man 3/8 und 5/8  bzw 7/32 , 25/32?

von Rezy (Gast)


Lesenswert?

Mark schrieb:
> Jaroslaw schrieb:
>
>> Y(n) = 14/16Y(n-1) + 2/16X(n)
>> m = 8 (Filter ist identisch)
>
> ja, das wäre dasselbe wie 1/8 , 7/8.
> Aber wie berechne ich das mit der Formel arccos{[2m(m-1)-1]/[2m(m-1)]}
> Und wie berechnet man 3/8 und 5/8  bzw 7/32 , 25/32?

So gar nicht. Die Koeffizienten sind da stark eingeschränkt. Das 
einfache rekursive Mittelwertfilter hat die Differenzengleichung

Damit nochmal so berechnen, wie WK das beschrieben hat.

von Mark (Gast)


Lesenswert?

Rezy schrieb:
> nochmal so berechnen, wie WK das beschrieben hat.
Also so:

Dergute W. schrieb:
> Zum Berechnen nimmste den Frequenzgang in der z-Ebene, das waeren bei
> deinem Beispiel alsoh(z)=1/(8-7*z⁻¹)

Nach der Definition von Rezy (mit "a") wären 1/8 allgemein k/q und

h(z) = 1/(8-7*z⁻¹)  wäre (q - (q-k)*z⁻¹).

> Dann kannste fuer z auch exp(j*Omega) einsetzen; das dann in sin und cos
> aufspalten

??

von Rezy (Gast)


Lesenswert?

Nicht ganz. Die z-Transformierte ist
Folglich
Nun wird z substituiert, um die DTFT zu erhalten. Dafür z=exp(j*Omega).
Also
Für die Grenzfrequenz soll
gelten. Das nur noch nach f (für -3dB f_c) auflösen, rechnen und 
umstellen. Das Omega ist die auf fs normierte Kreisfrequenz, also
Damit bekommst du schließlich die Grenzfrequenz in Abhängigkeit von 
alpha und fs.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Hier eine Stelle im www von sicherlich Vielen, wo das schonmal wer 
vorgerechnet hat:

https://dsp.stackexchange.com/questions/40462/exponential-moving-average-cut-off-frequency

Gruss
WK

von Mark (Gast)


Lesenswert?

Danke, das sehe ich mir gerne an.

von M. H. (bambel2)


Angehängte Dateien:

Lesenswert?

Man muss hier allerdings beachten, dass das Moving average Filter keine 
klassiche Genzfrequenz hat.
In der Regel geht man davon aus, dass ein Teifpassfilter bis zur 
Genzfrequenz einen nahezu flachen Amplitudengang hat und dann mit -x 
db/dekade abfällt.

Das ist aber beim Moving Average Filter nicht so:
Wenn wir von einem Filter
ausgehen, dann ist der Amplitudengang

Einen Plot habe ich mal angehängt. Ebenso als Vergleich ein zufälliges 
Chebychev Filter zum Vergleich.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

M. H. schrieb:
> Man muss hier allerdings beachten, dass das Moving average Filter keine
> klassiche Genzfrequenz hat.
Mumpitz.

> In der Regel geht man davon aus, dass ein Teifpassfilter bis zur
> Genzfrequenz einen nahezu flachen Amplitudengang hat und dann mit -x
> db/dekade abfällt.
Das ist halt deine Definition. Die muss man nicht teilen.

Gruss
WK

von Dr. T. (Gast)


Lesenswert?

Dergute W. schrieb:
>> In der Regel geht man davon aus, dass ein Tiefpassfilter bis zur
>> Grenzfrequenz einen nahezu flachen Amplitudengang hat und dann mit -x
>> db/dekade abfällt.
> Das ist halt deine Definition. Die muss man nicht teilen.

Ich würde die teilen, denn ein idealer Tiefpass verhält sich genau so 
wie es M.H. beschreibt. Dass der moving average nur für passende 
Frequenzen null wird und für darüber liegende wieder kommt, ist 
natürlich unbestritten.

Wie könnte man dies ins Spiel bringen?

Was ist mit dem Bogen, der in der ersten Oktave kommt? Ist der schon zu 
mehr als 30% weggefiltert? Dann wären die Amplituden dieser- und aller 
anderen Frequenzen darüber geringer als die Amplitude der 
Grenzfrequenzdefinition und damit im "Stoppband".

Die Grenzfrequenz des Moving Average wäre also dort, wo der erste Bogen 
auf 70% geht.

von M. H. (bambel2)


Lesenswert?

Dr. T. schrieb:
> Die Grenzfrequenz des Moving Average wäre also dort, wo der erste Bogen
> auf 70% geht.

Dr. T. schrieb:
> Ich würde die teilen, denn ein idealer Tiefpass verhält sich genau so
> wie es M.H. beschreibt. Dass der moving average nur für passende
> Frequenzen null wird und für darüber liegende wieder kommt, ist
> natürlich unbestritten.

Ich vermute du lässt dich von meiner zugegebenermaßen beschi**enen 
Farbwahl verwirren. Das Filter mit dem "Rippel" im Stoppband war der 
Chebychev. Die anderen Kurven sind alle exponentielle 
Moving-Average-Filter.
Das Moving average Filter kommt nicht mehr nach oben. Zumindest nicht, 
solange man kein Aliasing hat und unter der halben Samplefrequenz 
bleibt.

von M. H. (bambel2)


Lesenswert?

Man kann allerdings auch über den Zeitbereich gehen und sich überlegen, 
nach wie vielen Samples das Filter nach einem Sprung von 0->1 den Wert 
0<=p<=1 erreicht.

Nehmen wir an, dass das Filter mit dem Eingangssignal
beaufschalgt wird. Für alle n < 0 sei der Eingang 0.
In diesem Fall kann man aus der Differenzengleichung
herleiten, dass der gefilterte Ausgang
beträgt.

Für den Ausgangswert p zum Zeitschritt n_p gilt somit
Mittles den endlichen geometrischen Reihe
erhält man dann:
Umgestellt ergibt sich der Zeitschritt des (sicheren) Erreichens eines 
Wertes p zu:

Wenn man von der üblichen Definition der Zeitkonstanten tau ausgeht, 
dass zum Zeitpunkt Tau der Ausgang den Wert
annimmt, dann ist dieser zum Zeitschritt
erreicht.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

M. H. schrieb:
> Man kann allerdings auch über den Zeitbereich gehen und sich überlegen,
> nach wie vielen Samples das Filter nach einem Sprung von 0->1 den Wert
> 0<=p<=1 erreicht.

Jaaaaaa, das kann man machen. Deshalb hat's auch der Threaderoeffner in 
seinem ersten Post ganz oben so beschrieben. Dann hat ihn halt die 
Neugierde geplagt, das in eine Grenzfrequenz umzurechnen, weswegen er 
hier gefragt hatte. Und das kann man auch machen.
Auch, wenn so ein Filter evtl. keinen ganz sauber erkennbaren Uebergang 
zwischen Durchlass- und Sperrbereich hat und im Durchlass auch schon 
ordentlich "abkackt".
Bessel, Gauss, (Root-)Raised-Cosine sind z.b. solche Kanditaten. 
Trotzdem kann man auch da prima Grenzfrequenzen angeben.

Gruss
WK

von Kai (Gast)


Lesenswert?

M. H. schrieb:
> 1+(1−α)2−2(1−α)cos(Ω)
Diese Formel von oben sieht komisch aus: Man erkennt nicht, wie der Wert 
nach hinten zu höheren Frequenzen kleiner werden kann. Fehlt da noch ein 
Divisor?  Was genau ist Omega?

von M. H. (bambel2)


Lesenswert?

Kai schrieb:
> M. H. schrieb:
>> 1+(1−α)2−2(1−α)cos(Ω)
> Diese Formel von oben sieht komisch aus: Man erkennt nicht, wie der Wert
> nach hinten zu höheren Frequenzen kleiner werden kann. Fehlt da noch ein
> Divisor?  Was genau ist Omega?

Das Ganze steht im Divisor (unter dem Bruchstrich). Omega ist die 
Frequenz normiert auf 2pi
mit der Samplefrequenz f_S
Hier kann man damit mal herumspielen:
https://www.desmos.com/calculator/7mvs9eqdpb

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.