Main Content

Generate a Swept Sinusoid Using VISA and Capture Waveform Using Quick-Control Oscilloscope

This example shows how to use a function generator to generate a swept sinusoid waveform and also how to capture it using an oscilloscope.

For a complete list of supported hardware, visit the Instrument Control Toolbox product page.


This example was tested using a Keysight Technologies® 33522B function generator and a Tektronix® TDS 1002 oscilloscope. The GPIB addresses of the function generator and oscilloscope are GPIB0::5::INSTR and GPIB0::11::INSTR, respectively. The function generator is configured to generate a 2V p-p swept-sinusoid (20 to 200 Hz) with an offset of 1V every 100 ms on channel 1. The oscilloscope is configured to acquire a waveform on channel 1.

Configure the Oscilloscope

Configure the oscilloscope using a Quick-Control (oscilloscope).

scopeResource = "GPIB0::11::INSTR";
ch = "CH1";

Create an oscilloscope object and open a connection to the instrument.

scope = oscilloscope;
scope.Resource = scopeResource;

The autoSetup function automatically adjust channels, vertical, horizontal, and trigger controls based on connected signals.


Enable and configure channel 1.


Configure the channel to display at 1 VOLTS/DIV.


Set probe attenuation to 1x (options include 1, 10, 100).


The AcquisitionTime property represents the waveform duration in seconds. Setting the AcquisitionTime will change the SEC/DIV control accordingly. AcquisitionTime typically corresponds to 10 divisions (or one screen of data).

scope.AcquisitionTime = 0.25;

scope.TriggerLevel = 2.56;
scope.TriggerSource = ch;
scope.TriggerSlope = "rising";
scope.TriggerMode = "normal";

oscilloscope: TEKTRONIX,TDS 1002

   Instrument Settings:
      AcquisitionStartDelay: 'Not supported'
            AcquisitionTime: 0.25 s
               ChannelNames: 'CH1', 'CH2', 'MATH', 'REFA', 'REFB'
            ChannelsEnabled: 'CH1'
            SingleSweepMode: 'off'
                    Timeout: 10 s
             WaveformLength: 2500

   Trigger Settings:
               TriggerLevel: 2.56
              TriggerSource: 'CH1'
               TriggerSlope: 'rising'
                TriggerMode: 'normal'

   Communication Properties:
                     Status: 'open'
                   Resource: 'GPIB0::11::INSTR'

lists of methods

Configure the Function Generator

Configure the function generator to generate a sweep waveform using a VISA-GPIB object.

fgenResource = "GPIB0::5::INSTR";
vfgen = visadev(fgenResource)
vfgen = 
  GPIB with properties:

         ResourceName: "GPIB0::5::INSTR"
                Alias: "FGEN_2CH"
               Vendor: "Agilent Technologies"
                Model: "33522B"
           BoardIndex: 0
       PrimaryAddress: 5
     SecondaryAddress: 65535
    NumBytesAvailable: 0

  Show all properties, functions

Configure the sweep amplitude and offset.

writeline(vfgen,"SOUR1:VOLT +1.0")
writeline(vfgen,"SOUR1:VOLT:OFFS +1.0")

Enable sweep mode.

writeline(vfgen,"SOUR1:FREQ:MODE SWE");
writeline(vfgen,"SOUR1:SWE:STAT ON");
writeline(vfgen,"SOUR1:SWE:SPAC LIN");

Configure the start and stop frequencies.

fstart = 20;
fstop = 200;

writeline(vfgen,compose("SOUR1:FREQ:STAR %d",fstart));
writeline(vfgen,compose("SOUR1:FREQ:STOP %d",fstop));

Configure the time taken to sweep from the start frequency to the stop frequency as sweepTime.

sweepTime = 0.1;
holdTime = 0;
returnTime = 0;

writeline(vfgen,compose("SOUR1:SWE:TIME %0.1f",sweepTime));

Configure time to remain at the stop frequency as holdTime.

writeline(vfgen,compose("SOUR1:SWE:HTIME %0.1f",holdTime));

Configure the time required to return to the start frequency as returnTime.

writeline(vfgen,compose("SOUR1:SWE:RTIME %0.1f",returnTime));

Configure the trigger.

writeline(vfgen,"TRIG1:SLOP POS"); 
writeline(vfgen,"TRIG1:SOUR IMM");

Acquire the Waveform

Acquire waveform data using the oscilloscope. The AcquisitionTime property represents the waveform duration in seconds. The WaveformLength property represents the number of points in the waveform data.

y = readWaveform(scope);
t = linspace(0,scope.AcquisitionTime,scope.WaveformLength);

Plot the Waveform

title("Acquired waveform (sweep)")
xlabel("Time (s)");
ylabel("Voltage (V)");

Clean Up

Clear the workspace when you are finished.

clear scope vfgen