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)
Das führt zur Differentialgleichung:
(2)
oder normalisiert durch ergibt
(3)
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/*Main process*/ float c_biquad::process(float *x){ //Process biquad filter y= *x*bn0 +x1*bn1 +x2*bn2 -y1*an1 -y2*an2; //Update the history array x2=x1; y2=y1; x1=*x; y1=y; return y; } |
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 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:
- Ermittlung der Übertragungsfunktion
- Mit Hilfe der analogen Filter
- Sonstige mathematische Ansätze
- Durch vorhandenen Regelkreis
- Vom Frequenzbereich in z-Bereich umwandeln
- z-Transformation
- Bilineare Transformation (BLT)
- Im z-Bereich die Koeffizienten berechnen.
- 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.
- Tiefpassfilter
- Hochpassfilter
- Bandpassfilter
- Notch-Filter
- Allpassfilter
- Peak-Filter
- Shelf-Filter (Kuhschwanzfilter)
Schreibe einen Kommentar