2026/07/05

Polyphase IIR フィルタ

Polyphase IIR フィルタを読む (github.io)

ダウンサンプリングに使う IIR フィルタをポリフェイズ分割する方法について検証しました。

Butterworth フィルタであれば動作しています。 32-bit float では 8 次、 64-bit float では 16 次あたりが挙動がおかしくならない上限です。楕円フィルタについても簡単に動作確認したところ動いていました。正面から transposed direct form II でダウンサンプリングするよりも高速かつ正確に計算できます。

画像は 8 次、 4 フェイズ、カットオフ 1/32 [rad/2π] のポリフェイズ Butterworth フィルタの周波数特性です。振幅特性が -120 dB 以下となる高い周波数でノイズが乗っているのはすべて 32-bit float の実装です。

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 から得たものです。浮動小数点数の計算誤差に関する知識がなかったので検証に時間をかけました。

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

2026/04/15

ShockFlanger


Download ShockFlanger (github.com)
Read the manual (github.io)

ShockFlanger is a hybrid of a distortion and a flanger. It sounds like a guitar amp. The internals are close to a through-zero flanger with saturators and waveshapers on the feedback paths. High CPU load.

This is an improved version of CombDistortion with better anti-aliasing. ShockFlanger can add better frequency modulation using delay time modulations.

The cause of the high CPU load is memory accesses. DAWs flush the CPU cache for each processing cycle which create a load to read the delay buffers from RAM. This is unavoidable because it's impossible to allocate a space in cache, and DAWs are handling other jobs and plugins. 

---

ShockFlanger をダウンロード (github.com)
マニュアルを読む (github.io)

ShockFlangerはフランジャーの構造をしたディストーションで、ギターアンプのような音が出ます。内部はスルーゼロフランジャーに近く、フィードバック経路に配置されたサチュレーターと、オーディオレートでのディレイ時間変調の組み合わせで歪みが出ます。CPU 負荷はとても高いです。

ShockFlanger は CombDistortion と基本的には同じで、アンチエイリアシングに改良を加えています。 CombDistortion ではほぼ不可能だった、ディレイ時間の変調による FM をかけることもできます。

高 CPU 負荷の原因はメモリーアクセスです。 DAW はオーディオ処理のサイクルごとに CPU キャッシュを消し飛ばしてしまうので、 ShockFlanger は処理を始めるたびにメモリからディレイのバッファを読み込まなければならず、速度が大幅に落ちます。 CPU キャッシュには固定したメモリを確保できず(できると色々なアプリケーションが壊れそうですが)、 DAW は ShockFlanger 以外のプラグインやオーディオ処理をいろいろと回しているのでどうしようもないところではあります。