何をお探しですか?
周波数変調を使った音楽演奏
音符にはそれぞれ異なる周波数が対応しています。特定の曲を演奏するには、さまざまな周波数を特定の順序と時間だけ生成する必要があります。正弦波を任意波形で変調することにより、音楽を作成することができます。任意波形の垂直軸値を変化させることにより、異なる周波数を発生できます。また波形のポイント数(水平軸)を変化させることにより、音符の持続時間を制御できます。
音符をシミュレートするには、Keysight 33220Aでトーン(搬送波)を作成し、任意波形機能をFM信号として使って搬送波の周波数を変調します。音符から周波数への変換のための一覧テーブルを作成し、Microsoft Excelのインタラクティブなスプレッドシートに記録することにより、音符を作成できます。
ファンクション・ジェネレータを使って再生できる曲を選びます。ここでは、バッハのト長調のメヌエットの主題を例として使います。これは500秒(33220Aの最小変調レート)以内の曲なので、33220Aに適しています。選ぶ曲はこの長さを超えないようにする必要があります。できれば100秒以内のものがよいでしょう。自分で曲を選んで変換する場合は、音符の読み方を知っている必要があります。
手順:
ステップ1: 音符を技術的用語で定義します。初めに、音符の値をファンクション・ジェネレータが解釈できるように周波数と持続時間のペアに変換する必要があります。このページの最後に用意されたファイルに、各音符の周波数値を示すテーブルが収録されています。

また、このページの最後にはバッハのメヌエット(bach.xls)のスプレッドシート(図1参照)と作成済みのテンプレート(template.xls)も用意されています。テンプレートは使用しなくてもかまいませんが、多くの作業が自動化されているので時間を節約できます。
スプレッドシートを作成するには、メロディの各音符の値とオクターブ、および対応する周波数を入力します。テンプレートを使用していれば、対応する周波数はMicrosoft ExcelのVLOOKUP関数を使って自動的に割り当てられます。
持続時間の値を計算するには、音楽のテンポを決め(通常は曲の先頭に記載されています)、各音符の拍数を時間に変換します。バッハのメヌエットの場合、テンポは1分間に110拍で、1拍は4分の1音符です。これを秒に変換するには、各音符の拍数に0.545秒/拍(60秒/110拍)を掛けます。テンポが違えば秒/拍の値も異なります。各音符の持続時間をスプレッドシートに記録します。
拍数と持続時間列の秒数の合計を計算します。この値は後で必要になります。
ステップ2: 変調パラメータを決定します。次に、周波数と持続時間の値を周波数変調パラメータに変換します。まず、中心(搬送波)周波数を選択します。このためには、音符の最大周波数と最小周波数を求めます。バッハのメヌエットの場合、最小周波数は293.7 Hz(D5)、最大周波数は987.8 Hz(B6)です。
搬送波周波数は、曲の周波数レンジの中心、すなわち最小周波数と最大周波数の和を2で割った値に設定します。
搬送波周波数
= (最小周波数 + 最大周波数)/2
= (293.7 Hz + 987.8 Hz)/2
= 640.75 Hz
偏移は、搬送波周波数と曲の最大/最小周波数との差です。
偏移
= 最大周波数 - 搬送波周波数
= 987.8 Hz - 640.75 Hz
= 347.05 Hz
変調周波数は、曲の繰り返し周波数、すなわち曲を1回演奏するのにかかる時間の逆数です。
変調周波数
= 1/曲の持続時間
= 1/52.364秒
= 19 mHz
これらの値を使って、曲を正しく出力するように機器設定を変更します。
ステップ3: 任意波形を定義します。任意波形を作成するには、ステップ1で定義した周波数を任意波形の値に変換し、拍数をポイント数に変換します。
各音符を再生するのに必要なポイント数を求めるには、波形の長さを曲の全拍数で割ります。この例では、波形の長さが4096ポイントであると仮定します(機器のメモリに記憶できるポイント数は最大65,536ですが、この例では計算時間を節約するために4Kしか使いません)。バッハのメヌエットの拍数は96です。
1拍あたりのポイント数
= 4096ポイント/96拍
= 42.7ポイント/拍
= 42ポイント/拍(丸めによって波形メモリを超えないように最も近い整数に切り捨て)

