biquad

ノード

イコライザーとフィルタ。ベルからノッチまで8種類のフィルタ形状を、トポロジー保存の状態変数型(TPT-SVF)で処理します。

パラメータ

欄何を決めるか範囲必須
cutoff_hz遮断/中心周波数[Hz]。上限は内部レートのナイキスト(低いファミリー側)。0 〜 352,800必須
gain_db?利得[dB]。bell /シェルフでは必須、他の型ではnullか省略。-24 〜 24任意
qQ。0.05 〜 40必須
shape応答の型。low_pass / high_pass / band_pass / notch / all_pass / bell / low_shelf / high_shelf必須

? = 省略できる欄

{
  "cutoff_hz": 1000,
  "gain_db": 3,
  "q": 1,
  "shape": "bell",
  "type": "biquad"
}

計算

g = tan(π · cutoff_hz / レート)     レート = 705,600 または 768,000 Hz
k = 1 / q                          (bellでは 1 / (q · A))

応答型・遮断周波数・q・gain_db から5つの係数(g・k と3つの混合係数)を解き、
TPT状態変数型フィルタとして走らせる
直接形(Direct Form)のバイカッドではなく、トポロジー保存の状態変数型(TPT-SVF)を採用しています。768kHzのような高サンプリングレートでは遮断周波数との比率が極めて小さくなり、直接形のフィルタ係数は数値的に縮退して不安定化しやすくなります。このトポロジー保存形式であれば、遮断周波数がナイキスト未満かつQ値が正である限り、浮動小数点の丸め誤差が生じても常に安定動作が保証されます。
  • gain_dbが効くのはbell・low_shelf・high_shelfです。ほかの応答型では省略するかnullにします。
  • 係数を算出しているのは、アプリで特性曲線を描画しているのと同じコードです。画面に表示される特性曲線と実際に適用されるフィルタ特性が乖離することはありません。
  • フィルタ係数は両方の内部レートで個別に算出され、その双方で安定動作の検証を満たす必要があります。

使うときの注意

  • 遮断周波数は可聴域よりずっと上まで置けます。

    上限は低いほうの系列の内部ナイキスト(352.8kHz)です。これは意図した仕様で、非線形段によって生成された高周波倍音を整形するフィルタの配置を想定しているためです。検証で拒否されるのは、その超音波帯域を増幅(ブースト)することです。

  • 高いQ値は一律禁止ではなく、実際のピーク利得を測定します。

    Q値が極めて狭くブースト量の大きいフィルタは鋭いピーク利得を生じるため、係数検証ではその最大ゲインを厳密に測定します。制限値を超過して拒否された場合は、超過量が具体的な数値として返されます。

  • 線形ノードのため音量合わせの対象となります。

    帯域をブーストするbiquadはシグナルチェーン全体の出力レベルを上昇させるため、A/B比較の自動音量合わせがフィルタ係数からブースト分を自動的に相殺します。