NOTE 005

Bell EQ Frequency Response Visualizer

Bell EQの周波数、Gain、Qからbiquad係数と周波数応答を計算し、ブラウザ上で可視化するツールを公開しました。

#FILTER#BIQUAD#RNBO
H(eʲω) = (ff₀ + ff₁e⁻ʲω + ff₂e⁻ʲ²ω) / (1 + fb₁e⁻ʲω + fb₂e⁻ʲ²ω)

Bell EQ Frequency Response Visualizer

Bell EQのCenter Frequency、Gain、Qを動かしながら、周波数応答と正規化済みbiquad係数を確認できるブラウザツールを作りました。20 Hz〜20 kHzのカーブをリアルタイムに描画し、各パラメーターがフィルターの形へどう影響するかを視覚的に追えます。

Bell EQ Frequency Response Visualizerを開く →

ソースコードをGitHubで見る ↗

ZIPでダウンロードする ↗

Node.jsや外部ライブラリは必要ありません。リポジトリのindex.html、biquad.js、visualizer.jsを同じフォルダーへ置き、index.htmlをChromeで開くと使えます。

Bell EQ coefficients

係数計算はRBJ Audio EQ Cookbookのpeaking EQをもとにしています。Center Frequencyをf₀、GainをG、Sample Rateをfₛとして、まず次の値を求めます。

A  = 10^(G / 40)
ω₀ = 2πf₀ / fₛ
α  = sin(ω₀) / (2Q)

分母の先頭が1になるよう、全係数をa₀で正規化します。JavaScriptでは、RNBOのbiquad.next()へ役割を対応づけやすいようにfeedforward0..2とfeedback1..2という名前で返しています。

const a0 = 1 + alpha / amplitude;

return {
  feedforward0: (1 + alpha * amplitude) / a0,
  feedforward1: (-2 * cosine) / a0,
  feedforward2: (1 - alpha * amplitude) / a0,
  feedback1: (-2 * cosine) / a0,
  feedback2: (1 - alpha / amplitude) / a0,
};

Frequency response

グラフ表示では、計算した係数を伝達関数へ代入し、単位円上のz = eʲωで振幅を評価します。各周波数の複素数としての分子と分母を実部・虚部に分け、振幅比をdBへ変換します。

magnitudeDb = 20 log₁₀ |H(eʲω)|

20 Hz〜20 kHzを対数スケールで500点サンプリングし、その結果をSVGのカーブとして描画しています。低域から高域まで、オクターブごとの見た目の幅を自然に保てるため、オーディオ用EQの確認に向いた表示になります。

Controls

  • Center Frequency — 20 Hz〜20 kHz。対数スケールで中心周波数を移動
  • Gain — -18 dB〜+18 dB。ブーストとカットの量を調整
  • Q / Bandwidth — 0.1〜10。山や谷の帯域幅を調整
  • Sample Rate — 48 kHz固定

Qを上げると中心周波数の周辺だけが狭く変化し、Qを下げると広い帯域へ緩やかに作用します。Gainを0 dBにすると、係数値は変化しても周波数応答はフラットになります。

Visualizer only

このツールは音声を再生・加工するEQプラグインではありません。Web Audio APIのBiquadFilterNodeやサンプル単位の差分方程式は使わず、グラフ表示に必要な係数計算と振幅評価だけを行います。

DSPを実装する前の係数確認、RNBOパッチと数値を照合するとき、Qと帯域幅の関係を説明するときに、すぐ開ける小さなリファレンスとして使えるようにしました。

NOTE 005← ノート一覧へ