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.
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
Engmaschiges, linearphasiges Multibandfilter?
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
Da gab es vor ein paar Tagen einen Artikel: https://dspblog.audio-dsp.de/ Bin aber noch nicht durchgestiegen!
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.
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
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.
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
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.
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
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.
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
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.
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.
Moin,
Johann Wolfgang von Goethe schrieb:
> Erlaubt ist, was gefaellt.
Gruss
WK
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^^
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.