Forum: Digitale Signalverarbeitung / DSP / Machine Learning Tiefpass-Filter mit einstellbarer Dämpfung und Eckfrequenz


von DSP-Beginner (Gast)


Lesenswert?

Analog zu dem bereits bestehenden Thema mit dem Hochpass und 
einstellbarer Frequenz hätte ich auch eine Frage:

Ich möchte ein einstellbares gleichmäßiges Filter realisieren, welches 
ab einer bestimmten Frequenz einen einstellbare Dämpfung beitzt.

Wie realisiere ich das grundsätzlich?

Ausgehend von einem einfachen IIR-Filter erster Ordnung erhalte Ich eine 
wirksame Grenzfrequenz und ab dort einen Niedergang der Amplitude mit 
6dB/Oktave bzw. 20dB/Dekade.

Wie erzeuge Ich ein Filter, das z.B. einstellbar 2,4 ... 10 dB pro 
Dekade fällt?

Als Beispiel habe ich weisses Rauschen, dass kontinuierlich in Rosa 
Rauschen überführt werden soll. Rosa Rauschen ist durch eine 
1/f-Kennlinie gekenntzeichnet AFAIK. Das ist mir zu steil für meine 
Signale.

Ansatzpunkt zum Einlesen?

Auf DSPrelated und ähnlichen Seiten bin ich leider nicht fündig 
geworden.

Danke.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

So'n Filter wie du da haben willst ist halt was ziemlich exotisches. Da 
wird's drauf rauslaufen, sich per Octave, Matlab oder aehnlichem solche 
Filter naehrungsweise berechnen zu lassen.
Guck dir zB. mal die Funktionen fir2 und invfreqz bei Octave/Matlab an 
und spiel' mit denen.

Gruss
WK

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Engmaschiges, linearphasiges Multibandfilter?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das rosa Rauschen ist ja auch schon feiner als die normale Filterstufung 
aufgelöst. Normale Filter haben pro frequenzbestimmendem Bauteil 6dB pro 
Oktave, das rosa Rauschen nur 3dB. Da trickst man auch mit vielen 
parallelgeschalteten RC-Gliedern, was etwa Jürgens Multibandfiltern 
entsprechen würde.

: Bearbeitet durch User
von Rolf S. (audiorolf)


Lesenswert?

Da gab es vor ein paar Tagen einen Artikel:
https://dspblog.audio-dsp.de/
Bin aber noch nicht durchgestiegen!

von Gustl B. (-gb-)


Lesenswert?

Mal ne dumme Frage zu Filtern:

Wenn ich ein FIR nehme, dann haben die ja einen Filterkernel. Das ist 
quasi eine Signalform. Wenn ich die Grenzfrequenz erhöhe, dann sieht das 
rein optisch so aus, als würde diese Signalform "zusammengeschoben" also 
die Breite ändert sich.

Kann man so ein variables FIR Filter bauen indem man diese Signalform 
mit vielen Punkten ablegt in einem ROM und dann je nach erwünschter 
Grenzfrequenz mal mehr und mal weniger äquidistante Punkte daraus als 
Koeffizienten für den FIR nimmt? Also man sampelt quasi den Filterkernel 
mal langsamer mit mehr Samplepunkten und mal schneller mit weniger 
Samplepunkten ab. Diese Samplewerte sind dann die Koeffizienten für das 
FIR.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ja. Kann man prinzipiell so machen; gibt aber auch aehnliche 
Dreckeffekte, wie wenn man bei Samples einfach ein paar weglaesst, um 
sie schneller abzuspielen.

Gruss
WK

von Gustl B. (-gb-)


Lesenswert?

Dergute W. schrieb:
> Ja. Kann man prinzipiell so machen;

Wow, das war nur eine wilde Vermutung. Cool ... klar, ich würde da den 
Kernel mit sehr viel mehr Punkten ablegen als am Ende gebraucht werden. 
Z. B. 2k Punkte (passt schön in ein Xilinx BlockRAM) und dann werden 
daraus maximal 64 Punkte für das FIR gesampelt.

