OPMを知る ― VOPMの測定

目次

戻る

FM合成の計算式

YM2608 (OPNA) アプリケーションマニュアルや各種解説資料では、2つのオペレータを直列接続した際の出力波形について概ね下記の計算式が記載されています。

F(t) = A(t) * sin(wc*t + I(t)sin(wm*t))

A(t)は出力波形の振幅すなわち音量となるため、エンベロープの設定の他、ミキサーのフェードを上げ下げするような後段の操作でも制御可能であることが分かります。
I(t)は変調度と記載されていますが、FM合成ロジックの中で音色を決定づける重要な要素にも関わらず、モジュレータの音量に関するパラメータTLやDL1に対し取り得る値などの性質が示されていません。
wcとwmはそれぞれキャリアーとモジュレーターの角周波数であり、ノート番号やピッチベンドなどによって決まる基本となる周波数と、周波数倍率を求めるパラメータMUL、デチューンにより求められます。

YM2151の資料ではwcをNc+Dc (ノート番号に伴う周波数+デチューン) と表していたり見た目わかりづらい印象があったためYM2608資料の式を採用しました。記号の違いはあっても、式の意味は変わりません。

TL: キャリアーの最大音量、またはモジュールとしての変調度

計算式の変調度I(t)が取り得る最大値として、モジュレーターのパラメータTLが出力波形に与える影響を探ります。
まずVOPMで2つのオペレータM2とC2が直列に繋がるアルゴリズムを選択してM2の音量TLを変化させた様子を計測します。M1とC1は無効にします。M2とC2は同じ110Hz (ノートA0) を出力し、エンベロープによる音量変化がないようにします。VOPMのパラメータはこちら
音色の変化を捉えるため、第1 (基音)、第2、第3倍音それぞれの音量を記録します。


図1: wavespectraで倍音スペクトルを表示している様子。(TL=16)

f1=110Hz、f2=220Hz、f3=330Hzにおける音量を計測します。当初wavespectraに表示された値を3倍音分*127段階ずつ転記していましたが、ミスが多く非効率なのでMAX for Live で測定結果をテキストで記録できるようにしました。
計測用のパッチ (pfft~で呼ばれるサブパッチ) はこんな感じです。窓にはBlackman、オーバーラップ数4を指定し、wavespectraの計測と一致することを確認済みです。以下は計測結果の一部です。

TLf1f2f3
127-0.16n/an/a
81-0.16n/an/a
80-0.16-38.64n/a
72-0.17-32.62-73.00
64-0.19-26.61-59.69
56-0.29-20.61-47.32
48-0.67-14.67-35.31
40-2.33-8.99-23.68
32-13.21-4.35-13.41
24-2.21-4.60-10.37
16-6.04-15.16-5.24
8-9.55-25.18-8.60
0-12.85-34.90-12.46
表1: モジュレータのTLと倍音成分変化の抜粋。全ての結果はこちら


図2: TL=80から0までの測定結果をGoogleスプレッドシートでグラフ化したところ。

TLが127から81の場合は倍音が発生しません。TLが80から73までの区間など、TLが変わってもモジュレータの出力が変わっていないと思われる区間があります。(グラフで階段状になっている箇所) これらの区間はキャリアーの音量としてTLを変えていった場合でも変化がありませんでした。実際のチップも同じ動作かは定かでありません。
TL=54から0にかけては値が1変わるごとに相応の変化が見られます。
また、TLが80から30辺りまでは倍音成分が連続して増加していますが、TL=25以降は基音がより減衰して第2、第3倍音の音量が大きくなったり、整数倍以外の倍音成分が現れ始め発振した様な状態になります。 キャリアーとモジュレータの周波数比が高くなるにつれて、モジュレーターのTLが大きくても (出力が小さくても) より発振しやすくなっていきます。

ここからMAXによる再現比較によりTLに対する変調度を求めていきます。本当は波形の計算式をベッセル級数に変換してTLに対するモジュレータの出力値を解きたかったのですが、頓挫しました。


図3: 2オペレータ直列のFM合成を模したMAXパッチ

変調度はsin関数の位相に係る変数であることから最大値が2PIになると予想したところ、TL=80の場合とモジュレーターの出力 (図3中のlevel) が4PI - 54.25dBの場合とほぼ一致することが分かりました。
YM2151アプリケーションマニュアルにはTLは0.75dB刻みであることが明記されているため、モジュレータの出力の最大値は4PI * (-0.75 * TL + 5.75)dB で求められます。

VOPMMAX for Live
TLf1f2f3level
(dB)
f1f2f3
80-0.16-38.64n/a-54.25-0.08-38.60-83.28
72-0.17-32.62-73.00-48.25-0.08-32.60-71.29
64-0.19-26.61-59.69-42.25-0.11-26.60-59.30
56-0.29-20.61-47.32-36.25-0.20-20.62-47.32
48-0.67-14.67-35.31-30.25-0.57-14.70-35.43
40-2.33-8.99-23.68-24.25-2.16-9.03-23.83
32-13.21-4.35-13.41-18.25-12.13-4.35-13.52
24-2.21-4.60-10.37-12.25-2.37-4.26-9.93
16-6.04-15.16-5.24-6.25-7.08-15.56-5.05
8-9.55-25.18-8.60-0.25-13.26-27.97-10.25
0-12.85-34.90-12.465.75-35.84-52.61-23.95
表2: モジュレータのlevelと倍音成分変化の抜粋をVOPMの結果と比較。MAX側の全ての結果はこちら


MAXでの測定結果をグラフ化したところ。

~つづく~

戻る