all pass peaking filter bell filter

Ein Bell-Filter (also Glockenfilter oder Peaking-Filter genannt) ist ein Audio-Entzerrungsfilter, das die Amplitude einer bestimmten Gruppe von Frequenzen um eine Mittenfrequenz herum anhebt oder abschwächt, um eine Amplitudenentzerrung durchzuführen. Wie in der Grafik unten zu sehen ist, hat das Filter seinen Namen von der Form seines Amplitudenspektrums (blaue Linie), die einer Glockenkurve ähnelt.

Frequenzgang (Betrag in blau, Phase in violett) eines Bell-Filters 2. Ordnung mit Spitzenwert bei 125 Hz

Allpass-Filter

Das Herzstück des Bell-Filters ist das so genannte Allpassfilter. Allpassfilter bieten eine einfache Möglichkeit, den Phasengang eines IIR-Filters zu verändern/verbessern, ohne den Betragsgang zu beeinflussen. Als solche werden sie üblicherweise als Phasenentzerrer bezeichnet und haben insbesondere in digitalen Audioanwendungen Verwendung gefunden

Ein Allpassfilter zweiter Ordnung ist definiert als:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}} \)

Beachten Sie, dass die Koeffizienten des Zählers und des Nenners als spiegelbildliches Paar zueinander angeordnet sind. Die Spiegeleigenschaft ist es, die dem Allpassfilter seine wünschenswerte Eigenschaft verleiht, nämlich die Möglichkeit, den Phasengang zu verändern, während der Betragsgang über das gesamte Frequenzspektrum konstant oder flach bleibt.

Ein Bell-Filter kann aus dem \(A(z)\)) -Filter durch die folgende Übertragungsfunktion konstruiert werden:

\(H(z)=Largefrac{(1+K)+A(z)(1-K)}{2}\)

Nach einigen algebraischen Vereinfachungen erhalten wir die Übertragungsfunktion für das Peaking- oder Bell-Filter als:

\(H(z)=\Large{\frac{1}{2}}\left[\normalsize{(1+K)} + \underbrace{\Large\frac{k_2 + k_1(1+k_2)z^{-1}+z^{-2}}{1+k_1(1+k_2)z^{-1}+k_2 z^{-2}}}_{all-pass filter}\normalsize{(1-K)} \right] \)

  • \(K\) dient zur Einstellung der Verstärkung und des Vorzeichens des Peaks
  • \(k_1\) stellt die Mittenfrequenz des Peaks ein
  • \(k_2\) stellt die Bandbreite des Peaks ein

Implementierung

Ein Bell-Filter kann einfach in ASN FilterScript wie folgt implementiert werden:

ClearH1;  // clear primary filter from cascade
interface BW = {0,2,0.1,0.5}; // filter bandwidth
interface fc = {0, fs/2,fs/100,fs/4}; // peak/notch centre frequency
interface K = {0,3,0.1,0.5}; // gain/sign

Main()

k1=-cos(2*pi*fc/fs);
k2=(1-tan(BW/2))/(1+tan(BW/2));

Pz = {1,k1*(1+k2),k2}; // define denominator coefficients
Qz = {k2,k1*(1+k2),1}; // define numerator coefficients
Num = (Pz*(1+K) + Qz*(1-K))/2;
Den = Pz;
Gain = 1;

Dieser Code kann nun verwendet werden, um ein geeignetes Bell-Filter zu entwerfen, wobei die genauen Werte von \(K, f_c\) und \(BW\) einfach gefunden werden können, indem man die Schnittstellenvariablen verändert und die Ergebnisse in Echtzeit sieht, wie unten beschrieben.

Entwerfen des Filters im laufenden Betrieb

Das Herzstück der Interaktivität der FilterScript-IDE (Integrierte Entwicklungsumgebung) sind die so genannten Interface-Variablen. Eine Schnittstellenvariable ist, einfach ausgedrückt, eine skalare Eingangsvariable, die verwendet werden kann, um einen symbolischen Ausdruck zu modifizieren, ohne dass der Code neu kompiliert werden muss – so können Designer “on the fly” entwerfen und schnell zu einer optimalen Lösung gelangen.

Wie im obigen Code-Beispiel zu sehen ist, müssen Schnittstellenvariablen im Initialisierungsabschnitt des Codes definiert werden und können Konstanten (z. B. fs und pi) und einfache mathematische Operatoren wie Multiplikation * und / Dividieren enthalten. Wobei das Hinzufügen von Funktionen zu einer Schnittstellenvariablen nicht unterstützt wird.

Eine Schnittstellenvariable wird als Vektorausdruck definiert:

interface name = {minimum, maximum, step_size, default_value};

Dabei müssen alle Einträge reelle skalare Werte sein. Vektoren und komplexe Werte werden nicht kompiliert.

Aktualisierungen in Echtzeit

Alle Schnittstellenvariablen werden über die GUI des Schnittstellenvariablen-Controllers geändert. Verwenden Sie nach dem Kompilieren des Codes den Schnittstellenvariablen-Controller, um die Werte der Schnittstellenvariablen zu verändern und die Auswirkungen auf die Übertragungsfunktion zu sehen. Wenn Sie mit Live-Audio testen, können Sie eine geladene Audiodatei streamen und die Schnittstellenvariablen in Echtzeit anpassen, um die Auswirkungen der neuen Einstellungen zu hören.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *