Forum: Digitale Signalverarbeitung / DSP / Machine Learning Einfache FIR Tiefpassfilter z.B. für Downsampling [keine Frage]


von Moritz G. (mbydq2)


Lesenswert?

Bei jedem Projekt mit Signalverarbeitung, sei es ein Servosignal, ein 
Sensor oder etwas anderes, kommt man schnell an den Punkt, dass man das 
Signal gerne Tiefpass Filtern möchte. Dies ist z.B. vor einem 
Down-Sampling nötig. Siehe: 
https://www.google.com/search?q=downsampling+aliasing
Es ist naheliegend dies zu tun indem man einen fortlaufenden 
Durchschnitt bildet und dies ist KEINE schlechte Intuition/Idee, aber
{1/2;1/2}
ist nicht ausreichend um danach mit der halben Samplerate weiter zu 
arbeiten. Um die Samplerate halbieren zu dürfen müssen die 
Frequenzanteile von fs/4 bis 2*fs/4 entfernt werden. Dazu wäre eine 
Nullstelle bei fs/3 oder 3*fs/8 gut.
{1/2;1/2} hat bei einer Samplerate von z.B. fs = 50 Hz keine für 
Menschen sichtbare Wirkung und eine geringe Steilheit, es unterdrückt im 
wesentlichen Frequenzen die eh nicht da sein sollten. Was ist also mit:
{1\8;1\8;1\8;1\8;1\8;1\8;1\8;1\8} ? Ja, das zeigt Wirkung.
Filter der Form eines gleitenden Durchschnitts haben immer die 
Eigenschaft für bestimmte Frequenzen wie ein Notch-Filter zu wirken.
{1/2; 1/2} lässt f_s/2 nicht durch,
{1/3; 1/3; 1/3} lässt 1*f_s/3 (!) und 2*f_s/3 nicht durch.
{1/4; 1/4; 1/4; 1/4} lässt 1*f_s/4 und 2*f_s/4 nicht durch.
Für alle Filter mit einer geraden Anzahl von gleichen Koeffizienten 
verteilen sich die Nullstellen gleichmäßig auf dem Intervall 0 bis f_s/2 
so, dass immer eine der NS bei f_s/2 liegt. Bei zwei Werten ist es nur 
1*f_s/2 bei vier Werten 2*f_s/4 und 1*f_s/4, bei sechs Werten sind es 
3*f_s/6, 2*f_s/6, 1*f_s/6, bei acht Werten sind es 4*fs/8, 3*fs/8 (!), 
2*fs/8, 1*fs/8, usw.
Wenn man nicht möchte, dass sich die Nullstellen gleichmäßig zu immer 
kleineren Frequenzen verteilen, muss man sie selbst platzieren, das 
macht man am einfachsten indem man unterschiedliche kleine Filter der 
obigen Form hintereinander schaltet:
Ein super Filter bekommt man z.B. mit 
{1/3;1/3;1/3}*{1/4;1/4;1/4;1/4}*{1/5;1/5;1/5;1/5;1/5}
Ab f_s/8 macht es -20dB und ab f_s/5 macht es -100dB. Das bedeutet, dass 
bei 50 Werten pro Sekunde alle Frequenzen über 50Hz/5=10Hz auf 0,00001 
ihrer Amplitude reduziert werden. Danach kann man gefahrlos immer fünf 
Werte zu einem zusammenfassen oder nur jeden fünften behalten ohne 
Störungen von höheren Frequenzen in das verbleibende Signal zu mischen.
Die "2Nx1/(2N)-Filter"(arithmetischer Durchschnitt) lassen sich übrigens 
in Ketten zerlegen z.B. ist:
{1/8;1/8;1/8;1/8;1/8;1/8;1/8;1/8} = 
{1/2;1/2}*{1/2;0;1/2}*{0.3;0.4;0.3}*{1.7;-2.4;1.7}
Es ist kein Gewinn, die Nullstellen absichtlich gleichmäßig zu 
verteilen, da es im einfachsten Fall eh passiert (s.o.), entfernt man 
aus dem 8/8-Filter das Unterfilter {1.7;-2.4;1.7} und fügt z.B. ein 
weiteres {1/2;1/2} hinzu, so ist die Filterwirkung bei hohen Frequenzen 
betont, die Nullstellen ungleichmäßig verteilt, das Filter um ein 
Verzögerungsglied kürzer.

[Achtung: Dieser Text arbeitet absichtlich mit Halbwahrheiten und 
vermeidet bestimmte Begriffe und die komplexwertige Algebra.]
[Artefakt Aliasing Fehler Reduktion Tiefpassfilter Aliasingfilter 
Decimation LowPass Sample Samplingrate]

