www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Software für IIR Coefficienten


Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Kai Klaas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/coef...
Diese Software hat aber offensichtlich Fehler. Die Filter verhalten sich 
nicht immer planmäßig.

Autor: Kai Klaas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Silvio K. (exh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kennt jemand eine gute Software, um diese IIR Coefficienten zu
>kalkulieren?

MATLAB

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Silvio K. (exh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist meine Vermutung zu dumm?
Mache ich einen Denkfehler?

Autor: Silvio K. (exh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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" ?

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Raimund Rabe (corvuscorax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Daniel Kremer (crazyman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.