Instruments in MATLAB
Instruments in MATLAB
Instruments in MATLAB
Application Note
Products:
|
Juergen Engelbrecht
18-Jul-13-1MA171_6e
Application Note
Table of Contents
Table of Contents
1MA171_6e
Preface .................................................................................... 3
1.1
1.2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
References ............................................................................ 29
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 2
Preface
1 Preface
This application note presents methods for integrating Rohde & Schwarz test and
MATLAB .
For demonstration purposes the Rohde & Schwarz VXIplug&play spectrum analyzer
instrument driver and the VXIplug&play instrument driver for Rohde & Schwarz vector
signal generators are used in this application note. The presented procedure is
applicable to most Rohde & Schwarz VXIplug&play instrument drivers.
To illustrate the usage of instrument drivers in MATLAB two approaches are outlined.
The first part of this application note describes the MATLAB Instrument Control
Toolbox as a high-level approach with tool support. Besides this, a low-level approach
using the MATLAB external interface calllib is explained in the second part of this
application note.
Microsoft and Windows are U.S. registered trademarks of the Microsoft Corporation.
R&S is a registered trademark of Rohde & Schwarz GmbH & Co. KG.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 3
Preface
The following application notes also discuss remote control of Rohde & Schwarz
1
instruments from MATLAB based on the SCPI command level. This approach implies
manual string formatting and data parsing of the SCPI command and its responses:
1EF46 Using MATLAB for Remote Control and Data Capture with R&S Spectrum
and Network Analyzers
This application note describes how instruments can be controlled directly from
MATLAB scripts and how measurement data can be imported into MATLAB .
1EF51: Using R&S Signal, Spectrum and Network Analyzers with MATLAB
This application note describes how to use the Rohde & Schwarz signal, spectrum
and network analyzers within the MathWorks MATLAB programming environment.
A collection of m-files is presented which provides functions like sending standard
SCPI commands and receiving binary data. All interfaces to the instrument (GPIB
and LAN) are supported.
1GP60: R&S MATLAB Toolkit for Signal Generators and Power Sensors
The R&S MATLAB Toolkit for signal generators and power sensors provides
The R&S NRP-Z power sensors from Rohde & Schwarz represent the latest in
power measurement technology. They offer all the functionality of conventional
power meters, and more, within the small housing of a power sensor. This
application note serves as a coding guide for situations in which the R&S NRP-Z
power sensors are to be used in custom test and measurement software.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 4
Preface
1MA171_6e
Microsoft Visual C++ 2005 SP1 V8.0 Professional Edition or Microsoft Visual
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 5
The Instrument Control Toolbox of 32-bit MATLAB versions offers tools for generating
MATLAB code out of the 32-bit VXIplug&play instrument driver. Furthermore wizards
2
drivers, the instrument control toolbox generates a MATLAB instrument driver file out
of the VXIplug&play instrument drivers DLL. This step is described in section 2.2.
Prerequisites
The MATLAB command instrhwinfo enables you to verify a proper recognition of your
installed VISA library. Using 'visa' as supported interface, as highlighted below, is
mandatory. Your command window output should look like this:
>> instrhwinfo
ans =
MATLABVersion: '7.9 (R2009b)'
SupportedInterfaces: {'gpib' 'serial' 'tcpip'
SupportedDrivers: {'matlab' 'ivi' 'vxipnp'}
ToolboxName: 'Instrument Control Toolbox'
ToolboxVersion: '2.9 (R2009b)'
'udp'
'visa'}
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 6
After installing your specific VXIplug&play instrument driver, the tmtool gives you a
possibility to verify the installation (see section 2.3). The installation can also be
verified via the command instrhwinfo('vxipnp', 'INSTRUMENT_DRIVER'), where
INSTRUMENT_DRIVER is the driver name. For example, a successfully installed
rsspecan instrument driver can look like this:
>> instrhwinfo('vxipnp', 'rsspecan')
ans =
Manufacturer: 'Rohde & Schwarz GmbH'
Model: 'Rohde&Schwarz Spectrum Analyzer'
DriverVersion: '1.0'
DriverDllName: 'C:\VXIPNP\WINNT\bin\rsspecan_32.dll'
In the current working directory, the MATLAB instrument driver file (extension: .mdd)
will be created from the specified VXIplug&play instrument driver.
Figure 1: Creating a MATLAB instrument driver from a VXIplug&play instrument driver. The result of
this process is highlighted.
The Instrument Control Toolbox uses the API information of the VXIplug&play
instrument driver stored in the VXIplug&play function panel (extension: .fp) file.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 7
Please do not uninstall your instrument driver after this step. The instrument driver is
By opening the created MATLAB instrument driver, the Instrument Driver Editor
(midedit) opens up as shown in the figure below. The following command opens the
Instrument Driver Editor:
>> midedit
This editor allows you to customize and modify your generated MATLAB instrument
driver. The Instrument Driver Editor is not discussed in this application note. For further
information about this tool, please consult the MATLAB Instrument Control Toolbox
documentation.
The MATLAB Test & Measurement Tool (tmtool) allows you to explore installed
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 8
Figure 3: Installed VXIplug&play instrument drivers shown in the MATLAB Test & Measurement
Tool.
Rohde & Schwarz T&M instrument. This is done by using the MATLAB Test &
Measurement Tool (tmtool).
First create a Device Object instance to make the generated MATLAB instrument
driver accessible. After selecting Device Objects as Instrument Object on the left side
of the window, click the button New Object. This step is highlighted in the figure below.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 9
The previously generated MATLAB instrument driver file (extension: .mdd) file has to
be selected as Driver. This file was generated in section 2.2.
Figure 6: Next, select the previously generated MATLAB instrument driver file (extension: .mdd).
4
After configuring a valid VISA resource identifier as Resource name a new device
object can be created by pressing the OK button.
4
Further information about the VISA software can be found in 1MA153: Development
Hints and Best Practices for Using Instrument Drivers.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 10
Figure 7: Entering a valid VISA resource identifier in the Resource name field in order to create a new
device object.
functionality can be accessed via the MATLAB instrument driver in the Functions tab.
The Properties tab enables you to use the attributes of the instrument driver.
Figure 8: The Functions tab allows you to select the functionality of the MATLAB instrument driver.
Please keep in mind that the makemid tool removes the prefix of VXIplug&play function
names. Furthermore all capital letters of the VXIplug&play function name are
lowercased as well, for example rsspecan_ConfigureAcquisition() will be converted
to configureacquisiton.
After completing these steps, close the session by clicking the Disconnect button.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 11
Every method previously executed in the Functions tab is written in a log window
(Session Log tab). The resulting session log is intended to be utilized as a template for
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 12
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 13
%finished
catch ME
%% evaluate error
errLen = 1024;
errCode = -1;
errMsg = zeros(errLen, 1);
%query instrument for errors
groupObj = get(deviceObj, 'Utility');
groupObj = groupObj(1);
[errCode, errMsg] = invoke(groupObj, 'errorquery');
% disconnect device object from hardware
disconnect(deviceObj);
% delete object
delete(deviceObj);
error('Exception: %s\nInstrument Error: %d: %s\n', ME.message, errCode,
char(errMsg));
end
%% cleanup driver session
% disconnect device object from hardware
disconnect(deviceObj);
% delete object
delete(deviceObj);
%cleanup workspace
clear all;
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 14
instr_cfrequency
= 2e9;
% this decimal value is taken from the rsspecan.h file
instr_attr
= 1000000+150000+9; %'RSSPECAN_ATTR_FREQUENCY_CENTER';
%attribute
instr_repcap
= 'Win0'; %repeated capability
groupObj = get(deviceObj, 'ConfigurationSetGetCheckAttributeSetAttribute');
groupObj = groupObj(1);
invoke(groupObj, 'setattributevireal64', instr_repcap, instr_attr,
instr_cfrequency);
%% simple settings
% set instrument to single sweep
instr_window
= 1;
instr_sweepModeCont = 0;
instr_numOfSweeps
= 1;
groupObj = get(deviceObj, 'Configuration');
groupObj = groupObj(1);
invoke(groupObj, 'configureacquisition', instr_window, instr_sweepModeCont,
instr_numOfSweeps);
% configure sweep points
instr_sweepPoints = 501;
groupObj = get(deviceObj, 'Configuration');
groupObj = groupObj(1);
invoke(groupObj, 'configuresweeppoints', instr_window, instr_sweepPoints);
% configure RF parameters
instr_freqCenter
= 1.1e9;
instr_freqSpan
= 1e6;
groupObj = get(deviceObj, 'Configuration');
groupObj = groupObj(1);
invoke(groupObj, 'configurefrequencycenterspan', instr_window,
instr_freqCenter, instr_freqSpan);
%% read trace data
instr_trace
= 1;
instr_timeoutMs
= 15000;
instr_arrayLen
= instr_sweepPoints;
instr_arrayActualLen = -1;
instr_amplitude = zeros(instr_arrayLen, 1);
groupObj = get(deviceObj, 'Measurement');
groupObj = groupObj(1);
[instr_arrayActualLen, instr_amplitude] = invoke(groupObj, 'readytrace',
instr_window, instr_trace, instr_timeoutMs, instr_arrayLen,
instr_amplitude);
%do something
plot(instr_amplitude)
%finished
catch ME
%% evaluate error
errLen = 1024;
errCode = -1;
errMsg = zeros(errLen, 1);
groupObj = get(deviceObj, 'Utility');
groupObj = groupObj(1);
[errCode, errMsg] = invoke(groupObj, 'errorquery');
% disconnect device object from hardware
disconnect(deviceObj);
% delete object
delete(deviceObj);
error('Exception: %s\nInstrument Error: %d: %s\n', ME.message, errCode,
char(errMsg));
end
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 15
cd(matlabroot)
unzip('c:/tmp/ivicDriverPropertyNameFix.zip')
unzip('c:/tmp/RSIVICAttributsBasedDriverFix.zip')
unzip('c:/tmp/ivicDriverArgumentFix.zip')
rehash path
rehash toolboxcache
Uninstallation procedure:
Delete all folders in the following directory:
<MATLAB>/java/patch/com/mathworks/toolbox/instrument/*.*
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 16
The basic MATLAB package supports an interface for using 32-bit and 64-bit external
libraries. This functionality is called calllib interface.
Rohde & Schwarz VXIplug&play instrument drivers come with a dynamic linked library
(DLL). As a result, the remote-control drivers can be used directly without utilizing the
Instrument Control Toolbox. This approach is described in the following.
MATLAB supports this feature for 32-bit and 64-bit libraries on Windows operating
systems.
before remote controlling any instrument from MATLAB by using instrument driver.
Rohde & Schwarz VXIplug&play instrument drivers and installation manuals are
available in the Drivers download area on the Rohde & Schwarz website:
http://www.rohde-schwarz.com/drivers/.
Generally any library needs to be loaded into MATLAB before it is used. It is important
to propagate the path where the libraries are accessible to MATLAB as shown below.
The example below shows how to load a 32-bit VXIplug&play instrument driver library.
%% add library path
% check VXIPNPPATH environment variable on a 32-bit system
addpath 'c:\Program Files\IVI Foundation\VISA\WinNT\Include';
addpath 'c:\Program Files\IVI Foundation\VISA\WinNT\Bin';
Note that the crucial part of these paths is stored in the environment variable
VXIPNPPATH on your operating system. On a 64-bit operating system the variable
VXIPNPPATH64 points to the 64-bit VXIplug&play installation directory.
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 17
MATLAB .
Calling functions from libraries is a critical task, because MATLAB has a different data
representation than the ANSI C programming language.
A trace from a Rohde & Schwarz spectrum analyzer can be captured by using the
501;
% amout of sweep points
1;
% trace window
15000; % measurement timeout
instr_sweepPoints;
% max amount of meas. values
instr_arrayActualLen = -1;
% actual amount of meas. values
instr_amplitude = zeros(instr_arrayLen,1);
% meas. values
[err, instr_arrayActualLen, instr_amplitude] =
calllib(vxipnpLib,
'rsspecan_ReadYTrace', instr_session, instr_window,
instr_trace, instr_timeoutMs, instr_arrayLen,
instr_arrayActualLen, instr_amplitude);
% function call into library
1MA171_6e
=
=
=
=
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 18
For more detailed examples of library calling conventions, see section 0 and 3.7, or
MATLAB documentation for "Calling Functions in Shared Libraries" and the examples
given following sections.
of R&S driver
= 'rssmu_32';
= 'rssmu_32.dll';
= 'rssmu.h';
(vxipnpLib)
(vxipnpLibDll, vxipnpHeader);
%You can use these functions to get information on the functions available in a
library that you have loaded:
%libfunctions(vxipnpLib);
%libfunctionsview(vxipnpLib);
%% open VISA session
instr_session
= -1;
instr_resource = 'TCPIP::rssmu200a123123::INSTR';
instr_presource = libpointer( 'int8Ptr', [int8( instr_resource ) 0] );
instr_idQuery
= 1;
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 19
instr_reset
= 1;
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 20
% In the case that a session got created we evaluate the error further
if ( instr_session ~= 0 )
[errCode, errMsg] = calllib( vxipnpLib, 'rssmu_error_message',
instr_session, errCode, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
errMsg = '';
[DummyErr, errCode, errMsg] = calllib( vxipnpLib, 'rssmu_error_query',
instr_session, errCode, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
% ... and we must make sure to disconnect from the device !
calllib( vxipnpLib, 'rssmu_close', instr_session );
end
end
%% clean up
unloadlibrary(vxipnpLib);
clear all
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 21
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 22
% switch rf on
instr_rf = 1;
[err] = calllib(vxipnpLib, 'rssmu_SetOutputState', instr_session,
instr_path, instr_rf);
if ( err )
break
end
% cleanup
[err] = calllib(vxipnpLib, 'rssmu_close', instr_session);
if ( err )
break
end
break
end
%% evaluate error
if ( err )
errCode = err;
errLen = 1024;
errMsg = zeros(errLen,1);
disp( '*** Error occured' );
% In the case that a session got created we evaluate the error further
if ( instr_session ~= 0 )
[errCode, errMsg] = calllib( vxipnpLib, 'rssmu_error_message',
instr_session, errCode, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
errMsg = '';
[DummyErr, errCode, errMsg] = calllib( vxipnpLib, 'rssmu_error_query',
instr_session, errCode, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
% ... and we must make sure to disconnect from the device !
calllib( vxipnpLib, 'rssmu_close', instr_session );
end
end
%% clean up
unloadlibrary(vxipnpLib);
clear all
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 23
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 24
if ( err )
break
end
%% read trace
instr_trace
= 1;
instr_timeoutMs
= 15000;
instr_arrayLen
= instr_sweepPoints;
instr_arrayActualLen = -1;
instr_amplitude = zeros(instr_arrayLen,1);
[err, instr_arrayActualLen, instr_amplitude] = calllib(vxipnpLib,
'rsspecan_ReadYTrace', instr_session, instr_window, instr_trace,
instr_timeoutMs, instr_arrayLen, instr_arrayActualLen, instr_amplitude);
if ( err )
break
end
%do something
plot(instr_amplitude)
%% cleanup
[err] = calllib(vxipnpLib, 'rsspecan_close', instr_session);
if ( err )
break
end
%exit loop
break
end
%% evaluate error
if ( err )
errCode = err;
errLen = 1024;
errMsg = zeros(errLen,1);
disp( '*** Error occured' );
% In the case that a session got created we evaluate the error further
if ( instr_session ~= 0 )
[errCode, errMsg] = calllib( vxipnpLib, 'rsspecan_error_message',
instr_session, err, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
errMsg = '';
[DummyErr, errCode, errMsg] = calllib( vxipnpLib,
'rsspecan_error_query', instr_session, errCode, errMsg );
errString = sprintf('%d: %s', errCode, char(errMsg));
disp( errString );
% ... and we must make sure to disconnect from this device !
calllib( vxipnpLib, 'rsspecan_close', instr_session );
end
end
%% clean up
unloadlibrary(vxipnpLib);
clear all
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 25
if ~libisloaded (vxipnpLib)
[notfound,warnings]=loadlibrary(vxipnpLibDll, vxipnpHeader, ...
'includepath', p1, ...
'includepath', p2, ...
'addheader', 'rsspecan.h');
end
%You can use these functions to get information on the functions available in a
library that you have loaded:
%libfunctions(vxipnpLib, '-full');
%libfunctionsview(vxipnpLib);
%% open VISA session
instr_session
= -1;
instr_resource = 'TCPIP::FSV-123123::INSTR';
instr_presource = libpointer( 'int8Ptr', [int8( instr_resource ) 0] );
instr_idQuery
= 1;
instr_reset
= 1;
%% set up connection
err = 0;
[err, p8, instr_session] = calllib(vxipnpLib, 'rsspecan_init', instr_presource,
instr_idQuery, instr_reset, instr_session );
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 26
if ( err )
error ('Connection to instrument failed')
end
while (true)
%% simple settings
% set instrument to single sweep
instr_window
= 1;
instr_sweepModeCont = 0;
instr_numOfSweeps
= 1;
[err] = calllib(vxipnpLib, 'rsspecan_ConfigureAcquisition', instr_session,
instr_window, instr_sweepModeCont, instr_numOfSweeps);
if ( err )
break
end
% configure sweep points
instr_window
= 1;
instr_sweepPoints = 501;
[err] = calllib(vxipnpLib, 'rsspecan_ConfigureSweepPoints', instr_session,
instr_window, instr_sweepPoints);
if ( err )
break
end
% configure RF parameters
instr_freqCenter
= 1.1e9;
instr_freqSpan
= 1e6;
[err] = calllib(vxipnpLib, 'rsspecan_ConfigureFrequencyCenterSpan',
instr_session, instr_window, instr_freqCenter, instr_freqSpan);
if ( err )
break
end
%% read trace
instr_trace
= 1;
instr_timeoutMs
= 15000;
instr_arrayLen
= instr_sweepPoints;
instr_arrayActualLen = -1;
instr_amplitude = zeros(instr_arrayLen,1);
[err, instr_arrayActualLen, instr_amplitude] = calllib(vxipnpLib,
'rsspecan_ReadYTrace', instr_session, instr_window, instr_trace,
instr_timeoutMs, instr_arrayLen, instr_arrayActualLen, instr_amplitude);
if ( err )
break
end
%do something
plot(instr_amplitude)
%% cleanup
[err] = calllib(vxipnpLib, 'rsspecan_close', instr_session);
if ( err )
break
end
%exit loop
break
end
%% evaluate error
if ( err )
errCode = err;
errLen = 1024;
errMsg = zeros(errLen,1);
disp( '*** Error occured' );
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 27
% In the case that a session got created we evaluate the error further
if ( instr_session ~= 0 )
[errCode, errMsg] = calllib( vxipnpLib, 'rsspecan_error_message',
instr_session, err, errMsg );
errString = sprintf('%s', char(errMsg));
disp( errString );
errMsg = '';
[DummyErr, errCode, errMsg] = calllib( vxipnpLib,
'rsspecan_error_query', instr_session, errCode, errMsg );
errString = sprintf('%d: %s', errCode, char(errMsg));
disp( errString );
% ... and we must make sure to disconnect from this device !
calllib( vxipnpLib, 'rsspecan_close', instr_session );
end
end
%% clean up
unloadlibrary(vxipnpLib);
clear all
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 28
References
4 References
1MA171_6e
Rohde & Schwarz How to use Rohde & Schwarz Instruments in MATLAB 29
Regional contact
USA & Canada
USA: 1-888-TEST-RSA (1-888-837-8772)
from outside USA: +1 410 910 7800
[email protected]
East Asia
+65 65 13 04 88
[email protected]
Rest of the World
+49 89 4129 123 45
[email protected]