标题:如何使用信号发生器产生自定义信号?
撰写:Jimmy
来源:https://blog.csdn.net/jimmyisme
关键词:信号设计,RF,矢量信号源,自定义,R&S® ,SMA100A
序言:在许多领域中,信号设计和产生是极为重要的,而通常设计信号的过程仅需要理论推导和信号仿真,而真实的实现一个自行设计信号的RF播发却对于一个通信系统来说是极好的检验,本文今天就来说一下如何利用R&S® Signal Generators产生你所梦寐以求的射频信号。
你应该准备好:
- R&S® SMA100A;
- Windows 7或以上操作系统;
- MATLAB 2017 安装完毕;
- MATLAB Instrument Control Toolbox安装完毕;
- National Instruments NI-VISA I/O接口软件安装完毕;
- RsMatlabToolkit开发包下载,并添加到Matlab 2017的目录中;
前序工作:
(1)在MATLAB 2017中已经设计好了信号,并通过仿真产生波形无误;
(2)用USB(或者网线,串口线)连接 矢量信号发生器 和 电脑;
打开MATLAB 2017中打开“APP“中的“Instrument Control”的图标
其中可见对应接口和属性,这里我们看到的“Configuration”是对应的连接参数。
在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”即可
得到结果了吗?快试试吧!