von Dergute W. (derguteweka)


Lesenswert?

Naja, man kann auch prinzipiell mit einer Kaffeemaschine Wuerstchen 
warmmachen oder mit einem Buegeleisen einen Toast toasten. Hat aber 
schon Gruende, warum man das ueblicherweise nicht so macht...

Gruss
WK

von Gustl B. (-gb-)


Lesenswert?

Meine Oma hat Würstchen tatsächlich im Wasserkocher erwärmt. Eier auch.

Aber gut, was ist dann eine einfache Methode um ein variables Filter zu 
bauen? Die Idee von mir ist sehr einfach in einem FPGA umzusetzen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Gustl B. schrieb:
> was ist dann eine einfache Methode um ein variables Filter zu
> bauen?

Ich kenn' keine. Analog wie auch digital ist das immer mehr oder weniger 
uneinfach.
Was brauchste fuer'n Filter, was muss das denn fuer feste Eigenschaften 
haben, und an welchen Eigenschaften willst du variieren koennen?

Gruss
WK

von Gustl B. (-gb-)


Lesenswert?

Ne, ich brauche sowas nicht, ist nur ein Gedanke. Hier auf dem 
Schreibtisch habe ich einen Mixer von Reloop. Der hat Effekte und kann 
auch filtern, das macht der irgendwie digital und ich kann am Drehregler 
die Grenzfrequenz einstellen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Das wird dann wohl eher nicht im FPGA laufen, oder wenn, dann halt in 
einem FPGA mit einem DSPartigen Design drinnen. Hier hab' ich mal sowas 
in primitiv als IIR (FIR mit tiefen Eckfrequenzen werden gerne mal 
unangenehm lang) gepostet:

Beitrag "Re: adaptiv IIR Filter Koeffizienten ändern, wie?"


In einem FPGA denkbar waere auch so ein Ansatz, dass man das 
Originalsignal auf eine hoehere Abtastfrequenz interpoliert, dann mit 
einem sin/cos aus einem NCO mit variabler Frequenz 'raufmischt, durch 
ein konstantes, aber steilflankiges Filter schaufelt und mit dem selben 
sin/cos wieder runtermischt. Durch die Variation der NCO Frequenz wird 
dann der Einfluss des Filters variiert. Konnte Opa schon analog mit zB. 
2xECH81 und Quarzfilter aufbauen, waehrend Oma die Wuerstchen 
heissmachte. ;-)

Gruss
WK

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Wow, das war nur eine wilde Vermutung. Cool
Das kann man ja mit jeder Funktion machen, die irgendeinen Filter 
darstellt und wird mitunter auch so gemacht. Bevor aber zu viel Euphorie 
ausbricht:
 In der Wellensynthese nennt sich das Formant-Shaping und ist bei 
Synthies ein ziemlich alter Hut. :-)

Das hat man früher praktisch nur so gemacht, um CPU-Power zu sparen, 
wenn man keine Zeit hatte, Filterkoeffizienten direkt zu berechnen. Es 
ist im Prinzip dasselbe wie die hier diskutierte Interpolation von 
Koeffizienten für Kaiser oder Hamming:
Beitrag "Re: Kaiser-Window Annäherung"

In Software hat es immer limits hinsichtlich der Rechenzeit und 
letztlich ist es eine Frage der gewünschten Auflösung:

> ... klar, ich würde da den Kernel mit sehr viel mehr
> Punkten ablegen als am Ende gebraucht werden.
Du brauchst nur 2 bis maximal 4 mal "mehr Punkte", wenn du verstanden 
hast, wie die maximale Krümmung deiner Funktion aussieht (Stichwort 
Oberwelle) und von welcher Qualität der Filter ist, mit dem du diese 
Werte interpolierst.
Anzunehmenderweise wird man ein kubisches oder zumindest quadratisches 
Filter verwenden, um die Koeffizienten zu interpolieren und selbige über 
mindestens 2..4 Endpunkte = 6..12 Primärpunkte erstrecken. Dann wird das 
sehr exakt.

