Hallo Zusammen, Ich möchte bestimmte Audiofrequenzen mit einem DSP betonen, dabei wäre eine lineare Phasenverschiebung im Durchlassbereich sehr wünschenswert. Die einzige Möglichkeit, die ich kenne ist ein IIR-Resonanzfilter, gibt es andere Möglichkeiten? Kennt jemand eine gute Software, um diese IIR Coefficienten zu kalkulieren? Die Software sollte mindestens die Phasenverschiebung, im Durchlass und im Sperrbereich, grafisch anzeigen. Danke
:
Verschoben durch Admin
>Ich möchte bestimmte Audiofrequenzen mit einem DSP betonen, dabei wäre >eine lineare Phasenverschiebung im Durchlassbereich sehr wünschenswert. Warum unbedingt eine lineare Phasenverschiebung? Wenn du den Frequenzgang verbiegst, wird sich das viel störender anhören, als ein krummer Phasengang. Überdies, Phasenverschiebungen bleiben absolut unhörbar, voraussgesetzt sie sind für linkes und rechtes Ohr genügend gleich. Das ist auch gut so, denn sonst könnte man keine gut klingenden Lautsprecher bauen. Kai Klaas
Am wichtigsten ist für mich eine gute Software, die Koeffizienten für stabile Filter kalkuliert und die verursachte Phasenverschiebung irgendwie anzeigt. Ich möchte unbedingt erfahren, wie die Phasenverschiebung aussieht und nicht nur die Koeffizienten berechnen. Das einzige was ich bisher gefunden habe, war eine kostenlose Software vom TI http://focus.ti.com/docs/toolsw/folders/print/coefficient-calc.html Diese Software hat aber offensichtlich Fehler. Die Filter verhalten sich nicht immer planmäßig.
>Am wichtigsten ist für mich eine gute Software, die Koeffizienten für >stabile Filter kalkuliert und die verursachte Phasenverschiebung >irgendwie anzeigt. Aber du weißt, daß IIR-Filter im Gegensatz zu FIR-Filtern intrinsisch instabil sind? Da genügen oft schon kleine Rundungsfehler, um das Ding zum Schwingen zu bringen. Kai Klaas
Kai Klaas schrieb: > Aber du weißt, daß IIR-Filter im Gegensatz zu FIR-Filtern intrinsisch > instabil sind? Da genügen oft schon kleine Rundungsfehler, um das Ding > zum Schwingen zu bringen. Es liegt aber nicht an Rundungsfehlern. Diese Software funktioniert gut, wenn die gewünschte Frequenz ca. ¼ der Samplefrequenz ist, sonst kaum. Diese Software hat offensichtlich ein Fehler. Gibt es keine andere Software?
Ich habe zufällig diese Woche ein IIR-Filter in C geschrieben und ich habe die gleiche Frage gehabt. Die Antwort lautet: Scilab z.B. -->filterkoef=iir(4,'lp','butt',[0.025 0], [0 0]) filterkoef = 2 3 0.0000312 + 0.0001250z + 0.0001874z + 0.0001250z 4 + 0.0000312z --------------------------------------------------- 2 3 0.6630105 - 2.9240527z + 4.8512759z - 3.5897339z 4 + z --> Zum Plotten gibt es ein mitgeliefertes Beispiel
>Kennt jemand eine gute Software, um diese IIR Coefficienten zu >kalkulieren? MATLAB
in kostenlos: Octave, wobei es von der Einfachheit der Bedienung her nicht an die das MATLAB FDA-Tool herankommt. Damit ist es wirklich trivial ein einfaches Filter zu berechnen.
Ich habe kein MATLAB, aber vielleicht gelingt es mir eine ältere Version (7.0) zu installieren. Kann ich dann das FDA-Tool herunterladen und damit verwenden? Kann ich dann damit definitiv auch IIR-"Resonanzfilter" berechnen?
Alon schrieb: > Ich habe kein MATLAB, aber vielleicht gelingt es mir eine ältere Version > (7.0) zu installieren. Scilab ist praktisch Matlab, nur kostenfrei und Opensource. Man kann sogar gucken, wie die Koeffizienten berechnet werden.
Wie ich bereits einmal geschrieben habe, funktioniert die Software vom TI sehr gut, wenn die gewünschte Frequenz ca. viertel der Samplefrequenz ist. Alon schrieb: > Diese Software funktioniert gut, wenn die gewünschte Frequenz ca. ¼ der > Samplefrequenz ist, sonst kaum. Diese Software hat offensichtlich ein > Fehler. Kann es eigentlich sein, dass ein IIR-Resonanzfilter sowieso (unabhängig von der Software) am besten funktioniert, wenn die gewünschte Frequenz ca. viertel der Samplefrequenz ist? y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2] Die Koeffizienten b1 und a1 sind dann Null und die Rückkupplung aus dem Ausgang (durch a2) erfolgt nach genau einer halben Periode. y[n] = 1*x[n] + 0 + b2*x[n-2] - 0 - a2*y[n-2] Der Abstand zwischen [n] und [n-2] ist genau eine halbe Periode.
Lad doch mal ne Filterkurve hoch, dann weiß ich auch worum es geht. Alon schrieb: > am besten funktioniert, wenn die gewünschte Frequenz > ca. viertel der Samplefrequenz ist? Wie definierst du "am besten funktioniert" ?
Schau mal bei www.digitalfilter.com vorbei. Toshio Iwata hat hier (früher) einige Java-Programme veröffentlicht. Kann evtl. sein, dass er jetzt Geld dafür verlangt. oder suche "IIR design software" oder "IIR coefficient calculation" oder "digital filter design formula" Wichtig ist das Vorzeichen, wenn der Filter komisch reagiert, diese genau prüfen und ggf. umdrehen.
Auch bei uns in der Firma setzen wir DSPs ein. Zwar nicht zu den üblichen Audio-Anwendungen, aber die Theorie ist im Prinzip identisch. Viele Kunden kommen auch mit dem Wunsch IIR-Filter einsetzen zu wollen. Eigentlich kein Problem, aber bei Filtern höherer Ordnung hat auch ein DSP mit Single-Floats (32-Bit(!)) schon so seine Stabilitätsprobleme. Und die Ursache sind tatsächlich Rundungsfehler. Eine einfache Möglichkeit die Stabilität des Filters marginal zu überprüfen ist den größten Koeffizienten durch den kleinsten Koeffizienten zu teilen. Kommt dann dort ein Zahl heraus, die die zur Verfügung stehende Mantisse des vorhandenen Float-Formats 'sprengt', wird das Filter instabil. Ein konretes Beispiel habe ich jetzt nicht ad hoc zur Hand, aber häufig (halt abhängig vom Verhältnis fs zu fc) ist der größte Koeffizient z.B. im einstelligen Bereich (also 1,.. oder 2,...) und der kleinste Koeffizient im Milli- oder Mikrobereich (also evtl. 0,001.. bis 0,000001...). Damit unterscheiden sich die Koeffizienten folglich um einen Faktor von bis zu 10^6 oder gar mehr. Ein 32-Bit-(Single-)Float hat eine binäre Mantisse von 23-Bit, was dezimal etwa einem Mantissenumfang von 10 Mio. entspräche. IIR-Filter sind nun nichts anderes als Multiply-and-Accumulate-Aktionen. Zu einem Wert von 1,... einen Wert von 0,000001 zu addieren, würde bedeuteten, daß die kleine Zahl, die ursprünglich noch eine Mantisse von 23-Bit hatte, bur noch mit 2 bis 3 relevanten Mantissen-Bits zu den 1,... hinzuaddiert würden. Ein immenser Rundungsfehler entsteht. Nun ist es so, das die IIR-Filterkoeffizienten bei 1/4 der Samplingfrequenz den kleinsten Abstand voneinander haben. Je näher man an fc=0 bzw. fc=fs/2 kommt, umso weiter entfernen sich die Koeffizienten voneinander und das Filter wird immer instabiler je höher die Ordnung wird.
Um einen belieigen Frequenzgang mit einem FIR Filter zu realisieren verwendet man die IFFT. Für einen TP genügt auch sin(x)/x mit einem Fenster.
nur so mal nebenbei IIR Filter haben einen absolut krummen Phasengang! Die FIR Filter können einen linearen Phasengang haben wenn man die Koeffizienten symmetrisch auslegt.
Das Problem mit Instabilität auf Grund der hohen Rundungsenergie (Rundungsfehler kann man auch als Störgrößen betrachten) lässt sich mit Wellendigitalfiltern einigermaßen in den Griff bekommen.
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.