OTA/VCA/PGA を使用した 2 次特性 VCF (11)

JRC 製の普及型電子ボリューム NJW1159 の特性を測定してみました。
公称 1 dB ステップで減衰量を 0 〜 95 dB まで可変できる抵抗ラダーが 2 系統あって、バッファ・アンプも内蔵しています。
この公称 1 dB ステップが
  20 × log10(2 ^ (1/6)) = (20/6) × log10(2) = 1.0034 dB
であれば、1 全音 (2 半音) に相当するステップとなり、VCF の可変ゲイン・ブロックとして利用した場合に 1 全音ステップでカットオフ周波数を設定できることになります。
全可変範囲 0 〜 95 dB に対応できる測定機器もなく、100 dB 近いダイナミック・レンジの測定回路を作成する能力もないので、カットオフ周波数 20 Hz 〜 20 kHz に対応する 1000 倍 = 60 dB = 約 10 オクターブの範囲だけを測定することにしました。
測定回路のブロック・ダイアグラムを下に示します。

AC 結合で使う一般的な用途とは違って、状態変数型 VCF の可変ゲイン・ブロックとして電子ボリュームを使う場合には、DC 成分が通らないと負帰還ループを安定して動作させることができません。 そのため、直流が通ることが大前提であり、ゲイン/減衰量の測定も DC で行なうことができます。
PSoC5LP では内蔵の 16 ビット分解能のデルタ・シグマ ADC を利用して DC 測定をすることができますが、NJW1159 は正負両電源を必要とし、 5 V 単電源の Prototyping Kit とのインターフェースが面倒になります。
そこで、測定は一定レベルの単一正弦波を入力し、減衰量を変えながら電子ボリューム出力を PC のオーディオ・インターフェースで「録音」して wave ファイルを作成し、FFT で処理して求めることにしました。 PC 上の WaveGene でサイン波を生成しており、「FFT 用に最適化」の設定を行なっています。
周波数については、通常は 1 kHz を使うことが多いですが、1 kHz 近辺には USB の 1 ms フレームに起因するノイズが存在するので、それを避けて、電源ハムの 50 Hz の高調波成分も少なくなった 500 Hz 程度の周波数に設定しています。 16384 ポイント「FFT 用に最適化」しているので、正確な周波数は 48 [kHz] × 171 / 16384 = 500.98 [Hz] です。
内蔵バッファ・アンプを使用しているので、サイン波のレベルが大きすぎると高調波ひずみを生じます。 歪率のスペックでは、入力レベルを 0 dBV (1 Vrms = 2.82 Vp-p) に規定しているので、この測定でもそれに準じたレベルに設定しています。
減衰量の設定は、サイン波発生とは非同期に Arduino (互換ボード) で 3 線式の制御信号を発生させています。 16384 ポイントの FFT 8 回分のデータ量に相当する、約 2.7 秒ごとに 1 dB ずつ減衰量を増やしていきます。
測定回路は Arduino に装着したブレッドボード・シールド上に組んでいます。
録音された wave データの処理としては、常に 16384 ポイントの FFT を繰り返しておき、前回の FFT 結果の 500 Hz 基本波レベルとのレベル差が 0.5 dB 以上生じた場合に減衰量の切り替えがあったと判断しています。
測定結果のグラフを下に示します。

左右チャネル間の「ギャング・エラー」は 0.1 dB 程度です。
公称 1 dB ステップを 1.0034 dB ステップと見なしてプロットしてありますが、グラフは右下がりとなっていて、ステップ幅がそれよりも大きいことを示しています。
手持ちの 3 つの個体について測定した結果を示します。

50 dB 程度以上の減衰量の部分を除き、それぞれの差は 0.2 dB 程度であり、全体的な傾向は一致しています。
No. 1 の個体の L チャネルの「右下がり」のグラフから回帰直線を求めると、公称 1 dB ステップ = 1.0231 dB ステップとなり、回帰直線にフィッティング後の残差のグラフは下のようになります。

フィッティングした L チャネルについて見れば、±0.13 dB 程度の誤差におさまっていることが分かります。