C# digitale Filter

scoutone

Ensign
Registriert
Okt. 2014
Beiträge
147
Hi,

ist hier zufällig jemand unterwegs der sich mit der Auslegung digitaler Filter und den Koeffizienten auskennt.

Konkret geht es um Bessel, Butterworth, Chebychev I und II ind den Filtervarianten Bandpass, Bandsperre, Tiefpass, Hochpass und nach Möglichkeit auch parametrische Varianten davon.

Aktuell nutze ich eine Bibliothek die derartige Filter bereitstellt, leider machen die Filter höherer Ordnungen manchmal Probleme indem sie etwas instabil werden.

Ich brauche also ein bisschen Know How um die Filterkoeffizienten zu berechenen ... abhängig von Filtervariante, Samplingrate, Filterordnung, Eckfrequenzen ... und die Filter sollen möglichst stabil sein.

Als Gegenleistung kann ich bei Interesse ein Verfahren zum errechnen eines mitlaufenden Ordnungsfilters (Ordnung = Vielfaches der Drehfrequenz) mithilfe von nur einem Bandpass zeigen

Gruß

Scout
 
Hi,

Ja, hier ist jemand unterwegs, der sich ein bisschen auskennt ;)

Allerdings stellen sich mir bei deinem Problem gleich einige Fragen:
- In welcher Form liegen die Daten vor?
- Solls eine generische Bibliothek werden oder ein fixer Filter?
- Kennst du dich mit Z-Transformation und diskreter Fouriertransformation aus?
- Wozu brauchst du es?

Gruß,

süchtla
 
Hi,

das ist schön das sich jemand auskennt ...

Also die Daten liegen als Liste von Floats vor.

Werden soll es möglichst eine Bibliothek / Klasse die die Filter entsprechend der Anforderung erzeugt.

Z-Trans und DFT .. naja so halb... ich bin hier "nur" der Softwareentwickler, habe aber noch 4 Fahrzeugakustiker hier sitzen die davon einiges verstehen. Leider können die mir mit den Filtern nicht so wirklich helfen.

Brauchen tu ich es, damit man sich die Messungen mit diversen Filtern anhören kann, Performance ist also gefragt.

Ganz am Anfang hatte ich eine komplexe FFT des Gesamtsignals gemacht, dann die Filterkurve aufmultipliziert und dann per inverser FFT mir das Zeitsignal zurück geholt ... aber das ist zu langsam uund funktionierte eben nicht um Ordnungen zu filtern ...

Gruß

Scout
 
Also klassisch als y(t).

Okay, folgende kleine Einschränkung: ich bin nicht professioneller Softwareentwickler. C# kann ich, aber keine Librarys schreiben.

Also, DFT + Filterkurve multiplizieren + iDFT ist eine der einfachsten Methoden, das sollte alle Ordnungen abdecken können und stabil sein. Wenn das allerdings zu langsam ist, stellt sich irgendwie die Frage, von welchen Datenmengen man spricht und welche Rechenpower verwendet wird. Dafür sollte jedenfalls alles im RAM liegen ;)

Die andere Variante ist eine Z-Trans mit Filtern im Z-Bereich, allerdings musst du hier berücksichtigen, dass diese Filter so wie jeder reale Filter, unterschiedliche Laufzeiten haben (Phasendrehung), die du für Audio am Ende wieder herausrechnen musst.

Ich hatte mal irgendwo eine Website, wo alle Formeln standen, ich finds grad nicht mehr ....
Wenn ich es finde, poste ich es hier.

Jedenfalls, hier kannst du dir deine Koeffizienten online berechnen: http://t-filter.appspot.com/fir/index.html

Ich verwende für solche Sachen immer Matlab, falls du das kennst. Das hätte die komplette Filter-Erzeugung schon drinnen.

Leider, ohne Unterlagen sehe ich auch nicht gut aus ^^

Gruß
 
Also Datenmengenmäßig reden wir von Messungen mit 1 - 30 Kanälen, Abtastrate 512 Hz - 48 kHz, länge 3 sek bis 10 Min ...


als worst case für 1 Kanal also 48000 * 4 Bytes (float) * 600 sek = also 110 MB je Kanal.

Zum rechnen liegen die Daten natürlich im RAM ... Rechner sind Laptops mit i5pro und 8 GB RAM und SSD

Das Problem ist ... ich habe nicht immer die gleiche Abtastrate und auch Bandbreite und Mittenfrequenz sind variabel, darum kann ich mir die Koeffizienten nicht als Tabelle hinterlegen sondern muss diese passend zu Abtastrate und Settings generieren... ... inklusive Polstellenbetrachtung damit die Filterstabilität untersucht werden kann ...

Ordnungsfilter gehen mit der DFT Methode nicht ... mit Ordnung meine ich nicht die Ordnung des Filters um die Flankensteilheit zu erhöhen .. sondern ... wenn beim Auto der Motor von 1000 auf 6000 umdrehungen hochdreht, so ändert sich seine drehfrequenz von 16,6 auf 100 hz ...

Eine Ordnung ( im Akustikbereich auch als Harmonische bezeichnet) ist ein Vielfaches dieser Frequenz ... und die ändert sich halt innerhalb der Messung .. darum geht DFT und iDFT halt nicht .. da könnte man nur konstante Frequenzen mit behandeln

Falls dir der Link wieder einfällt ... wäre toll.

Gruß

Scout
 
scoutone schrieb:
Das Problem ist ... ich habe nicht immer die gleiche Abtastrate und auch Bandbreite und Mittenfrequenz sind variabel, darum kann ich mir die Koeffizienten nicht als Tabelle hinterlegen sondern muss diese passend zu Abtastrate und Settings generieren... ... inklusive Polstellenbetrachtung damit die Filterstabilität untersucht werden kann ...
Okay, verstehe.

Ich habe mit Tontechnik/Akustik und Maschinenbau sehr wenig bis garnichts am Hut. Aber Harmonische ist mir wieder ein Begriff.

Ich such noch verzweifelt, aber die History von Chrome ist leider zu kurz ...

Gruß


EDIT:

Ich glaube, du hast zumindest teilweise Glück ;)

Hier finden sich die Formeln für einige Butterworth-Filter. Allerdings musst du, bedingt durch die allgemeine Form der Filter, die Daten Normalisieren (und Z-Trans).

Das ist leider das einzige, was ich dazu habe. Google sollte aber die restlichen Formeln ausspucken.
Oder ein Tabellenbuch zu digitalen Filtern.

Guten Abend :)
 
Zuletzt bearbeitet:
Zurück
Oben