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
>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
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.
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.