von Tobias P. (hubertus)


Lesenswert?

Moritz G. schrieb:
> Halbwahrheiten

das ist aber nicht gut, oder? warum nicht einfach exakt sein? Jemand hat 
mal gesagt "man soll die Dinge so weit wie möglich vereinfachen, aber 
nicht weiter".

Die z-Transformation ist nichts schwieriges und erlaubt es sehr einfach, 
beliebige Filter mit bekannten Koeffizienten zu simulieren.
Wie man zu den "richtigen" Filterkoeffizienten kommt ist natürlich ein 
anderes Problem und heisst Filtersynthese.

Hat man ein Filter als Übertragungsfunktion G(z)

dann kann man den Frequenzgang des Filters bestimmen, indem man z durch 
ersetzt mit

Das grosse Omega heisst normierte Frequenz. Omega=0 ist 0Hz, Omega=pi 
entspricht fs/2.

Ein z^-1 in der z-Transformierten bedeutet "das Sample von vorher", ist 
also einfach eine Verzögerung um 1 Abtasttakt.

Die Übertragungsfunktion ist Ausgangssignal y geteilt durch 
Eingangssignal u, das heisst man kann aus einer z-Übertragungsfunktion 
die Rechenvorschrift für ein Filter so bilden:
Zuerst ausmultiplizieren ergibt

Das kann man nach dem Ausgangssignal des Filters auflösen


jetzt stört noch der Koeffizient a0, den kann man aber noch aus der Welt 
schaffen, indem man beide Seiten durch a0 dividiert.
Die obenstehende Gleichung beschreibt nun für jeden Zeitschritt das 
Ausgangssignal eines beliebigen Filters für ein beliebiges 
Eingangssignal. Immer wenn ein z^-n auftaucht, muss man das Sample n 
Abtastintervalle vorher nehmen.

Da die a-Koeffizienten mit dem Ausgangssignal verknüpft sind, 
beschreiben sie eine Rückkopplung und damit IIR-Filter. Ein reines FIR 
hat alle a=0.

Wenn du also schon trotzdem, dass du nur Halbwahrheiten nutzen willst, 
von Polen und Nullstellen sprichst, sollten diese Zusammenhänge schon 
auch erwähnt werden. Undurchsichtige Kochrezepte, die "automagisch" 
etwas bewirken nützen sicher niemandem etwas. Mit den oben angegebenen 
Gleichungen jedoch kann jeder, der ein Plotprogramm (gnuplot zB) 
bedienen kann, den Frequenzgang eines beliebigen Filters sofort malen.

von Egon D. (Gast)


Lesenswert?

Tobias P. schrieb:

> Moritz G. schrieb:
>> Halbwahrheiten
>
> das ist aber nicht gut, oder? warum nicht einfach
> exakt sein?

Für den Begriff der Didaktik hast Du keinerlei
Verwendung, kann das sein?

Schlechte Lehrer erzählen ihren Schülern einfach alles,
was sie selbst über das Thema wissen.

Gute Lehrer wählen aus ihrem großen Wissen den kleinen
Teil aus, mit dem sie beim jeweiligen Schüler den größten
Lernfortschritt erreichen.

von Tobias P. (hubertus)


Lesenswert?

Egon D. schrieb:
> Gute Lehrer wählen aus ihrem großen Wissen den kleinen
> Teil aus, mit dem sie beim jeweiligen Schüler den größten
> Lernfortschritt erreichen.

aha, und das sind dann Halbwahrheiten? zum Glück hatte ich in der Schule 
nur schlechte Lehrer, die mir keine Solchen erzählt haben (ausser im 
Religionsunterricht).

von Egon D. (Gast)


Lesenswert?

Tobias P. schrieb:

> Egon D. schrieb:
>> Gute Lehrer wählen aus ihrem großen Wissen den kleinen
>> Teil aus, mit dem sie beim jeweiligen Schüler den größten
>> Lernfortschritt erreichen.
>
> aha, und das sind dann Halbwahrheiten?

Ja, natürlich.

Die Wahrheit ist natürlich das Ganze, und wenn ich aus
dem Ganzen etwas auswähle, ist der ausgewählte Teil
logischerweise nicht mehr die volle Wahrheit -- mithin
eine Halbwahrheit.


> zum Glück hatte ich in der Schule nur schlechte Lehrer,
> die mir keine Solchen erzählt haben (ausser im
> Religionsunterricht).

Das bezweifele ich.
Wenn Dir alle Lehrer in der Schule immer ALLES erzählt
hätten, was sie über ihr Fach wissen, würdest Du heute
noch dasitzen und zuhören...


