Das Kuhschwanzfilter für Tiefenanpassung (engl. Low shelving filter) verstärkt oder dämpft einen Frequenzbereich unter gleichmäßig, während es die die höheren Frequenzen des Spektrums unverändert durchlässt.
Die Übertragungsfunktion eines digitalen Low-Shelving Filters 2. Ordnung kann als
(1)
beschrieben werden.
Ermittlung der Koeffizienten für das Biquad-filter
Nach der bilinearen Transformation erhält man
(2)
wobei
(3)
Implementierung
Somit erhält man alle Koeffizienten, die man für die Implementierung braucht. Die Implementierung der Koeffizientenberechnung würde folgendermaßen aussehen.
Am Code lassen sich manche Optimierungen erkennen.
- Mehrmals vorkommende Variablen sind vorberechnet (z.B. trigonometrische Funktionen)
- Anstatt jedes mal durch
zu teilen, wird mit inversem (ein mal vorberechneten) Wert
multipliziert, da Multiplikation günstiger ist als Division für viele CPUs.
- Die Berechnungen erfolgen mit Gleitkommezahlen doppelter Präzision (double) und wird am Ende auf Float gecastet. Der Grund: Trigonometrischen Funktionen mit Single-Präzision (float) kann zu erheblichen numerischen Fehlern und dadurch zu unerwünschten Ergebnissen bzw. Instabilität führen.
- Der Code ist optimiert für die Hardware-FPU von Cortex-M7 Mikroprozessor.
Schreibe einen Kommentar