如何使用罗德与斯瓦茨公司Rohde & Schwarz® SMA100A的矢量信号发生器产生自定义信号?

本文介绍如何使用R&S®SMA100A矢量信号发生器产生自定义射频信号,包括所需软硬件配置及MATLAB编程步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


标题:如何使用信号发生器产生自定义信号?
撰写:Jimmy
来源:https://blog.csdn.net/jimmyisme
关键词:信号设计,RF,矢量信号源,自定义,R&S® ,SMA100A


序言:在许多领域中,信号设计和产生是极为重要的,而通常设计信号的过程仅需要理论推导和信号仿真,而真实的实现一个自行设计信号的RF播发却对于一个通信系统来说是极好的检验,本文今天就来说一下如何利用R&S® Signal Generators产生你所梦寐以求的射频信号。

你应该准备好


  1. R&S® SMA100A;
  2. Windows 7或以上操作系统;
  3. MATLAB 2017 安装完毕;
  4. MATLAB Instrument Control Toolbox安装完毕;
  5. National Instruments NI-VISA I/O接口软件安装完毕;
  6. RsMatlabToolkit开发包下载,并添加到Matlab 2017的目录中;
    RsMatlabToolkit下载,并添加到Matlab 2017的目录中

前序工作


(1)在MATLAB 2017中已经设计好了信号,并通过仿真产生波形无误;
(2)用USB(或者网线,串口线)连接 矢量信号发生器 和 电脑;


打开MATLAB 2017中打开“APP“中的“Instrument Control”的图标


其中可见对应接口和属性,这里我们看到的“Configuration”是对应的连接参数。
Matlab里虚拟设备控制


在RsMatlabToolkit下找到Example文件夹,在其下新建文件
例如:Create_IQ_BPSK.m
程序如下:


% 从NI设备中调用VISA接口,并采用USB连接 
  [status, InstrObject] = rs_connect( 'visa', 'ni', 'USB0::0x0AAD::0x005F::262456::0' );
% 如果接口监视参数错误,则报错
if( ~status )
    clear;
    disp( 'rs_connect() failed.' );
    return;
end

 InstrTargetPath = '/hdd/';                  % 文件写入地址 
 StartARB         = 1;                       % start in path A
 KeepLocalFile    = 0;                       % waveform only temporarily saved
 LocalFileName    = 'BPSK.wv';               % 文件写入名称

% *************************************************************************
% 创建信号
% *************************************************************************

% 设置信号参数
FmDev         = 0.5e6;                      % 频率偏差范围(-f/2 ... +f/2)
Fsample       = 50e6;                       % 采样频率50 MHz
Ttotal        = 1e-6;                       % 总共产生信号的时间1us

Tsample = 1/Fsample;                        % 采样周期
Points  = round( Ttotal / Tsample );        % 波形的采样点数
k = 0:1:Points-1;                           % point count 点数周期
dt = 0.01*Ttotal;                           % 时间分辨率

am = ones( 1, Points );                     % 幅度
fm = -FmDev/2:FmDev/(Points-1):+FmDev/2;    % 时频

% 时频转化时相
phase = 2.0 * pi;  

t = (k-1)*Tsample;                          % 时间

I_data = ones(size(t)).*and(t>=0,t<=Ttotal-dt).*am.*cos(phase);
Q_data = ones(size(t)).*and(t>=0,t<=Ttotal-dt).*am.*sin(phase);

% *************************************************************************
% 设置波形结构
% *************************************************************************

IQInfo.I_data         = I_data;
IQInfo.Q_data         = Q_data;
IQInfo.comment        = 'BPSK1';            % 注释,选填
IQInfo.copyright      = 'Jimmytime';        % 版权,选填
IQInfo.clock          = Fsample;            % 时钟采样率
IQInfo.no_scaling     = 1;                  % 不缩放
IQInfo.path           = InstrTargetPath;    % 设备上的文件存储地址 
IQInfo.filename       = LocalFileName;      % 电脑和移动设备存储的文件名称
IQInfo.markerlist.one = [[0 1];[1 0]];      % 标识1
IQInfo.markerlist.two = [[0 1];[Points/2 0]];

% *************************************************************************
% 在matlab上画图.
% *************************************************************************
rs_visualize( Fsample, IQInfo.I_data, IQInfo.Q_data );
% *************************************************************************
% 设备安装
% *************************************************************************

% 检查R&S设备,稍后...
disp( 'Checking instrument...' );
[status, InstrIDN] = rs_send_query( InstrObject, '*IDN?' );
if( ~status ); clear;  return; end
if( isempty( strfind( InstrIDN, 'Rohde&Schwarz' ) ) )
    disp('This is not a Rohde&Schwarz device.');
    clear; return;
end

% 重新设置仪器
[status, OPCResponse] = rs_send_query( InstrObject, '*RST; *OPC?' );
if( ~status ); clear;  return; end
[status] = rs_send_command( InstrObject, '*CLS' );
if( ~status ); clear;  return; end

% 产生并发送波形
[status] = rs_generate_wave( InstrObject, IQInfo, StartARB, KeepLocalFile );
if( ~status ); clear;  return; end

% 若不是简单基带信号源,则应用RF设置
if( isempty( strfind( InstrIDN, 'AFQ' ) ) && isempty( strfind( InstrIDN, 'AMU' ) ) )

    disp( 'Setting up RF...' );

    % 射频信号设置
    % 设置中心频点
    [status, Result] = rs_send_query( InstrObject, 'FREQ 1.585 GHz; *OPC?' );
    if( ~status ); clear;  return; end

    % 设置功率水平
    [status, Result] = rs_send_query( InstrObject, 'POW -50.0 dBm; *OPC?' );
    if( ~status ); clear;  return; end

    % 选择输出开
    [status, Result] = rs_send_query( InstrObject, 'OUTP:STAT ON; *OPC?' );
    if( ~status ); clear;  return; end

end

% 读取仪器的错误队列 
status = rs_check_instrument_errors( InstrObject );
if( ~status ); clear;  return; end

% 删除仪器对象
delete( InstrObject );

% 清除变量
clear;

return;

在矢量信号发生器中“MEAU”下“ARB”中选择“load waveform”,在弹出的窗口中选择“BPSK.wv”,保持“MODE ON”和“RF ON”即可

得到结果了吗?快试试吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是吉米

对您的欣赏,我感到非常欣慰

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值