Der Punkt ist aber ein ganz anderer: Es ist ja schön,
wenn Dir eine mathematisch-formale Darstellung ohne Mühe
zugänglich ist. Es würde nur den Umgang sehr erleichtern,
wenn Du erkennen könntest, dass Du damit zu -- reichlich
geschätzt -- 0.01% der Bevölkerung gehörst, auf die das
zutrifft.
Der restlichen winzigen Minderheit von 99.99% hilfst Du
überhaupt nicht, wenn Du ihnen -- wie oben geschehen --
einen Formelwust über den Kopf schüttest, und das dann
ironischerweise noch mit Kritik an den "Halbwahrheiten"
verbindest.

von Moritz G. (mbydq2)


Lesenswert?

Egon D. schrieb:

> Für den Begriff der Didaktik hast Du keinerlei
> Verwendung, kann das sein?

Danke, ich hatte nicht die Kraft/Lust mir die Mühe zu machen.
Ich dachte es dazu zuschreiben (Einfache ... Halbwahrheiten ...) würde 
reichen.

von Tobias P. (hubertus)


Lesenswert?

Egon D. schrieb:
> Das bezweifele ich.
> Wenn Dir alle Lehrer in der Schule immer ALLES erzählt
> hätten, was sie über ihr Fach wissen, würdest Du heute
> noch dasitzen und zuhören...

ja sicher haben sie nicht ALLES erzählt, aber die WAHRHEIT und nicht 
etwas, was "nur halb" wahr war.

Egon D. schrieb:
> 0.01% der Bevölkerung

in der Gesamtbevölkerung möglicherweise schon. Allerdings habe ich ja 
keine fancy Mathematik gepostet. Es sind Additionen und 
Multiplikationen, das kann jetzt wirklich jeder. Und hier sind doch 
Ingenieure, da kann man schon erwarten, dass man ein bisschen über den 
Tellerrand zu gucken in der Lage ist.

Aber ich entschuldige mich höflichst, dass ich die meines Erachtens 
ungeeigneten und zum Teil auch nicht korrekten Kochrezepte auf eine 
etwas fundiertere Basis stellen und zeigen wollte, was überhaupt mit den 
Nullstellen (und allenfalls Polen) gemeint ist.

von Moritz G. (mbydq2)


Lesenswert?

Tobias P. schrieb:
> ja sicher haben sie nicht ALLES erzählt, aber die WAHRHEIT und nicht
> etwas, was "nur halb" wahr war.

"lie by omission"
Du gibst im selben Satz zu, dass Du gelogen hast und dass es schlecht 
ist.

Ich habe Deinen Beitrag als möglicherweise brauchbare Erweiterung 
empfunden.
Allerdings dürfte es vergleichbares in der Fachliteratur geben.

von Egon D. (Gast)


Lesenswert?

Tobias P. schrieb:

> Egon D. schrieb:
>> Das bezweifele ich.
>> Wenn Dir alle Lehrer in der Schule immer ALLES erzählt
>> hätten, was sie über ihr Fach wissen, würdest Du heute
>> noch dasitzen und zuhören...
>
> ja sicher haben sie nicht ALLES erzählt,

Gut.


> aber die WAHRHEIT und nicht etwas, was "nur halb"
> wahr war.

Das hat Moritz auch nicht.

Wenn Du das anders siehst, solltest Du Dir schon die
Mühe machen, das anhand von Zitaten und eigenen
Erläuterungen deutlich zu machen.


> in der Gesamtbevölkerung möglicherweise schon. Allerdings
> habe ich ja keine fancy Mathematik gepostet. Es sind
> Additionen und Multiplikationen, das kann jetzt wirklich
> jeder.

Deswegen beherrscht ja auch jede Friseuse Zahlentheorie,
denn das sind ja auch nur Addition und Multiplikationen...

Im Übrigen stimmt das nicht, was Du sagst: Ich habe als
Schüler in einer Mathe-AG an der Uni Vorträge über
linear-rekursive Zahlenfolgen gehört -- "alles nur
Additionen und Multiplikationen" --; dort ist ohne
komplexe Zahlen und Exponentialfunktionen kein Blumentopf
zu gewinnen.


> Und hier sind doch Ingenieure, da kann man schon
> erwarten, dass man ein bisschen über den Tellerrand
> zu gucken in der Lage ist.

Wer sagt Dir, dass ich nicht dazu IN DER LAGE bin?


