Can Kosar

Kategorie: Effects (page 3 of 3)

Digitales Tiefpassfilter (LPF)

Das Tiefpassfilter filtert die höheren Frequenzen als die Grenzfrequenz f_0  heraus und lässt die Tieferen durch.

Rendered by QuickLaTeX.com

Die Übertragungsfunktion eines digitalen Tiefpassfilters 2. Ordnung kann als

(1)   \begin{equation*} H(s)=\frac{1}{s^2+\frac{s}{Q}+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&=1+\alpha \\ b_{n,0}&=\frac{1}{1+\alpha} \frac{1-\cos(w_0)}{2} \\ b_{n,1}&=\frac{1}{1+\alpha} (1-\cos(w_0))\\ b_{n,2}&=\frac{1}{1+\alpha} \frac{1-\cos(w_0)}{2} \\ a_{n,1}&=\frac{1}{1+\alpha} (-2 \cos(w_0))\\ a_{n,2}&=\frac{1}{1+\alpha} (1-\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}\\ \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

Biquad Filter

Biquad Filter sind das Herzstück vieler digitalen Filterimplementierungen.  Es ist -wie der Name sagt- ein „biquadratisches Filter“.  Das heißt, sowohl der Nenner als auch der Zähler sind von der zweiten Ordnung.

Es ist ein Filter mit unendlicher Impulsantwort (IIR=Infinite impulse response). Die IIR-Filter können im Gegensatz zu FIR-Filter (Finite impulse response) instabil werden. Je höher die Ordnung, desto problematischer ist die Stabilität. Doch, die Filter erster und zweiter Stufe sind recht einfach Stabil zu bekommen, bzw. zu berechnen. Genau aus dem Grund sind die Biquad-Filter sehr beliebt. Um Filter höherer Ordnungen zu erreichen, kann man Biquad-Filter kaskadieren. Zudem für viele Standardfilter sind einzelne Biquad-Blöcke vollkommen ausreichend.

Mathematische Beschreibung

Im z-Bereich kann man ein Biquad-Filter folgendermaßen beschreiben:

(1)   \begin{equation*} H(z)=\frac{Y(z)}{X(z)}=\frac {b_0+b_1 z^{-1}+b_2 z^{-2}} {a_0+a_1 z^{-1}+a_2 z^{-2}} \end{equation*}

Das führt zur Differentialgleichung:

(2)   \begin{equation*} y[n] = \frac {1}{a_0} (b_0 x[n]+b_1 x[n-1]+b_2 x[n-2] -a_1 y[n-1] - a_2 y[n-2]) \end{equation*}

oder normalisiert durch \frac{1}{a_0} ergibt

(3)   \begin{equation*} y[n] = \frac {b_0}{a_0}  x[n]+\frac {b_1}{a_0} x[n-1]+\frac {b_2}{a_0} x[n-2] -\frac {a_1}{a_0} y[n-1] - \frac {a_2}{a_0} y[n-2]) \end{equation*}

Der Regelkreis der 1. direkten Form sieht folgendermaßen aus.

In dieser Form kann man das Filter implementieren. Eine C++ Funktion könnte so aussehen:

Das heißt, bei einer pro Zeitschritt werden 5 Multiplikationen, 4 Additionen und je nach Optimierung des Compilers im Besten Fall 4 Speicherkopiervorgänge gebraucht. Bei einem DSP mit MAC-Operationen je nach verfügbaren Befehlsätzen reduziert sich die Zyklen dementsprechend, die man für eine Biquad-Berechnung braucht.

Soweit relativ einfach verständlich. Nun müssen die Parameter für unsere erwünschte Filter ermitteln. Das ist das große Gebiet des Filter-Designs. Wir müssen dafür die Übertragungsfunktion im Frequenzbereich H(s) von unserem erwünschten Filter ermitteln. Danach können wir dies durch bilineare Transformation in den z-Bereich führen und daraus die zeitdiskreten Differentialgleichungen ableiten und implementieren.

Also ein typischer Ablauf des Filterdesigns ist:

  1. Ermittlung der Übertragungsfunktion H(s)
    1. Mit Hilfe der analogen Filter
    2. Sonstige mathematische Ansätze
    3. Durch vorhandenen Regelkreis
  2. Vom Frequenzbereich in z-Bereich umwandeln
    1. z-Transformation
    2. Bilineare Transformation (BLT)
  3. Im  z-Bereich die Koeffizienten berechnen.
  4. Implementieren

Das komplizierteste davon ist der erste Punkt: Ermittlung der Übertragungsfunktion. Die Übertragungsfunktionen für Audio-Filter sind u. a. hier oder hier ermittelt. Anbei eine Übersicht für die wichtigsten Filter und dessen Berechnungsroutinen.

neuestenposts

Rechte © 2024 Can Kosar

Mit Unterstützung von Wordpress, QuickLaTeX und Design von Anders NorenSeitenanfang ↑