Чтение синфазного и квадратура (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-ряд Signal Analyzer (N9020A, MXA 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 = '10.123.123.123';

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

% 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 = tcpip(addressMXA, 5025);
signalAnalyzerObject.InputBufferSize = 30e6;
signalAnalyzerObject.Timeout = 20;
fopen(signalAnalyzerObject);

Запросите инструментальную идентификационную информацию

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

fprintf(signalAnalyzerObject, '*RST');
instrumentInfo = query(signalAnalyzerObject, '*IDN?');
disp(['Instrument identification information: ' instrumentInfo]);
Instrument identification information: Agilent Technologies,N9020A,MY48011248,A.03.08

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

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

% Set up signal analyzer mode to Basic/IQ mode
fprintf(signalAnalyzerObject,':INSTrument:SELect BASIC');

% Set the center frequency
fprintf(signalAnalyzerObject,[':SENSe:FREQuency:CENTer ' num2str(centerFrequency)]);

% Set the resolution bandwidth
fprintf(signalAnalyzerObject,[':SENSe:WAVEform:BANDwidth:RESolution ' num2str(bandwidth)]);

% Turn off averaging
fprintf(signalAnalyzerObject,':SENSe:WAVeform:AVER OFF');

% set to take one single measurement once the trigger line goes high
fprintf(signalAnalyzerObject,':INIT:CONT OFF');

% Set the trigger to external source 1 with positive slope triggering
fprintf(signalAnalyzerObject,':TRIGger:WAVeform:SOURce IMMediate');
fprintf(signalAnalyzerObject,':TRIGger:LINE:SLOPe POSitive');

% Set the time for which measurement needs to be made
fprintf(signalAnalyzerObject,[':WAVeform:SWE:TIME '  num2str(measureTime)]);

% Turn off electrical attenuation.
fprintf(signalAnalyzerObject,':SENSe:POWer:RF:EATTenuation:STATe OFF');

% Set mechanical attenuation level
fprintf(signalAnalyzerObject,[':SENSe:POWer:RF:ATTenuation ' num2str(mechAttenuation)]);

% Turn IQ signal ranging to auto
fprintf(signalAnalyzerObject,':SENSe:VOLTage:IQ:RANGe:AUTO ON');

% Set the endianness of returned data
fprintf(signalAnalyzerObject,':FORMat:BORDer NORMal');

% Set the format of the returned data
fprintf(signalAnalyzerObject,':FORMat:DATA REAL,32');

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

Инициируйте инструмент, чтобы сделать измерение, ожидать операции измерения, чтобы быть завершенными и читать в форме волны. Прежде чем вы обработаете данные, разделите меня & компоненты Q из чередованных данных, возвращенных инструментом, и создадите комплексный вектор в MATLAB.

% Trigger the instrument and initiate measurement
fprintf(signalAnalyzerObject,'*TRG');
fprintf(signalAnalyzerObject,':INITiate:WAVeform');

% wait till measure operation is complete
measureComplete = query(signalAnalyzerObject,'*OPC?');

% Read the IQ data
fprintf(signalAnalyzerObject,':READ:WAV0?');
data = binblockread(signalAnalyzerObject,'float');

% Read the additional terminator character from the instrument
fread(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;

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

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

fprintf(signalAnalyzerObject,':FETCH:WAV1?');
signalSpec = binblockread(signalAnalyzerObject,'float');
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) = 44999999.8738
Number of points read = 360001
Max value of signal (dBm) = -64.8261
Min value of signal (dBm) = -130.6566

Отобразите полученные данные IQ на графике

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

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
hp = spectrum.periodogram('hamming');

% Create a power spectral density options object
hpopts = psdopts(hp,IQData);

% set the options for the periodogram
hpopts.Fs = sampleRate;
hpopts.SpectrumType' = 'twosided';
hpopts.Centerdc = true;

% calculate the PSD
hpsd = psd(hp,IQData,hpopts);

% plot the PSD of the acquired signal
figure 
plot(hpsd);

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

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

% Switch back to the spectrum analyzer view
fprintf(signalAnalyzerObject,':INSTrument:SELect SA');

% Set mechanical attenuation level
fprintf(signalAnalyzerObject,[':SENSe:POWer:RF:ATTenuation ' num2str(mechAttenuation)]);

% Set the center frequency, RBW and VBW and trigger
fprintf(signalAnalyzerObject,[':SENSe:FREQuency:CENTer ' num2str(centerFrequency)]);
fprintf(signalAnalyzerObject,[':SENSe:FREQuency:STARt ' num2str(startFrequency)]);
fprintf(signalAnalyzerObject,[':SENSe:FREQuency:STOP ' num2str(stopFrequency)]);
fprintf(signalAnalyzerObject,[':SENSe:BANDwidth:RESolution ' num2str(resolutionBandwidth)]);
fprintf(signalAnalyzerObject,[':SENSe:BANDwidth:VIDeo ' num2str(videoBandwidth)]);

% Continuous measurement
fprintf(signalAnalyzerObject,':INIT:CONT ON');

% Trigger
fprintf(signalAnalyzerObject,'*TRG');

Очистка

% Close and delete instrument connections
fclose(signalAnalyzerObject); 
delete(signalAnalyzerObject)
clear signalAnalyzerObject