Main Content

Spectrum Analyzer Plot

This example shows how to use the Quick Control Spectrum Analyzer to acquire power spectrum data from a Keysight® Technologies N9040B spectrum analyzer.

Introduction

This example uses a spectrum analyzer to acquire power spectrum data within the Bluetooth® band of 2.402 GHz to 2.48 GHz.

Requirements

To run this example, you need:

  • Keysight Technologies N9040B spectrum analyzer

  • IVI-C driver for Keysight Technologies N9040B spectrum analyzer (AgXSAn)

  • NI™ VISA or Keysight VISA

  • NI IVI® compliance package version 16.0.1.2 or higher

Create an RF Spectrum Analyzer Object

Create the Quick Control object and search for available resources and drivers.

rfsa = rfspecan;
resources(rfsa)
ans = 
    ' TCPIP0::K-N9040B-91124.dhcp.mathworks.com::inst0::INSTR
     '

drivers(rfsa)
ans = 
    'Driver: AgXSAn
     Supported Models:
        M8920A, M90XA, M9290A, M9410A, M9411A, M9415A, M9420A
        M9421A, N8973B, N8974B, N8975B, N8976B, N9000A, N9000B
        N9010A, N9010B, N9020A, N9020B, N9021B, N9030A, N9030B
        N9032B, N9038A, N9038B, N9040B, N9041B, N9042B, N9048B
     
     Driver: rsspecan
     Supported Models:
     ESW, FPH, FPS, FSV, FSVA, FSVR, FSW, FSWP, FSWT
     
     '

Connect to the Selected Resource and Driver

Select an available resource and driver.

rfsa.Resource = "TCPIP0::K-N9040B-91124.dhcp.mathworks.com::inst0::INSTR";
rfsa.Driver = "AgXSAn";
connect(rfsa)
disp(rfsa)
  RFSpecAn with properties:

                Resource: "TCPIP0::K-N9040B-91124.dhcp.mathworks.com::inst0::INSTR"
                  Driver: "AgXSAn"
                  Vendor: "Keysight Technologies"
                   Model: "N9040B"
          StartFrequency: 10000000
           StopFrequency: 2.6500e+10
         CenterFrequency: 1.3255e+10
                    Span: 2.6490e+10
               SweepTime: 0.0665
     ResolutionBandwidth: 3000000
          VideoBandwidth: 3000000
           VerticalScale: Logarithmic
          AmplitudeUnits: dBm
          ReferenceLevel: 0
    ReferenceLevelOffset: 0

  Show all properties, functions

Configure the Start and Stop Frequencies

Set the start frequency to just below the start of the Bluetooth band of 2.402 GHz. Set the stop frequency to just above the end of the Bluetooth band of 2.48 GHz.

rfsa.StartFrequency = 2.4e9;
rfsa.StopFrequency = 2.5e9
  RFSpecAn with properties:

                Resource: "TCPIP0::K-N9040B-91124.dhcp.mathworks.com::inst0::INSTR"
                  Driver: "AgXSAn"
                  Vendor: "Keysight Technologies"
                   Model: "N9040B"
          StartFrequency: 2.4000e+09
           StopFrequency: 2.5000e+09
         CenterFrequency: 2.4500e+09
                    Span: 100000000
               SweepTime: 1.0000e-03
     ResolutionBandwidth: 910000
          VideoBandwidth: 910000
           VerticalScale: Logarithmic
          AmplitudeUnits: dBm
          ReferenceLevel: 0
    ReferenceLevelOffset: 0

  Show all properties, functions

Acquire Power Spectrum Amplitude Data

Acquire 100 real-valued power spectra. Each spectrum has a number of points equal to the TraceSize, which is a fixed value for the N9040B.

n = 100;
data = nan(rfsa.TraceSize, n);
for i = 1:n
    data(:, i) = readPowerSpectrum(rfsa);
end

Plot the Average and the Envelope of the Acquired Data

This is effectively the same as acquiring using "Minimum Hold" and "Maximum Hold" trace types.

Amin = min(data, [], 2);
Amax = max(data, [], 2);
Amean = mean(data, 2);

f = linspace(rfsa.StartFrequency, rfsa.StopFrequency, rfsa.TraceSize);

figure;
hold on

plot(f, Amin, LineWidth=2);
plot(f, Amax, LineWidth=2);
plot(f, Amean, LineWidth=2);

title("|A(f)|")
% Label using the current units of amplitude, which are set to "dBm" by
% default.
ylabel(string(rfsa.AmplitudeUnits));
xlabel("Hz")

setAxesSpectrumAnalyzer(gca);

Live Plot the Current Data and Trace the Maximum and Minimum Hold

Display the data as observed on a front-panel display using three traces (sample, minimum, and maximum).

figure;

Amin = data(:, 1);
Amax = data(:, 1);
Anext = data(:, 1);

p = plot(f, Amin, f, Anext, f, Amax, LineWidth=2);
ax = gca;
setAxesSpectrumAnalyzer(ax)
colors = colororder;
order = [1 3 2];
ax.ColorOrder = colors(order, :);

title("|A(f)|")
ylabel(string(rfsa.AmplitudeUnits));
xlabel("Hz")

axis tight

p(1).YDataSource =  'Amin';
p(2).YDataSource =  'Anext';
p(3).YDataSource =  'Amax';

for i = 2:n
    Anext = data(:, i);
    Amin = min(Amin, Anext);
    Amax = max(Amax, Anext);

    axis tight
    refreshdata
    drawnow limitrate nocallbacks    
    pause(0.100);
end

Front-Panel Display

function setAxesSpectrumAnalyzer(haxes)
% Configure the plot to look like a front-panel display
% of a stand-alone instrument.

set(haxes, 'Color', [0.150 0.150 0.150], ...
           'GridColor', [1 1 1], ...
           'GridLineWidth', 1, ...
           'XGrid','on', ...
           'YGrid','on');
end