MATLABを使用して、変調された任意波形を生成する
2021年4月19日
任意波形発生器は、検出器や通信機器などの被測定機器に特定の刺激信号を出力するために使用されます。
このアプリケーションノートでは、Moku:Goの任意波形発生器とMATLABを使用して、パルスおよびバースト変調付きの2つの任意波形を発生させる方法を紹介します。
Moku:Go 任意波形発生器
検出器や通信機器では、一般的な正弦波や方形波ではなく、任意性の高い信号が使って機能することが一般的です。そのため、このようなデバイスの特性評価には、被測定デバイスの特定の信号をシミュレートするために、ユーザー定義の波形を出力できる任意波形発生器(AWG)が必要です。この波形は、数式に基づいたものか、あらかじめ記録されたデータから作成することができます。例えば、地震検知器のテストでは、あらかじめ記録された地震信号を発生させ、検知器の反応を分析し、それに応じて検知器の設計を改良することができます。
Moku:Goの任意波形発生器は、最大65,536ポイントのカスタム波形を、最大125MSa/sのサンプリングレートで発生させることができます。波形は、ファイルから読み込んだり、最大32分割のピースワイズ数学関数として入力することで、真に任意の波形を生成することができます。
Moku:GoのAWGは、ユーザー定義の波形を生成する機能以外に、パルスとバーストの2つの変調モードを備えています。パルス変調は、もっと遅い速度で信号を繰り返し、サイクル間で設定された電圧を保持することができます。パルスモードは、信号を発射して戻ってきた信号を測定するレーダー探知機のように、低いデューティーサイクルの繰り返し事象をシミュレートするために使用されます。バーストモードは、トリガー条件を満たされると出力します。微粒子計のインパルス応答やデジタル通信機器の応答などがこれにあたります。従って、信号の変調により、AWGはより幅広い用途に使用できるようになりました。
本ノートでは、MATLAB用のMokuアプリケーションのプログラミングインターフェース(API)を利用して、Moku:Goから2種類の波形を生成し、Windows Moku:Go Appを使用して別のMoku:Goで出力信号を計測します。ここでは、テキストファイルから信号を読み込む方法と、数式を元に信号を生成する方法を実演します。そして、それぞれの信号に対して、パルス変調とバースト変調を施します。
サンプル スクリプトを実行する前に「 Moku-MATLAB Toolbox 」がインストールされていることを確認してください。
カスタム波形の生成
ここでは、Moku:GoのAWGを使って、2つの波形を生成してみます。図1に示すように、矩形波とチャープ信号の2つの波形があります。矩形波は1000要素の配列で、付属のテキストファイルsq_wave.txtから読み込まれます。これは、ファイルからカスタム波形を読み込むデモのためだけでなく、WindowsやMac Appでも同じファイルを使用できるため、Moku:Go AWGで使用できる波形定義ファイルの例を示すためのものです。2つ目の波形も1000要素の配列で、以下の式で生成されます。
ここで、 t は 0~1 までの等間隔の 1000 個の要素からなる配列である。Moku:Go AWGは、ルックアップテーブルを作成するために電圧値のみを必要とし、tはy値の計算と図1のプロットの生成にのみ使用されます。
ルックアップテーブルに任意波形を読み込んだら、Moku:Goにデプロイして信号生成を開始できます。Moku:Goへの接続は、AWG_appnote.mの30行目にある以下のMATLABコマンドを使用して、そのIPアドレス経由で確立されます。
m = MokuArbitraryWaveformGenerator(ip, true);
機器に接続するには、お持ちのMoku:GoのIPアドレスで「ip」を置き換えてください。その後、出力波形は「generate_waveform」コマンドで設定します。これには、チャンネル、サンプルレート、ルックアップテーブルデータ、周波数、振幅の5つの必要パラメータをこの順で入力します。例えば、出力チャンネル1は次の39列に設定されています:
m.generate_waveform(1, "Auto", square_wave, 1e3, 1);
つまり、チャンネル1は、「square_wave」ルックアップテーブルを使用して自動的に割り当てられたサンプルレートの信号を生成することになります。この信号は、周波数が1kHz、振幅が 1 Vpp になります。
AWGからの出力信号が図1の波形と一致することを確認するために、Windowsアプリのインターフェースを用いてオシロスコープ測定器を動作させた別のMoku:Goをセットアップしました。図2では、上のMoku:Goはオシロスコープ測定器を、下のMoku:GoはAWG測定器を稼働しています。AWGを稼働するMoku:Goの出力は、オシロスコープを動かすMoku:Goの入力に接続されています。
図1の波形と一致している、取り込んだ信号を図3に示します。オシロスコープのチャンネル1は、予想通り1kHzの周波数を計測します(実際の計測は998.4Hz)。これはカーソルでも確認でき、矩形波の1サイクルの周期は1msです。両方のチャンネルの増幅は、予想通り1 VPPを測定(実際の測定はチャンネル1が0.9998 V、チャンネル2が1.009 V)。
パルス変調
パルス変調モードでは,任意波形の各繰り返し間に最大218 = 262144サイクルのデッドタイムを持つ出力波形を設定することが可能です。この例では、パルス変調を用いて矩形波信号に2つのデッドサイクルを導入します。パルス変調は、サンプルスクリプトのパルス変調セクションの51行目をアンコメント化することでオンにすることができます。変調特性は次のように設定されます。
m.pulse_modulate(1,'dead_cycles',2,'dead_voltage',0);
最初のパラメータはパルス変調を適用するチャンネル,信号の各サイクルの間に2サイクルのデッドタイム,デッドタイム中の電圧は0Vです。
また、図4のオシロスコープで波形を確認しています。
バースト変調
バーストモードでは、出力波形は他の信号源からトリガーされることができます。トリガー条件が満たされると、設定されたバースト条件で信号が発生します。Moku:Goには、2つのタイプのバーストモードがあります。NCycleはトリガー時に設定したサイクル数の波形を生成し、Startはトリガー時に波形の出力を開始します。
この例では、波形発生器内蔵のオシロスコープMoku:Go(トップユニット)を使って、矩形波(1 VPP 200 Hz)を発生させます。この矩形波は、バーストモジュレーションのトリガー信号としてAWG Moku:Go(下段)のInput 1に入力されます。
バースト変調は、サンプルスクリプトの58行目をアンコメント化することで有効にできます。この変調は以下のように構成されます。
m.burst_modulate(2, 'Input1', 'NCycle','burst_cycles',2,'trigger_level',0.1);
出力チャンネル2は入力1によってトリガーされ、トリガーされると2サイクルのチャープ信号を発生します。トリガー条件は,出力1の信号が0.1Vを越えて立ち上がりエッジになったときです。トリガーレベルは0.1Vを選択し、矩形波の鋭い立ち上がりエッジで明確なトリガを生成します。
図6は、オシロスコープで捉えた信号で、チャンネル1はトリガー信号を表示するように設定されています。矩形波1サイクルにつき2サイクルのチャープ波形がAWGから生成されていることがわかります。
まとめ
このアプリケーションノートでは、Moku:Goの任意波形発生器でMATLABを使用して柔軟に波形を定義できることを示しました。
波形が数式で定義されていても、ファイルから読み込まれていても、同じMATLABスクリプトで波形をMoku:Goにシームレスにダウンロードし、計測器を構成できます。