Reading Inphase and Quadrature (IQ) Data from a Signal Analyzer over TCP/IP
This example shows how to acquire IQ Data from a signal analyzer over a TCP/IP interface.
Instrument Control Toolbox™ supports communication with instruments through interfaces and drivers.
For a complete list of supported hardware, visit the Instrument Control Toolbox product page.
Introduction
This example acquires IQ Data from a Keysight Technologies® (formerly Agilent Technologies® ) X-Series Signal Analyzer (N9030A, PXA Signal Analyzer) over a TCP/IP interface.
Requirements
To run this example you need an X-Series Signal analyzer with an Ethernet (TCP/IP) connection. You can also execute this example with MATLAB on your X-Series analyzer, or on a PC on the same network as the X-Series Analyzer.
This example uses functions from the Instrument Control Toolbox and the DSP System Toolbox™.
Define Measurement Parameters
Define the parameters used to configure the instrument before you make the measurement. Based on the signal you are measuring, you may need to modify some of the following parameters.
% Specify the IP address of the signal analyzer addressMXA = "172.28.16.61";
Parameter Definitions
% Center frequency of the modulated waveform (Hz) centerFrequency = 2.14e9; % Bandwidth of the signal (Hz) bandwidth = 25e6; % Measurement time (s) measureTime = 8e-3; % Mechanical attenuation in the signal analyzer(dB) mechAttenuation = 0; % Start frequency for Spectrum Analyzer view startFrequency = 2.11e9; % Stop frequency for Spectrum Analyzer view stopFrequency = 2.17e9; % Resolution Bandwidth for Spectrum Analyzer view resolutionBandwidth = 200e3; % Video Bandwidth for Spectrum Analyzer view videoBandwidth = 300;
Connect to the Instrument
Set up instrument connectivity using a TCP/IP connection.
Set the timeout to allow sufficient time for the measurement and transfer of data.
Set the byte order to be "big-endian" to read the floating point data in the correct format from the analyzer.
signalAnalyzerObject = tcpclient(addressMXA, 5025);
signalAnalyzerObject.ByteOrder = "big-endian";
signalAnalyzerObject.Timeout = 20;
Query Instrument Identification Information
Reset the instrument to a known state using the appropriate SCPI command. Query the instrument identity to make sure we are connected to the right instrument.
writeline(signalAnalyzerObject, "*RST"); instrumentInfo = writeread(signalAnalyzerObject, "*IDN?"); disp("Instrument identification information: " + instrumentInfo);
Instrument identification information: Agilent Technologies,N9030A,US00071181,A.14.16
Set Up Instrument for an IQ Waveform Measurement
The X-Series signal and spectrum analyzers perform IQ measurements as well as spectrum measurements. In this example, you acquire the time domain IQ data, visualize it in MATLAB, and perform signal analysis on the acquired data. Use SCPI commands to configure the instrument to make the measurement and define the format of the data transfer once the measurement is made.
% Set up signal analyzer mode to Basic/IQ mode writeline(signalAnalyzerObject,":INSTrument:SELect BASIC"); % Set the center frequency writeline(signalAnalyzerObject,":SENSe:FREQuency:CENTer " + num2str(centerFrequency)); % Set the resolution bandwidth writeline(signalAnalyzerObject,":SENSe:WAVEform:BANDwidth:RESolution " + num2str(bandwidth)); % Turn off averaging writeline(signalAnalyzerObject,":SENSe:WAVeform:AVER OFF"); % Set to take one single measurement once the trigger line goes high writeline(signalAnalyzerObject,":INIT:CONT OFF"); % Set the trigger to external source 1 with positive slope triggering writeline(signalAnalyzerObject,":TRIGger:WAVeform:SOURce IMMediate"); writeline(signalAnalyzerObject,":TRIGger:LINE:SLOPe POSitive"); % Set the time for which measurement needs to be made writeline(signalAnalyzerObject,":WAVeform:SWE:TIME " + num2str(measureTime)); % Turn off electrical attenuation. writeline(signalAnalyzerObject,":SENSe:POWer:RF:EATTenuation:STATe OFF"); % Set mechanical attenuation level writeline(signalAnalyzerObject,":SENSe:POWer:RF:ATTenuation " + num2str(mechAttenuation)); % Turn IQ signal ranging to auto writeline(signalAnalyzerObject,":SENSe:VOLTage:IQ:RANGe:AUTO ON"); % Set the endianness of returned data writeline(signalAnalyzerObject,":FORMat:BORDer NORMal"); % Set the format of the returned data writeline(signalAnalyzerObject,":FORMat:DATA REAL,32");
Initiate Measurement
Trigger the instrument to make the measurement, wait for the measurement operation to be complete and read in the waveform. Before you process the data, separate the I & the Q components from the interleaved data returned by the instrument and create a complex vector in MATLAB.
% Trigger the instrument and initiate measurement writeline(signalAnalyzerObject,"*TRG"); writeline(signalAnalyzerObject,":INITiate:WAVeform"); % Wait till measure operation is complete measureComplete = writeread(signalAnalyzerObject,"*OPC?"); % Read the IQ data writeline(signalAnalyzerObject,":READ:WAV0?"); data = readbinblock(signalAnalyzerObject,"single"); % Read the additional terminator character from the instrument read(signalAnalyzerObject,1); % Separate the data and build the complex IQ vector. inphase = data(1:2:end); quadrature = data(2:2:end); IQData = inphase+1i*quadrature;
Display Information About the Measurement
The instrument provides information about the most recently acquired data. Capture this information and display it.
writeline(signalAnalyzerObject,":FETCH:WAV1?"); signalSpec = readbinblock(signalAnalyzerObject,"single"); sampleRate = 1/signalSpec(1); disp("Sample Rate (Hz) = " + num2str(sampleRate)); disp("Number of points read = " + num2str(signalSpec(4))); disp("Max value of signal (dBm) = " + num2str(signalSpec(6))); disp("Min value of signal (dBm) = " + num2str(signalSpec(7)));
Sample Rate (Hz) = 31250000.8838 Number of points read = 250001 Max value of signal (dBm) = -8.211 Min value of signal (dBm) = -42.5689
Plot the Acquired IQ Data
Plot the first 1000 points of acquired time domain data and annotate the figure.
figure(1) plot(real(IQData(1:1000)),"b"); hold on plot(imag(IQData(1:1000)),"g"); legend("Inphase signal", "Quadrature signal"); title("IQ Data for the first 1000 points of acquired signal") xlabel("Sample number"); ylabel("Voltage");
Plot the Spectrum View of the IQ Data
The spectrum view might have more information than the time domain view of the data. For example, you may use the spectrum view to identify the main frequency bands, the signal bandwidth, etc. You need the DSP System Toolbox to plot the spectrum view. You may get errors if the required functionality is not available.
% Create a periodogram spectrum with a Hamming window figure(2) periodogram(IQData,hamming(length(IQData)),[],sampleRate,"centered")
Switch the Instrument Back to Spectrum Analyzer Mode
Switch the instrument to spectrum analyzer mode and compare the spectrum view generated in MATLAB with the view on the Signal Analyzer. Use additional SCPI commands to configure the instrument measurement and display settings.
% Switch back to the spectrum analyzer view writeline(signalAnalyzerObject,":INSTrument:SELect SA"); % Set mechanical attenuation level writeline(signalAnalyzerObject,":SENSe:POWer:RF:ATTenuation " + num2str(mechAttenuation)); % Set the center frequency, RBW and VBW and trigger writeline(signalAnalyzerObject,":SENSe:FREQuency:CENTer " + num2str(centerFrequency)); writeline(signalAnalyzerObject,":SENSe:FREQuency:STARt " + num2str(startFrequency)); writeline(signalAnalyzerObject,":SENSe:FREQuency:STOP " + num2str(stopFrequency)); writeline(signalAnalyzerObject,":SENSe:BANDwidth:RESolution " + num2str(resolutionBandwidth)); writeline(signalAnalyzerObject,":SENSe:BANDwidth:VIDeo " + num2str(videoBandwidth)); % Continuous measurement writeline(signalAnalyzerObject,":INIT:CONT ON"); % Trigger writeline(signalAnalyzerObject,"*TRG");
Clean Up
% Close and delete instrument connections clear signalAnalyzerObject