この結果を各音符の拍数に掛けることにより、対応するポイント数を求め、結果をスプレッドシートに記録します。
任意波形の垂直軸値を変化させることにより、曲の中のさまざまな音が作成されます。曲の最も高い音(最大周波数)が任意波形の縦軸値+1に対応し、最小周波数が-1に対応します。その他のすべての音はその間で比例配分されます。下の式を使って、音符の周波数を任意波形レベル(任意波形値)に変換できます。
任意波形レベル
= (音符の周波数 - 搬送波周波数)/偏移
= (587.3 Hz - 640.75 Hz)/ 347.05 Hz
= -0.15401
各音符の値をスプレッドシートに記録します。
すべての音符の再生に必要な任意波形値とポイント数が求められたら、任意波形の作成に十分な情報が準備されたことになります。
図2で見たように、DC(水平)のライン・セグメントが各音符を表します。各ライン・セグメントの長さ(ポイント数)は各音符の持続時間で決まり、垂直軸上の位置(任意波形値)は音符の周波数で決まります。
ステップ4: 波形をフォーマットします(波形レコードを作成します)。任意波形値を33220Aにダウンロードする前に、ファンクション・ジェネレータが理解できるように、連続した文字列にフォーマットする必要があります。スプレッドシートには、各音符の任意波形値と繰り返しの回数が記録されています。これよりそれぞれの値を必要な回数だけ実際に繰り返したレコードを作成する必要があります。
波形のフォーマットは、手動(各音符の任意波形値をコピーして必要な回数だけスプレッドシートに貼り付ける)でも実行できます。しかし、テンプレートを使用している場合は、Visual Basicスクリプトを使ってポイントのコピーと貼り付けを自動で行うことができます。"Create Waveform Record"ボタンを押してください。データがフォーマットされ、スプレッドシートの"Arb file"ページに記録されます。
ステップ5: Keysight 33220Aに波形をダウンロードします。これで任意波形を33220Aにダウンロードする準備ができました。このために簡単なプログラムを作成することも、用意されたスプレッドシートからVISACOMを利用することもできます。
まず、LAN、USB、GPIBのいずれかで33220Aをコンピュータに接続します(接続が初めての場合、あるいは不明な点がある場合は、「USB/LAN/GPIBインタフェース接続ガイド」または「33220Aユーザーズ・ガイド」を参照してください)。
スプレッドシートを使用する場合、"Set instrument address"ボタンをクリックし、機器のアドレスを入力します。次に、"Send to instrument"ボタンをクリックします。"Arb file"ページの波形レコードが自動的に機器に送信されます。
プログラムを作成する場合、浮動小数点の任意波形値に対してはDATA VOLATILEコマンド、2進整数の任意波形値に対してはDATA:DAC VOLATILEを使用します。
DATA VOLATILE, <value>, <value>, <value>, <value>, <value>, . . .
または
DATA:DAC VOLATILE, {<binary block>|<value>, <value>, <value>, <value>, . . . }
33220Aのプログラミングの詳細については、 「33220Aユーザーズ・ガイド」英語版を参照してください。(英文PDF 4.58MB)
ステップ6: 音楽を演奏します。33220Aの出力にスピーカを接続し、ステップ2で計算した周波数変調パラメータ値を設定します。振幅を調整して音量を設定し、演奏される曲を聴いてみてください。
この手順はKeysight 33250A 80 MHzファンクション/任意波形発生器でも全く同様に使用できます。
まとめ
任意波形を作成して変調波形として使用することで、ファンクション・ジェネレータで音楽を演奏することができます。任意波形の垂直軸の値を変化させることでさまざまな周波数を作り出し、波形の水平軸のポイント数を変化させることで音符の長さを制御することができます。