FPGA 版 FM 音源 (14) -- YMF262 測定 (6)

Rof = 1、2、3 の場合のエンベロープ出力波形は「レート・マルチプライア」(rate multiplier) を使って実現できることが分かりました。
C プログラムで同様の出力を再現できました。
DR / RR = 1、Rof = 1 の場合のエンベロープ波形をキャプチャし、波形編集ソフトで表示したものを下に示します。

黄色い点線の左側がアタック、右側はディケイ/リリースの領域です。
エンベロープは「階段」状となっていますが、その水平方向のステップ幅に「長」、「短」の 2 種があることが分かります。
その幅は正確に 2:1 の比率となっていて、

... 短、短、長、長、長、 ...

の順で繰り返しています。
次は、Rof = 2 の場合です。

今度は、水平方向のステップ幅が、

... 短、短、長、短、短、長、 ...

の順で繰り返しています。
次は、Rof = 3 の場合です。

今度は、水平方向のステップ幅が、

... 短、短、長、短、短、短、短、 ...

の順で繰り返しています。
次は、DR / RR = 11、Rof = 1 でのキャプチャ結果と、以前のアキュムレータに累算していく方式によるプログラムの結果をプロットしたものです。

赤い線とシンボルが YMF262 出力で、青い線とシンボルがプログラム出力です。
RR = 11、Rof = 1 では、水平方向 16 サンプルで、垂直方向が 5 ステップ減少します。
YMF262 出力では、各ステップ幅が

... 4, 4, 4, 2, 2, ...

の繰り返しで、アキュムレータ方式の出力では、

... 3, 3, 3, 3, 4, ...

の繰り返しになっています。
理論的に、水平方向のステップ幅を均等に割り振ると、

   16/5 = 3.2 [サンプル]

となりますが、実際には小数サンプル幅は実現不可能ですから、3 サンプル幅、4 サンプル幅の組み合わせで実現することになります。
アキュムレータによる方式では、この、できる限り均等に割り振る形となっています。
一方、YMF262 の出力は、いわば、「標準速」クロックと、「倍速」クロックを切り換えるようなイメージでステップ幅を 2:1 の比率で変化させています。
このようなクロックの配分には、「レート・マルチプライア」(rate multiplier) を使うことができます。
「マルチプライア」と言うと、入力したクロックの数が増えて出力されるように感じますが、実際には、入力クロックを「間引いて」、0 以上、1.0 未満の倍率を実現するものです。

レート・マルチプライアを使ったディケイ/リリース回路の構成は次のようになります。

詳しくは次回以降に説明します。