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

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

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

Для полного списка поддерживаемого оборудования посетите страницу продукта Instrument Control Toolbox.

Введение

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

Требования

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

Этот пример использует функции из 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.

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

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

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

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

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

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

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