FIR Filter berechnen und anwenden
-
Hi,
ich möchte gerne Audio in Echtzeit filtern per LP, HP, BP, und habe gelesen dass hier wohl die FIR Filter zu den effektivsten Methoden dafür gehört. Ich habe mich auch ein wenig mit der Mathematik dafür beschäftigt, aber bin dann bei der Differential- und Integralrechnung hängen geblieben, da mir dann die Fourier-reihen doch zu kompliziert waren um halt nur einmal einen Filter zu verstehen und zu implementieren. Also blicke ich auch nicht ganz bei der FFT durch und würde gerne von euch wissen, ob ihr einen etwas dummen Menschen wir mir erklären könnt wie die Koeffizienten für einen FIR Filter zu berechnen sind und wie ich dann damit meine Samples umrechnen muss damit am Ende das Signal gefiltert ist?
Zu meine Vorkenntnissen, ich habe kein Abi aber ich habe mich ein wenig mit Ableitungen von Funktionen(die Tangenten an den Punkten von Funktionskurven), mit Differential- und Integralrechnung beschäftigt und glaube es auch ganz gut verstanden zu haben für den Anfang. Nur bei den Fourierreihen bin ich dann nicht mehr mitgekommen weil mir doch noch einige Grundlagen fehlen. Aber ich bin auch kein Mathematiker oder Informatiker und programmiere auch nur noch aus Spaß, da ich nicht mehr in der Branche arbeite.
Wäre nett wenn sich jemand die Zeit nimmt mir das mit den Filtern zu erklären.
Danke für eure Zeit.
-
Hast du irgendwelche besonderen Anforderungen, wie Filter mit linearer Phase? In dem Fall wären FIR Filter optimal. Wenn mit effizient gemeint ist, möglichst effizient berechenbar zu sein, sprich mit geringer rechenlast, dann haben IIR Filter enorme Vorteile.
Deinen FIR Filter zu berechnen ist ganz einfach: Du malst quasi den gewünschten Frequenzverlauf und wenndest darauf eine inverse DFT an (du findest im Netz sicherlich irgendwelche fertigen FFT-Bibliotheken, musst also quasi gar nix verstehen). Dann hast du die Impulsantwort und kannst die über dein Signal falten. Da ich davon ausgehe, dass das gar nicht ist, was du willst führe cih das jetzt einfach mal nicht genauer aus.
Wenn du nur fertige Filter brauchst und nicht wirklich welche designen willst, dann findest du auf http://www.musicdsp.com/ tonnenweise Beispiele.
-
Helium schrieb:
Deinen FIR Filter zu berechnen ist ganz einfach: Du malst quasi den gewünschten Frequenzverlauf und wenndest darauf eine inverse DFT an (du findest im Netz sicherlich irgendwelche fertigen FFT-Bibliotheken, musst also quasi gar nix verstehen). Dann hast du die Impulsantwort und kannst die über dein Signal falten. Da ich davon ausgehe, dass das gar nicht ist, was du willst führe cih das jetzt einfach mal nicht genauer aus.
Einfach wäre es über das PN-Diagramm zu laufen. Beim FIR sitzen ehe alle Pole im Ursprung, da braucht man nur noch geeignet(*) die Nullstellen zu verteilen dann ein bisschen ausmultiplizieren und die Koeffizienten ablesen.
*Erläuterung kommt später ...
-
Danke erst einmal für die Antworten, ich denke mir der Implementierung des Filters habe ich nun keine Probleme mehr, sind ja nur Additionen und Multiplikationen auf die Eingangswerte.
Was mir noch Kopfzerbrechen macht sind die Koeffizienten dafür auch in Echtzeit zu berechnen. Leider weiß ich nicht wie ich da eine DiskreteFourierTransformation und das anschliessende Falten realisieren soll mir sind halt die Techniken nicht bekannt.
Fertige Libs oder Filter möchte ich nicht nutzen. Da der Weg bei mir das Ziel ist auch wenn ich den mathematischen Teil erstmal nur leicht ankratzen möchte. Ich möchte also keinen Code vor die Nase geknallt bekommen sondern einfach wissen was ich zu rechnen habe um z.B einen LowPassFilter mit variabler Grenzfrequenz und z.B Tab von 64 implementieren zu können. Ob die Phase dabei linear bleiben muss kann ich nicht sagen, ich denke das macht nur Sinn bei z.B Datensignalen und weniger bei Audio oder?
-
Tu dir einen Gefallen und mach IIR Filter.
-
Warum willst du unbedingt FIR Filter, obwohl du keine Anforderungen hast, die für einen FIR sprechen?
-
Ich habe irgendwo gelesen das FIR-Filter häufiger eingesetzt werden als die mit Rückkopplung, aber lasse mich gerne eines Besseren belehren.
Was sind die Vorteile der IIR-Filter?
Ok, wie realisiere ich einen IIR-Filter und wie kann ich da die Grenzfrequenz und die Filterart in Echtzeit berechnen, so dass ich live mit den Filtern "spielen" kann?
-
Ein Tip:
Schau dir bitte erst mal die Software Octave (http://www.gnu.org/software/octave/) an, mit der man numerische Berechnungen durchführen kann. Denn mit dieser Software kannst du unter anderem auch Filter (Bereich Signalverbeitung) berechnen. In der Doku zu Octave findest du unter dem Begriff Signal Processing eine Übersicht über die unterstützten Befehle wie: fft, ifft, filter, blackman, hamming, ...
Ziel des Ganzen ist es erst einmal dass du ein Gefühl für die Signalverarbeitung bekommst.
Spiele ruhig mal damit rum. Wie sieht das kontinuierliche Spektrum einer Audio Datei an ? Wie sieht das abgetastete Spektrum aus ? Wie sieht ein gefiltertes Signal aus ? ...
Weitere Materialien:
http://en.wikipedia.org/wiki/Digital_filter
https://ccrma.stanford.edu/~jos/filters/filters.htmlNoch ein kleiner Hinweis:
Wenn du Octave installieren willst, würde ich empfehlen alle Pakete außer oct2mat zu installieren da dies bei mir Probleme verursachte.
-
Danke für den Tipp. Ich habe Matlab 2009 installiert, muss ich da auch ein zusätzliches Modul installieren? Wäre Octave besser für das Rumspielen geeignet?
-
freizeit_programmierer schrieb:
Was sind die Vorteile der IIR-Filter?
- deutlich einfachere Implementierung
- bessere Echtzeitfähigkeiten
- andere Designmöglichkeiten (z.B. schwingende Filter) durch Polpaare (durch Rückführungen)
- ...freizeit_programmierer schrieb:
Ok, wie realisiere ich einen IIR-Filter und wie kann ich da die Grenzfrequenz und die Filterart in Echtzeit berechnen, so dass ich live mit den Filtern "spielen" kann?
Gibt mehrere Möglichkeiten. Gerne geht man von "analogen" Designs aus, diskretisiert diese mittels der bilinearen Transformation und berechnet sich so die Koeffizienten. Das kann man dann natürlich in Echtzeit erledigen. Werde später etwas mehr zu schreiben falls ich dran denke
-
@freizeit_programmierer:
Wäre Octave besser für das Rumspielen geeignet?
Nee, soweit wie ich weis sind beide Programme ungefähr gleichwertig. Ich glaube sogar das Octave weniger Funktionalität hat als Matlab.
Ich habe Matlab 2009 installiert, muss ich da auch ein zusätzliches Modul installieren?
Das weis ich leider nicht. Schau mal in die Doku nach Signalverarbeitung, fft,... Es wird aber vermutlich keine Probleme damit geben, da die Entwicklung von Octave an Matlab ausgerichtet ist und es so viele gleiche Dinge zwischen den beiden Programmen gibt.
Ansonsten probiere doch einfach mal den fft Befehl in der Matlab Console. Oder probiere doch mal den pkg Befehl, welcher unter Octave alle installierten Pakete anzeigt.
-
@tim: danke für die Ausführungen, und wäre nett wenn du da noch mehr zu schreiben könntest.
@Bitte ein Bit:Matlab hat Tutorials zu den Filtern eingebaut auch wenn ich dort nicht alles verstehe. Ich werde nun das gefühlte tausendste Tutorial angehen, diesmal über Matlab um auch dort einen Einstieg zu finden.
*grr warum kann ich nicht wie andere einfach Cut & Paste programmieren.
Danke nochmal an alle die mir hier versuchen die Thematik zu erklären, das ist nicht selbstverständlich.
-
Ok, MatLab klingt schonmal gut und als Nichtstudent hast du vermutlich auch die Vollversion
mit installiertem Signal Processing Toolbox.
Als Einstieg fängst du jetzt erstmal hier an:
http://de.wikipedia.org/wiki/Butterworth-Filter
http://de.wikipedia.org/wiki/Bessel-Filter
http://de.wikipedia.org/wiki/Cauer-Filter
http://de.wikipedia.org/wiki/Tschebyscheff-FilterDies sind Filter mit jeweils speziellen Eigenschaften. Deine IIR-Filter werden nun an diese Eigenschaften angepasst. Lerne zuerst ein bisschen die Unterschiede zwischen den Typen und schreibe sie dir alle Ordentlich auf. Die Mathematik dahinter muss du nicht dringend verstehen. Die Frequenzgänge solltest du dir auch gut anschauen.
Danach gehts mit MatLab und Koefizienten weiter
-
Danke für deine Antwort, ja ich habe die SP-Toolbox in der man z.B. auch die Sprungantwort der Filter sich grafisch anschauen kann.
Ich habe mir die Filter durchgelesen und die für mich erst einmal relevante Unterschiede sind:
Tschebyscheff = schneidet Frequenzen vollständig ab und hat Welligkeit bei der Durchlassfrequenz
Butterworth = schneidet Frequenzen vollständig ab und verändert nicht die Durchlassfrequenzen. Scheint rechenintensiv zu sein.
Bessel = Filterchrakteristik ähnlich wie beim Butterworth, nur nicht so komplex in den Berechnungen.
Cauer = Wellen bei den abgeschnittenen Frequenzen und bei der Grenzfrequenz, die Durchlassfrquenzen verlaufen annähernt linear.
-
Danke erstmal bin hierhin für eure Mühe. Ich habe nun ein mal ein wenig auf englisch recherchiert und siehe da, es gibt tonnenweise Informationen wo auch ein Otto-Normal-Verbraucher vom Filterdesign mit Pole-Zero bis zur Implementierung alles versteht.
In deutsch hat man da kaum eine Chance ohne sich sehr intensiv mit den Grundlagen beschäftigen zu müssen, da alles zu umfangreich und nicht auf das Nötigste erklärt wird. So eben typisches Bürokraten-Deutsch, alles zu tiefst theoretisch beschrieben und so komplex wie möglich. Warum schaffen es die Deutschen nicht die Thematik auf das nötigste zu reduzieren und die Sachverhalten mit ganz einfachen knappen Sätzen zu beschreiben?
Mit Englisch spart man echt soviel Einarbeitungszeit in ein neues Thema das ist echt unglaublich, da fällt das Nachschlagen von Vokabeln nicht großartig ins Gewicht.
Nächstes mal werde ich gar nicht erst auf Deutsch suchen, da scheint das Motto zu gelten "Warum einfach wenn es auch kompliziert geht". Man man man, da kann man sich nur auf die Stirn klatschen.
Zum Glück gibt es Foren wie diese hier wo man auch mal in seiner Muttersprache kommunizieren kann.
Vielleicht geht es auch nur mir so mit den englischen Artikeln und Tuts.
-
freizeit_programmierer schrieb:
Vielleicht geht es auch nur mir so mit den englischen Artikeln und Tuts.
Nein, geht nicht nur dir so. Ich habe das bei Fachbüchern auch schon beobachtet. Es gibt auch gute deutsche Fachbücher, aber gerade bei Büchern, die in ein neues Thema einführen, find ich englische oft klarer geschrieben.