Das Kuhschwanzfilter für Tiefenanpassung (engl. Low shelving filter) verstärkt oder dämpft einen Frequenzbereich unter f_0 gleichmäßig, während es die die höheren Frequenzen des Spektrums unverändert durchlässt.

Rendered by QuickLaTeX.com

Die Übertragungsfunktion eines digitalen Low-Shelving Filters 2. Ordnung kann als

(1)   \begin{equation*} H(s)=A \frac{s^2+\frac{\sqrt{A}}{Q}s+A}{As^2+\frac{\sqrt{A}}{Q}s+1} \end{equation*}

beschrieben werden.

Ermittlung der Koeffizienten für das Biquad-filter

Nach der bilinearen Transformation erhält man

(2)   \begin{equation*} \begin{align} a_0&=((A+1)+(A-1) \cos(w_0)+2 \sqrt{A} \alpha) \\ b_{n,0}&=\frac{1}{a_0}((A ((A+1)-(A-1) \cos(w_0)+2 \sqrt{A} \alpha)) \\ b_{n,1}&=\frac{1}{a_0}(2 A ((A-1)-(A+1) \cos(w_0)))\\ b_{n,2}&=\frac{1}{a_0}((A ((A+1)-(A-1) \cos(w_0)-2 \sqrt{A} \alpha)) \\ a_{n,1}&=\frac{1}{a_0} (-2 ((A-1)+(A+1) \cos(w_0)))\\ a_{n,2}&=\frac{1}{a_0} ((A+1)+(A-1) \cos(w_0)-2 \sqrt{A} \alpha) \\ \end{align} \end{equation*}

wobei

(3)   \begin{equation*} \begin{align} f_0 &: Grenzfrequenz\\ F_s&: Abtastrate\\ \omega_0&=2 \pi \frac{f_0}{F_s}\\ \frac{1}{Q}&=2 \sinh(\frac{\ln(2) BW}{2})\\ \alpha&=\frac{sin(\omega_0)}{2 Q} \end{align} \end{equation*}

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 a_0 zu teilen, wird mit inversem (ein mal vorberechneten) Wert a_0^{-1} 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.

Klangbeispiele