Genau das mache ich z.B. in FPGAs indem Tabellen für DDS, Primärklänge 
oder gesampeltes Material überabgetastet wird, bevor es in die Faltung 
(Ringoszillator, FM-Modulator) kommt:
http://www.96khz.org/htm/realtimeresampler2.htm

Wenn man das voll flexibel machen möchte, sollte man sich aber wirklich 
überlegen, ob man nicht die Koeffizienten direkt in Echtzeit berechnet, 
zumal das in Prozessoren mit float sogar einfacher ist:


Gustl B. schrieb:
> das macht der irgendwie digital und ich kann am Drehregler
> die Grenzfrequenz einstellen.
Das dürfte aus performance-Gründen ein IIR sein. Aber auch da müssen die 
Koeffizienten in Echtzeit umgerechnet werden, was mathematisch sogar 
noch aufwändiger ist, als beim FIR. Zudem ergeben sich infolge der 
Verwendung von zeitverschobenen Informationsspeichern  quadratische und 
kubische Terme in der Filtergleichung und somit z.T. massive 
Phasenverschiebungen, wenn man die Parameter ändert. Das muss also 
entsprechend hochaufgelöst passieren.

Und genau dafür braucht man regelrecht FPGAs und eine hohe 
Abtastfrequenz, wenn es in Echtzeit gehen soll.

Was man dann praktisch auch braucht, ist eine fein aufgelöstete 
Parametrierung, damit sich das wie ein analoger Filter verhält. Also 
entweder intern alle Änderungen der Knöppe dämpfend interpolieren, oder 
besser mit entsprechenden Raten und Auflösung übertragen:
http://www.96khz.org/oldpages/limitsofmidigranularity.htm


Tastet man das Material nicht auf entsprechenden Frequenzen ab, muss man 
es smoothen, d.h. von einer Gleichung auf die andere überwechseln. Dazu 
rechnet man in der Regel zwei Filter parallel und ändert die Amplituden 
+ gfs auch die Phasen der Ausgänge, die sich dann abwechseln. Man kann 
auch drei Filter nehmen und sie ein- und ausgleiten lassen, wobei mehr 
Zeit zum Laden neuer Koeffs beim Durchfahren besteht.

Die klassische wavetable-Synthese funktioniert nach diesem Prinzip. Da 
mitteln sich die Artefakte ein bischen weg, wenn man die Frequenz 
verschiebt.

Ich hatte in einer Lautsprecher-Kompensationsanwendung für einen 
C-programmierten 56k-DSP mal eine Lösung drin, die unterschiedlich lange 
Tabellen verwendet und beim morphen überblendet.
Dann hat man beim reduzieren der Samples nicht smoothen müssen, sondern 
konnte ganzzahlige Sprünge machen, was für die App reichte.
Dann gab es immer nur ganzzahlige Abtastungen der Tabelle, die passen 
genutzt wurden, z.B. eine mit 64 Einträgen und eine mit 60 später noch 
eine mit 63

Die 64er deckte alles mit 2, 4, ... 8, ....... 16, .... 32, 64 ab
Die 60er wurde bei         3,  5, 6, 10, 12, 15, 20, 30,
Die 63 deckt 7, 9 und 21 ab

etc.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Originalsignal auf eine hoehere Abtastfrequenz interpoliert, dann mit
> einem sin/cos aus einem NCO mit variabler Frequenz 'raufmischt, durch
> ein konstantes, aber steilflankiges Filter schaufelt und mit dem selben
> sin/cos wieder runtermischt.

Kommt ein wenig drauf an, wie hoch die benötigten Frequenzen sind im 
Bezug auf die Taktfrequenz des FPGAs. Ich fände jetzt die dynamisch 
Änderung der Filterkoeffizienten einfacher.