> Aber ich entschuldige mich höflichst, dass ich die meines
> Erachtens ungeeigneten und zum Teil auch nicht korrekten
> Kochrezepte auf eine etwas fundiertere Basis stellen und
> zeigen wollte, was überhaupt mit den Nullstellen (und
> allenfalls Polen) gemeint ist.

Polstellen hat Moritz (aus gutem Grund) nicht erwähnt,
und die Nullstellen sind natürlich die Nullstellen der
Übertragungsfunktion. Das Stichwort "Notch" (=Kerbfilter)
wurde ja extra erwähnt, das kann man von den stetigen
Filtern her kennen.

von Egon D. (Gast)


Lesenswert?

Moritz G. schrieb:

> Ich dachte es dazu zuschreiben (Einfache ... Halbwahrheiten ...)
> würde reichen.

Ich mag mich irren und Deinen Text missverstanden haben,
aber ich fand den Ansatz eigentlich selbsterklärend:
- Du beschränkst Dich von vornherein auf eine spezielle Klasse
  von Digitalfiltern (nämlich auf FIR-Filter), die als
  gewichtete gleitende Mittelwerte auch für den Praktiker
  leicht vorstellbar sind.
- Du baust längere Filter durch Kettenschaltung aus kürzeren
  auf; das ist ein ähnliches Vorgehen wie z.B. die Realisierung
  aktiver RC-Filter höherer Ordnung als rückwirkungsfreie
  Kettenschaltung von Grundgliedern.
- Du charakterisierst die Grundglieder nur durch die Nullstellen-
  frequenz. Das ist geschickt, weil dieses mathematische
  Charakteristikum auch für den Praktiker leicht vorstellbar
  ist (Mittelung über exakt eine Periode unterdrückt halt die
  entsprechende Frequenz vollständig). Der Tiefpass wird also
  als Kettenschaltung von Kerbfiltern aufgebaut.

Sicher kann man einige Details noch besser erklären (ich finde
beispielsweise die Darstellung längerer Koeffizientenvektoren
durch Produkte von kürzeren nicht selbsterklärend), trotzdem
finde ich Deine Anregung gut, weil der Zugang insgesamt von
bestechender Einfachheit ist.

Dass der selbstironische Hinweis auf "Halbwahrheiten" als
"Achtung, hier FEHLT noch mindestens die Hälfte" und nicht
als "Achtung, die Hälfte des Geschriebenen ist FALSCH"
aufzufassen ist, finde ich eigentlich selbstverständlich...

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ich wuerd' sagen: "Kunden, die solche Filter toll finden, kaufen auch: 
CIC-Filter."

Gruss
WK

von Moritz G. (mbydq2)


Lesenswert?

Egon D. schrieb:
> finde die Darstellung längerer Koeffizientenvektoren
> durch Produkte von kürzeren nicht selbsterklärend

Tja, da bin ich vielleicht über das Ziel hinausgeschossen und hätte es 
mir verkneifen sollen.
Wobei bei dem Beispiel ja mit 8. Klasse (Quelle: Niedersächsisches 
Kultusministerium) Klammer-Ausmultiplizieren wirklich 
(0.1275+0.1175x+0.1325x^2+0.1225x^3+0.1225x^4+0.1325x^5+0.1175x^6+0.1275 
x^7)  herauskommt.

> nicht
> als "Achtung, die Hälfte des Geschriebenen ist FALSCH"
> aufzufassen ist, finde ich eigentlich selbstverständlich.

Tja, dachte ich auch.
Aber "falsch" ist halt Definitionssache, jede Auslassung ist zumindest 
zum Teil falsch. Ich lüge nie, aber es kommt vor, dass ich mit Vorsatz 
falsche Annahmen in Leuten erzeuge. Die Welt ist halt grau.

Danke Egon D., für die Unterstellung von Plan, Absicht und gutem Willen. 
Das ist im Internet selten.

von Christoph M. (mchris)


Lesenswert?

>Wobei bei dem Beispiel ja mit 8. Klasse (Quelle: Niedersächsisches
>Kultusministerium) Klammer-Ausmultiplizieren wirklich
>(0.1275+0.1175x+0.1325x^2+0.1225x^3+0.1225x^4+0.1325x^5+0.1175x^6+0.127 5
>x^7)  herauskommt.

Wenn ich es richtig sehe, kann man den ersten Ansatz aber 
"computational" wesentlich effizienter gestalten, wenn man den 
verketteten Filter durch gleitende Mittelwertfilter nur aus Additionen 
ersetzt und das Signal nur einmal mit einem Gewichtungsfaktor 
multipliziert.

von Jan K. (jan_k)


Lesenswert?

Ich fahre auch besser damit, wenn ich es ausrechne.

