FPGA 版 FM 音源 (83) -- TX7 (OPS) 測定 (10)

オペレータ出力周り、サイン波テーブルの仕様について調べています。
結論から言うと、サイン波テーブルは 1 周期 4096 エントリ、減衰量として格納されている 2 を底とする対数のフォーマットは整数部 4 ビット、小数部 10 ビットのようです。
1 周期 4096 エントリなので、1 周期が 8192 サンプル (以上) になるピッチ周波数を選べば、テーブルの全てのエントリに渡って「抜け」がなく、その出力値が 2 個あるいは 3 個以上繰り返して出力されるようにできます。
オリジナルの源発振周波数 9.4265 MHz に対しては、
9.4265 [MHz] / (192 × 8192) = 5.993 [Hz]
となります。
「楽音」としてのピッチでは、MIDI ノート・ナンバー 6 の F# の音 (11.562 Hz) の 1 オクターブ下の 5.781 Hz が条件を満たします。
MIDI ノート・ナンバーの表現範囲外なので、音色パラメタのオペレータ周波数設定の「Freq Coarse」で「0」を選んで、「0.5 倍」の設定にする必要があります。
パラメタの「トランスポーズ」の設定で 1 オクターブ下げる方法は、正常な発振周波数を外れるようでうまく行きません。
そうやってキャプチャしたサイン波形のゼロクロス点付近のグラフを下に示します。

緑色の細いトレースは波形編集ソフトが補間して描画したもので、サンプル値そのものは緑色のドットで表現されています。
ほとんどのドットは 2 個ずつ同じ値のものが並んでいますが、少しだけ 3 ドット同一値のものが混ざっています。
オーディオ出力は「フローティング DAC」を介しているので、内部でのリニア数値表現を直接知ることはできませんが、ゼロクロス付近のステップ・サイズを「1」とした場合、DAC で表現可能な値は +16374 〜 -16384 となるので、内部のリニア値の表現は符号ビットを含めて 15 ビット幅の 2 の補数表現であろうと推察できます。
プログラムのバラメタを変えながらシミュレーションした値と実測値との誤差の絶対値の累積値を記録することを繰り返し、最も累積誤差が小さくなるパラメタ値を求めた結果、

  • 2 を底とする対数の小数部は 10 ビット幅
  • 対数 → リニア値の変換テーブルに格納する値は「切り捨て」ではなく「丸め」を行う

の場合に最も良く一致しました。
DAC/ADC で言えば「積分直線性誤差」に相当する誤差のグラフを下に示します。

出力値 3000 〜 4000 付近は誤差ゼロが続いていて、良く一致しています。
出力値 5000 〜 6600 付近は他と比べて誤差が大きくなっています。
その原因は不明です。