FAQs from Rohde & Schwarz

スペクトラム・アナライザ・モードでのMatlabを使用したトレースの捕捉

質問

次のMatlabスクリプトは、FSV3030 R&Sスペクトラム・アナライザからMatlabワークスペースにトレースデータを移動する方法に関する簡単なリファレンスです。

概念実証のための例として、1 GHz、-30 dbmの単純な非変調CW信号を使用しています。

回答

+++コード+++

% 前提条件:
% - 最新のR&S VISAインストール済み
clc;
analyzer_handle = visa('rs','TCPIP::10.205.0.101::INSTR'); %VISA接続、ツールボックスが必要
analyzer_handle.OutputBufferSize = 1000000; %出力バッファーのサイズ(バイト単位)
analyzer_handle.InputBufferSize = 1000000; %入力バッファーのサイズ(バイト単位)
fopen(analyzer_handle);

fprintf(analyzer_handle,'*RST;*WAI');
fprintf(analyzer_handle,'*IDN?');
a=fscanf(analyzer_handle);
disp(a);

fprintf(analyzer_handle,'INIT:CONT OFF'); %シングル掃引モードを選択。

%--------------周波数/スパンの設定-------------
fcenter=1000000000;
fprintf(analyzer_handle,'FREQ:CENT %d',fcenter); %中心周波数を定義
fspan=5000000;
fprintf(analyzer_handle,'FREQ:SPAN %d',fspan); %スパンを設定

%--------------掃引の設定--------------------------
fprintf(analyzer_handle,'SENS:SWE:COUN 1'); %1回の掃引を定義
points=10000; %ポイント数、トレースの分解能を設定
fprintf(analyzer_handle, 'SENS:SWE:POIN %d',points);

%--------------帯域幅の設定----------------------
fprintf(analyzer_handle,'BAND:AUTO OFF');
fprintf(analyzer_handle,'BAND 100000'); %RBWを定義
fprintf(analyzer_handle,'BAND:VID 500kHz'); %VBWとRBWの結合を解除し、VBWを減らしてトレースをスムーズ化。

%--------------トレース収集-----------------------------
timeout=30; %タイムアウト(秒単位)
set(analyzer_handle,'Timeout',timeout); %同期エラーを避けるため収集前にタイムアウトを延長
fprintf(analyzer_handle,'INIT:IMM;*WAI');
fprintf('Fetching waveform ...\n ');
fprintf(analyzer_handle,':FORM REAL,32');
fprintf(analyzer_handle,':TRAC? TRACE1;*WAI');
data=binblockread(analyzer_handle,'float32');
fread(analyzer_handle,1); %freadによりバッファー内の余分のターミネータを削除
timeout=1; %タイムアウト(秒単位)を通常の値に戻す
set(analyzer_handle,'Timeout',timeout);

%--------------トレースのプロットへの表示---------
fstart=fcenter-fspan/2;
fstop=fcenter+fspan/2;
resolution=fspan/points;
points_array=1:1:points;

for c = 1:points %時間軸とパワーデータのスケール設定

points_array(1,c)=points_array(1,c)*resolution;
points_array(1,c)=points_array(1,c) + fstart;

end

plot(points_array,data);
title('SA Spectrum Acquisition')
xlabel('frequency domain [Hz]')
ylabel('power [dbm]')

%--------------エラーチェック----------------------
fprintf(analyzer_handle,'SYST:ERR?');
a=fscanf(analyzer_handle);
disp(a);

fclose(analyzer_handle);

+++

上記のスクリプトがMatlabで実行された後にスペクトラム・アナライザで観察されるトレースを以下に示します。

スペクトラム・アナライザ・モードでのMatlabを使用したトレースの捕捉

トレースデータを表すコードの出力を概念実証として示します。

スペクトラム・アナライザ・モードでのMatlabを使用したトレースの捕捉
スペクトラム・アナライザ・モードでのMatlabを使用したトレースの捕捉

これに加えて、R&S Visa Testerを使用することで、データポイントの収集プロセスを詳細に調整できます。このケースでは10000ポイントが収集され、それぞれに4バイトの浮動小数点値が与えられています。このため、ログでは捕捉の先頭に40000バイトと記述されており、収集バッファーはそれに合わせて設定されます。

参考資料:

-FSV3030の製品ページ
https://www.rohde-schwarz.com/de/produkt/fsv3000-produkt-startseite_63493-601503.html

-スペクトラム/ネットワーク・アナライザのリモート制御に関するヒントとテクニック - アプリケーションノート1EF62_1E
https://www.rohde-schwarz.com/applications/hints-and-tricks-for-remote-control-of-spectrum-and-network-analyzers-application-note_56280-15635.html

-リモート制御/測定器ドライバー
https://www.rohde-schwarz.com/driver-pages/remote-control/drivers-remote-control_110753.html