@Tobias, deine Abhandlung mag zwar stimmen, aber hat ja nur wenig mit 
dem ersten Post zu tun. Oder sagen wir das ist nur der Anfang. Die 
interessanten Sachen mit dem Frequenzgang der vom OP genannten 
Koeffizienten fehlt ja noch ;)

Denn der OP sagt, dass Mittelwertfilter mit identischen Koeffizienten 
und einer Verstärkung von 1 grundsätzlich die Nullstellen (also die 
Frequenzwerte, bei denen der Frequenzgang, also die Verstärkung zu 0 
wird) gleichmäßig von 0 bis fs/2 verteilt und dort eine entsprechend 
große Filterwirkung hat.

Tatsächlich erzeugen die genannten Filter immer nur komplexe 
Nullstellenpaare, was die starke "Absaugwirkung" bei dem Winkel der 
komplexen Zahl verursacht (bei Wunsch kann ich das hier gerne zeigen). 
Es stimmt also, was der OP sagt.

Auch die Verkettung macht Sinn, tatsächlich ist es aber eine Faltung die 
du da oben machst, keine Multiplikation.

Die Frage aber ist ja aber vielmehr: Warum ist das alles so? Kann mir 
das jemand erklären, warum Polynome mit identischen Koeffizienten 
grundsätzlich komplexe Nullstellenpaare haben? Da gibts doch bestimmt 
einen Satz zu.

Danke.

von Tobias P. (hubertus)


Lesenswert?

Jan K. schrieb:
> warum Polynome mit identischen Koeffizienten
> grundsätzlich komplexe Nullstellenpaare haben?

das stimmt so nicht. 2 Dinge:
a) komplexwertige Nullstellen müssen immer als konjugiert komplexe Paare 
auftreten, wenn die Koeffizienten allesamt reell sind.
b) aus a) folgt: nur wenn die Anzahl Nullstellen gerade ist, ist es 
überhaupt möglich, dass sämtliche Nullstellen konjugiert komplex sind.
c) da die Anzahl Nullstellen um eins kleiner ist als der Grad des 
Polynoms, haben also Polynome mit einem, nun ja, ungeraden Grad immer 
mindestens eine rein reellwertige Nullstelle. Man kann sich das 
Anschaulich so vorstellen, dass eine Funktion wie x^3 (ungerades 
Polynom) immer mindestens einmal die x-Achse kreuzen muss, während 
gerade Polynome wie x^2 wie Parabeln aussehen und damit die x-Achse 
nicht zwangsläufig kreuzen müssen - wenn sie es aber tun, dann 
mindestens zwei mal usw. (wobei hier noch der Spezialfall betrachtet 
werden muss, dass eine Parabel die x-Achse genau berührt - dann ist es 
eine doppelte Nullstelle).

Warum die Nullstellen jetzt aber auf einem Kreis liegen, da muss ich für 
den Moment auch passen. Es macht aber schon irgendwie Sinn: Wenn alle 
Koeffizienten eines Polynoms den selben Wert haben und man die 
Nullstellen sucht, dann kann man gleich diesen Koeffizienten wegkürzen 
und muss eigentlich nur noch das Polynom

x^n + ... + x^3 + x^2 + x + 1 = 0

betrachten. Wenn es die Nullstellen x0, x1, x2 und so weiter hat, dann 
kann man ein Polynom mit diesen Nullstellen als

(x-x0)*(x-x1)*...*(x-xn)

schreiben. Wenn die Nullstellen komplexwertig sind, UND alle 
Koeffizienten 1 sein sollen, dann müssen die Nullstellen ja auf dem 
Einheitskreis liegen, weil sie dann Betragsmässig den Wert 1 haben - und 
nur dann können beim Ausmultiplizieren des obigen Ausdrucks lauter 
Einsen entstehen. Würden die Nullstellen betragsmässig einen anderen 
Wert als 1 haben, dann wäre nicht mehr garantiert, dass beim 
Ausmultiplizieren nur Einsen für die Koeffizienten entstehen.

von Rechenfreak (Gast)


Lesenswert?

Moritz G. schrieb:
> Wenn man nicht möchte, dass sich die Nullstellen gleichmäßig zu immer
> kleineren Frequenzen verteilen, muss man sie selbst platzieren, das
> macht man am einfachsten indem man unterschiedliche kleine Filter der
> obigen Form hintereinander schaltet:

Autsch! ein kaskadiertes Kaskadenfilter mit Durchlass für alle 
ungeradzalig passenden Frequenzen und damit unnötig starker Störungen im 
Oberwellenbereich, also etwas, was man bei den meisten Anwendungen so 
ganz und gar nicht haben möchte.

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.