In dem von dir gelinkten Beitragsstrang gibt es im Übrigen noch einen 
link auf einen Baustein, der das auch macht:
Beitrag "Re: adaptiv IIR Filter Koeffizienten ändern, wie?"

>FIR mit tiefen Eckfrequenzen werden gerne mal unangenehm lang
Wenn es ein FIR sein muss, böte sich auch eine HBF-Kaskade an. Die sind 
im FPGA auch gut zu machen, wenn man eine iterative pipeline verwendet.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Johann Wolfgang von Goethe schrieb:
> Erlaubt ist, was gefaellt.

Gruss
WK

von Gustl B. (-gb-)


Lesenswert?

Das klingt alles sehr gut, nur habe ich dafür zu wenig Ahnung. Bin nur 
Hobbymensch ...

Von IIR lasse ich die Finger, das sieht in erster Näherung nach Voodoo 
aus^^ klar, ist es nicht, aber FIR finde ich da deutlich angenehmer.

Jürgen S. schrieb:
> Tastet man das Material nicht auf entsprechenden Frequenzen ab, muss man
> es smoothen, d.h. von einer Gleichung auf die andere überwechseln. Dazu
> rechnet man in der Regel zwei Filter parallel und ändert die Amplituden
> + gfs auch die Phasen der Ausgänge, die sich dann abwechseln. Man kann
> auch drei Filter nehmen und sie ein- und ausgleiten lassen, wobei mehr
> Zeit zum Laden neuer Koeffs beim Durchfahren besteht.

Das klingt auch spannend.
Ich hätte den Kernel ja abgetastet, mit unterschiedlicher Samplerate je 
nach gewünschter Grenzfrequenz, und das eben nicht nur einmal, sondern 
laufend. Sprich in dem ersten Abtastdurchlauf fallen eben bestimmte FIR 
Koeffizienten raus und direkt danach beginnt der nächste Abtastdurchlauf 
und es fallen neue FIR Koeffizenten raus. Die sind zwar nicht sehr 
unterschiedlich weil ja die Abtastgeschwindigkeit/Samplerate gleich 
bleibt, aber es sind eben doch etwas andere neue Koeffizienten. Dadurch 
wechselt das FIR sehr oft die Koeffizienten, die Grenzfrequenz bleibt 
grob gleich, das wackelt aber alles minimal hin und her. Aus meiner 
Sicht würde das auch dazu führen, dass es im Mittel gut aussieht. 
Vielleicht ist das aber auch eine total doofe Idee^^

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> und das eben nicht nur einmal, sondern
> laufend. Sprich in dem ersten Abtastdurchlauf fallen eben bestimmte FIR
> Koeffizienten raus und direkt danach beginnt der nächste Abtastdurchlauf
> und es fallen neue FIR Koeffizenten raus.

Das gibt Phasensprünge wie bei der DDS mit entsprechenden Auswirkungen. 
Klar, wird sich das im Mittel mit Blick auf die Grundfrequenz 
wegmitteln. Aber mit Blick auf die dabei erzeugten Störungen sind das 
unharmonische Modulationen in der krassesten Form.

Für Audio z.B. vollkommen ungeeignet.

Selbst objektiv in der Stimmung passende Modulationen, ganzzahlige 
Phasensprünge und Koeffizientenänderungen, die das Ziel haben gehört zu 
werden, müssen rhythmisch sein und ein geringes Ausmaß haben, um 
klanglich noch akzeptabel zu sein. Es gibt eigentlich nichts 
Unangenehmeres als unkontrollierte Phasensprünge mit dem vollen Pegel.

Schaut dir mal meinen link oben auf die Jitterthematik an, wie das 
aussieht.

Dergute W. schrieb:
> Johann Wolfgang von Goethe schrieb:
>> Erlaubt ist, was gefaellt.
Siehe seine Farbentheorie :-)

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.