FAQs from Rohde & Schwarz

使用 Matlab 在频谱分析仪模式下捕获迹线

问题

以下 Matlab 脚本简单展示了如何将迹线数据从 R&S®FSV3030 频谱分析仪移至 Matlab 工作区。

为验证可行性,本文以 1 GHz、-30 dBm 的简单非调制连续波信号为例。

回答

+++代码+++

% 前提:
% - 已安装最新版 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'); % 定义分辨率带宽
fprintf(analyzer_handle,'BAND:VID 500kHz'); % 将视频带宽从分辨率带宽解耦,并降低视频带宽以使迹线平滑。

%--------------迹线采集-----------------------------
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 测试仪详细修改数据点的采集流程。本例中共采集 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