www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP IIR unterschiedliche Koeffizienten +AVR


Autor: kaffeetas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche grad einen IIR Filter in nach Atmel Appnote nachzubauen.
Die Koeffizienten habe ich mit Filter-Free bestimmt, leider sind diese 
stark unterschiedlich. D.h. der kleinste ist 7.xxxxe-8 und der größte 
2.xxxxxx. Diese Faktoren müßte ich ja ziemlich stark skalieren um 
überhaupt eine Handvoll wertende Stellen zu erhalten, während die 
anderen dann schon mächtig groß sind. Macht das überhaupt Sinn?

Die Abtastrate ist mit 1,6hz nur sehr gering, deshalb mach ich mir um 
die Performance prinzipiell auch keine Sorgen.
Die Grenzfrequenz ist auch recht klein da die interessante frequenz sehr 
langsam ist (1/600 hz) und der ganze Rest das nur stört.

Hilft evtl. Mehrfachfilterung?

Bin leider mit der Mathematik nicht so recht vertraut deshalb frag ich 
lieber vor ich mich tagelang mit nonsens beschäftige.


Grüße
 kaffeetas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier Beitrag "FIR Filter funtioniert nur bei Fg > 0,01?" wird dein Problem 
diskutiert. Dezimieren sollte helfen.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Scilab (www.scilab.org) und dem Befehl eqiir lassen sich auch 
IIR-Filter berechnen, sie werden schon in Teilfilter 2.Ordnung zerlegt. 
Ist das die alte oder neuere Appnote? in der alten war auch noch ein IIR 
6.Ordnung beschrieben, das schwingt sehr zuverlässig, außerdem ein paar 
Schreibfehler im Programm.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Beispiel für ein elliptisches Stopbandfilter, das ich mit dem 
ATMega48 gebaut habe:

// Stopband-Filter für 1750 Hz, Samplerate =18029Hz
// Eckfrequenzen 1400Hz, 1700Hz, 1800 Hz, 2100Hz:
omega=[2*%pi*(1400/18029),2*%pi*(1700/18029),2*%pi*(1800/18029),2*%pi*(2 
100/18029)];
// Maximale Durchgangswelligkeit 0,5 dB
deltapass = (1-10**(-0.5/20)) ;
// minimale Sperrband-Dämpfung 50 dB
deltastop = 10**(-50/20);
// IIR-Filter berechnen:
[sos,gain,zeroes,poles] = eqiir('sb','el',omega,deltapass,deltastop);
// Second order sections anzeigen:
sos
gain

                            2                             2 
2
          1 - 1.6219938z + z            1 - 1.6396794z + z           1 - 
1.656616z + z
sos = --------------------------    ------------------------   
-------------------------
                                2                             2 
2
      0.9383702 - 1.5100165z + z     0.8466245 - 1.513936z + z 
0.9485511 - 1.663563z + z

gain = 0.8683583

die Brüche müssen noch in Zähler und Nenner durch z^2 dividiert werden, 
damit die übliche Schreibweise mit z^(-2) und z^(-1) herauskommt.
( hoffentlich passt das in eine Zeile, sonst wird es unleserlich).

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte es befürchtet, in Scilab kommt es lesbarer heraus, je nach 
Fensterbreite.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]

Autor: kaffeetas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank für die Antworten!

hab mir jetzt mal das scilab installiert - naja da muss ich mich jetzt 
auch noch einarbeiten.....
die tutorial von matlab sollen ja ganz gut dazu passen....

auch die CICR-Filter werd ich mal austesten.

Ist die aktuelle Apnote von der Homepage der IIR ist 2 Ordnung ist da 
auch ein Fehler drin?
Hab mal zum aufwärmen den FIR umgeschrieben in GCC und Assembler ist 
auch eine spezielle Welt!

Grüße
 kaffeetas

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/Digitalfil...
Ich habe mal endlich meinen Artikel zum Thema ins Wiki eingetragen. Noch 
nicht komplett, aber das wesentliche ist gesagt. Kommentare, am besten 
unter der dortigen Rubrik "Diskussion" sehr erwünscht.

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.