Windowed Sinc フィルタの高速な計算を読む (github.io)
sin を再帰的に計算する方法を使って、高速に windowed sinc フィルタを設計する方法について調べました。
ディレイ時間変更時のアンチエイリアシングにおいて、リアルタイムで 1 サンプルごとにフィルタ係数を更新する必要があったので調べました。実験環境では std::sin を使った通常の計算方法に比べると 2~3 倍ほど速くなりました。リンク先の記事の方法は計算精度が低くなるので、フィルタ係数が固定の用途には不向きです。
記事中で触れていますが、 sinc 関数の 0 の周りでは Padé approximant に切り替えて近似しています。このアイデアには Gemini 2.5 Flash を使ってたどり着きました。
(追記: 2026-01-01) Gemini 3 Pro に繰り返しレビューを行わせたところ、テイラー展開を使ったよりまともな近似が得られました。関連する部分について記事の変更、追記を行いました。
画像はディレイの補間方法を変えたときのエイリアシングを比較するスペクトログラムです。下段の 3 つが今回実装したアンチエイリアシングの結果です。
