2023/06/29

Slope Filter

Download Slope Filter (github.com)
Read Source Code (github.com)

Slope Filter is a filter to approximate arbitrary slope in decibel per octave (dB/oct). Perhaps useful to change the overall brightness of sound.

Internal is a cascade of high-shelf filters. Cutoff is set to `f_c * 2^n`, where n is index of cascade, and f_c is cutoff frequency. Slope Filter is using matched 1-pole high-shelf, but RBJ high-shelf also can be used with `Q=1/sqrt(2)`. In case of RBJ, it's possible to reduce the number of filters 1/2, 1/3, and so on, by changing cutoff interval to `f_c * 4^n`, `f_c * 6^n`, and so on. However, accuracy decreases as the number of filters decreases.

I also tried to turn this IIR cascade into linear phase using the method of "A New Reverse IIR Filtering Algorithm", but it didn't work. It's probably better to use bidirectional filtering to get impulse response, then convolve it.

Image is example gain response of -1 dB/oct.

-

Slope Filte をダウンロード (github.com)
ソースコードを読む (github.com)

Slope Filter は任意の dB/oct の傾きを近似するフィルタです。音の明るさを変更するときに使えるかもしれません。

中身は直列に接続したハイシェルフフィルタで、各段のカットオフ周波数を 1 倍, 2 倍, 4 倍, 8 倍, ... と設定しています。式にまとめると `f_c * 2^n` で n は直列接続されたフィルタのインデックス、 f_c はカットオフ周波数です。 Slope Filter では整合 1 次ハイシェルフを使っていますが RBJ のハイシェルフでも `Q=1/sqrt(2)` とすれば、ほぼ同じことができます。 RBJ のハイシェルフでは Q を調整しつつフィルタの数を 1/2, 1/3, ... と減らすこともできます。このときカットオフ周波数の間隔は `f_c * 4^n`, `f_c * 6^n`, ... となります。ただしフィルタの数が減っただけ近似の精度も落ちます。

この IIR フィルタを "A New Reverse IIR Filtering Algorithm" の手法を使って線形位相にしようと試みたのですが、うまく動きませんでした。おそらく、双方向フィルタリングを使用してインパルス応答を取得し、それを畳み込む方が良いでしょう。

画像は -1 dB/oct の傾きのあるゲイン応答の例です。