Чтение инфазных и квадратурных (IQ) данных с Signal Analyzer по TCP/IP

Этот пример показывает, как получить данные IQ от анализатора сигналов через интерфейс TCP/IP.

Instrument Control Toolbox™ поддерживает связь с инструментами через интерфейсы и драйверы.

Полный список поддерживаемого оборудования можно найти на странице продукта Instrument Control Toolbox по адресу www.mathworks.com/products/instrument/

Введение

Этот пример получает данные IQ от Keysight Technologies ® (ранее Agilent Technologies ®) анализатора сигналов X-серии (N9030A, PXA Signal Analyzer) по интерфейсу TCP/IP.

Требования

Чтобы запустить этот пример, вам нужен анализатор сигнала X-Series с соединением Ethernet (TCP/IP). Можно также выполнить этот пример с MATLAB на анализаторе X-Series или на ПК в той же сети, что и анализатор X-Series.

Этот пример использует функции из набора инструментов Instrument Control Toolbox и DSP System Toolbox™.

Задайте параметры измерения

Определите параметры, используемые для настройки прибора, прежде чем выполнять измерение. На основе сигнала, который вы измеряете, вам, возможно, потребуется изменить некоторые из следующих параметров.

% Specify the IP address of the signal analyzer
addressMXA = "172.28.16.61";

Определения параметров

% 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;

Подключение к инструменту

  • Настройка подключения прибора с помощью соединения TCP/IP.

  • Установите тайм-аут, чтобы обеспечить достаточное время для измерения и передачи данных.

  • Установите порядок байтов на «big-endian», чтобы считать данные с плавающей точкой в правильном формате от анализатора.

signalAnalyzerObject = tcpclient(addressMXA, 5025);
signalAnalyzerObject.ByteOrder = "big-endian";
signalAnalyzerObject.Timeout = 20;

Идентификационная информация прибора запроса

Установите инструмент в известное состояние с помощью соответствующей команды SCPI. Запросите тождества инструмента, чтобы убедиться, что мы подключены к правильному инструменту.

writeline(signalAnalyzerObject, "*RST");
instrumentInfo = writeread(signalAnalyzerObject, "*IDN?");
disp("Instrument identification information: " + instrumentInfo);
Instrument identification information: Agilent Technologies,N9030A,US00071181,A.14.16

Настройте инструмент для измерения формы волны IQ

Анализаторы сигнала и спектра X-серии выполняют измерения IQ, а также спектральные измерения. В этом примере вы получаете данные IQ временного интервала, визуализируете их в MATLAB и выполняете анализ сигнала на полученных данных. Используйте команды SCPI, чтобы сконфигурировать инструмент для выполнения измерения и определения формата передачи данных после выполнения измерения.

% 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");

Инициируйте измерение

Запустите прибор, чтобы выполнить измерение, дождитесь завершения операции измерения и считайте в форме волны. Прежде чем вы обработаете данные, отделите компоненты I&Q от перемеженных данных, возвращенных инструментом, и создайте сложный вектор в 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;

Отображение информации о измерении

Инструмент предоставляет информацию о самых последних полученных данных. Соберите эту информацию и отобразите ее.

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

Постройте график полученных данных IQ

Постройте график первых 1000 точек полученных данных временного интервала и аннотируйте рисунок.

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");

Постройте график представления спектра данных IQ

Представление спектра может иметь больше информации, чем представление данных во временном интервале. Для примера можно использовать представление спектра, чтобы идентифицировать основные полосы частот, полосу пропускания сигнала и т.д. Вам нужен DSP System Toolbox, чтобы построить график представления спектра. Вы можете получить ошибки, если требуемые функциональные возможности недоступны.

% Create a periodogram spectrum with a Hamming window
figure(2)
periodogram(IQData,hamming(length(IQData)),[],sampleRate,"centered")

Переключите инструмент назад в режим спектрального анализатора

Переключите прибор в режим спектрального анализатора и сравните представление спектра, сгенерированное в MATLAB, с видом на Signal Analyzer. Используйте дополнительные команды SCPI, чтобы сконфигурировать настройки измерения и отображения прибора.

% 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");

Очистка

% Close and delete instrument connections
clear signalAnalyzerObject