2026/06/28

1-pole 複素ローパスフィルタ

1-pole 複素ローパスフィルタを読む (github.io)

GenericDrum で使った 1-pole 複素ローパスフィルタについて性質を調べました。

このフィルタは -6 dB/oct のスロープでレゾナンスが調節できるフィルタが欲しかったので、複素レゾネータに基づいて適当に作ったものです。カットオフ周波数は極の位置と対応しているので、レゾナンスのピークと一致します。振幅が -3 dB となる周波数とは一致しません。また、レゾナンスが低いときの挙動に癖があります。

画像はレゾナンスを固定してカットオフ周波数を変えたときの 1-pole 複素ローパスフィルタの振幅特性です。

2026/06/27

Chamberlin SVF

Chamberlin SVF を読む (github.io)

Chamberlin SVF と呼ばれる 2 次フィルタについて調べました。バイリニア変換ではなくオイラー法に基づく離散化を行ったバイクアッドフィルタで、周波数特性の歪みが大きい代わりに高速に計算できるという特徴があります。サンプリング周波数が 48000 Hz のときにカットオフの上限が約 8000 Hz となるため使いづらいですが、 4 倍以上のオーバーサンプリングを行うのであれば選択肢に入ります。

Chamberlin SVF からは以前紹介した「3-pole ローパスフィルタ」の α = 1 の場合について等価出力を得ることができます。

画像は Q = 1 / sqrt(2) としたときの振幅特性です。カットオフがナイキスト周波数に近いと特性がおかしくなっていることが見て取れます。

2026/06/24

Sum of Square Roots の近似関数の詳細


Sum of Square Roots の近似関数の詳細を読む (github.io) 

上のリンク先の記事は、このブログの「Sum of square roots の近似関数」に掲載しているコードの詳細です。画像は f64 で計算したときの誤差です。  3 ULP を超える誤差は今のところ見つかっていません。

2026/06/18

EMA フィルタのカットオフの正確な計算


EMA フィルタのカットオフの正確な計算を読む (github.com)

ふと思いついて Gemini 3 Pro に exponential moving average (EMA) フィルタのカットオフ周波数からフィルタ係数を正確に計算する方法を聞いてみたところ、使える回答が出てきました。 Gemini はバージョンが上がって 3.1 Preview や 3.5 Flash などが出ていますが、基本的な式変形は 3 Pro から得たものです。浮動小数点数の計算誤差に関する知識がなかったので検証に時間をかけました。

上の画像は素朴な計算方法の誤差、下の画像は正確な計算方法の誤差です。赤と青の線であらわされた誤差が対応するマシンイプシロンを示す黒い横線を下回っていれば完全に正確です。ところどころマシンイプシロンを上回っているので完全に正確ではなく、ほぼ正確といった性能です。