В этом примере показано, как получить Данные 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
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
Постройте первые 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');
Представление спектра может иметь больше информации, чем представление области времени данных. Например, можно использовать представление спектра, чтобы идентифицировать основные диапазоны частот, пропускную способность сигнала, и т.д. Вам нужен 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