BMS, Movie, Illustrations, Programming

Linkwitz-Riley フィルタの位相についての補足

結論

まず Wikipedia を読め。

結論

Linkwitz-Riley フィルタの次数が 2, 6, 10, 14,… 次 (4k-2 次) の場合は、クロスオーバーフィルタとして機能させるためには高域バンドの位相を反転させる必要がある。

言い換えると、高域バンドを低域バンドから減算する必要がある。

理論(読まなくて OK)

1. 低域バンド

実数係数の安定なデジタルローパスフィルタについて、直流周波数の位相特性は必ず 0°(または符号反転で 180°)である。

これを 2 個直列接続すると、 0° となる。

2. 高域バンド

一方で、実数係数の安定なデジタルハイパスフィルタについて、ナイキスト周波数の位相特性は 0° (または符号反転で 180°)である。

さて、n 次のバターワースフィルタは零点が単位円上に n 個(画像内緑色)、単位円の内部に極が n 個(画像内赤色)ある。これらの寄与を足し合わせると、零点の箇所を除いて単位円を反時計回りに一周した場合(画像内水色)、位相が -180n° だけ変化するはずである。従って、虚軸方向の極零配置の対称性から、半周では位相が -90n° だけ変化するはずである。

以上より、n 次のバターワース型のデジタルハイパスフィルタの、直流周波数の近傍での位相特性は 90n° または (180+90n)° になる。これを 2 個直列接続すると、直流周波数近傍での位相特性は 180n° になる。

3. 低域バンドと高域バンドの合成

この、いま構成した高域バンドと低域バンドを見比べてみると、n が奇数のとき、直流周波数での位相差が 180° あることがわかる。このため、位相を一致させてクロスオーバーフィルタとして機能させるためには、どちらかのバンドを位相反転させる必要があることがわかる。(雑な議論ではあるが。)

4. 直流以外の周波数 (2026/3/16 追記) (洗練されていない文章なので本当に読まなくて良いです)

また、零点が -1, 1 にある場合の位相への寄与は、

$$
H(z)=\frac{z\pm1}{z}=1\pm z^{-1}
$$

となり、FIR フィルタになるので、線形位相である。

分子の位相 $\arg(z-1)$ と $\arg(z+1)$ に

$$
z=e^{i\omega}
$$

を代入して、これらの零点の位相の寄与がどうなるかを考える。

上図より、 $0<\omega<\pi$ の範囲で $z=e^{i\omega}$ が動くとき、

$$
\arg(z-1)=\frac{1}{2}\arg(z)+\frac{\pi}{2}
$$

$$
\arg(z+1)=\frac{1}{2}\arg(z)
$$

よって

$$
\frac{\mathrm{d}}{\mathrm{d\omega}}\arg(z-1)=\frac12
$$

$$
\frac{\mathrm{d}}{\mathrm{d\omega}}\arg(z+1)=\frac12
$$

となる。つまり、単位円の半周に対して、 90° の位相変化が均等に分配されるということである。これは、 $1\pm z^{-1}$ が線形位相であることからも自然な結論であるといえる。

零点に関するこの結果、および、バターワースフィルタの極配置は LPF と HPF で共通しているという事実から、LPF と HPF の直流近傍での位相が一致すれば、 $0<\omega<\pi$ の全範囲で LPF と HPF の位相が一致することがわかる。

追記(記事を書いた後に気付いた)

# 2, 6, … 次Linkwitz-Riley フィルタの場合、片方の極性を反転
h_lr_high = -h_lr_high if (order*2+2) % 4 == 0 else h_lr_high

よく見たらちゃんと参考文献 [1] のソースコード内コメントに書いてありましたね……大変失礼いたしました……。

さらに言うと Wikipedia[2] にも書いてありますね……(完)

参考文献

[1] マルチバンド(オーディオクロスオーバー)処理を実現するフィルタ(Butterworth, Linkwitz-Riley)のPython実装(2バンド)
https://www.wizard-notes.com/entry/python/audio-crossover-filter-2-band

[2] Linkwitz–Riley filter – Wikipedia
https://en.wikipedia.org/wiki/Linkwitz%E2%80%93Riley_filter