From 61dd6147d4681b1a81f989ab00c2732beccf561d Mon Sep 17 00:00:00 2001 From: Eugeniy Mikhailov Date: Wed, 22 Jul 2015 12:26:15 -0400 Subject: codes to grab Agilent SA E440a at linux --- E440a_take_data.m | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 E440a_take_data.m diff --git a/E440a_take_data.m b/E440a_take_data.m new file mode 100644 index 0000000..9ba94d8 --- /dev/null +++ b/E440a_take_data.m @@ -0,0 +1,222 @@ +function spectrum_analyzer = E4440a_take_data(data_save_flag, data_plot_flag) +% This script reads data from E440a spectrum analyzer and saves it to a file +% +% Eugeniy E. Mikhailov eemikh@wm.edu +% Gleb Romanov gromanov@hellok.org +% 6/20/2013 +% 7/20/2015 added a choice for saving and plotting + +%% some sane defaults + +switch (nargin) + case 0 + data_plot_flag = true; + data_save_flag = true; + case 1 + data_plot_flag = true; + case 2 + % we are good, nothing to do + otherwise + warning('Mora arguments than needed are provided'); + data_plot_flag = true; + data_save_flag = true; +end + +%% Define instrument parameters +board_index = 0; +gpib_address = 21; +bufSize = 100000; + +%% Data file parameters +data_prefix = 'S'; +data_path = 'Z:\qol_comp_data\data\'; +run_number_file = 'Z:\qol_comp_data\data\autofile\runnum.dat'; + +%% Find and initialize instrument +%obj1 = instrfind('Type', 'gpib', 'BoardIndex', board_index, 'PrimaryAddress', gpib_address, 'Tag', ''); + +% Create the GPIB object if it does not exist +% otherwise use the object that was found. +%if isempty(obj1) + %obj1 = gpib('NI', board_index, gpib_address); +%else + %fclose(obj1); + %obj1 = obj1(1); +%end + + +% Adjust the buffers so the traces fit. +% Do this before fopen(obj1); +%obj1.InputBufferSize = bufSize; +%obj1.OutputBufferSize = bufSize; + +obj1=lgpib('SAagilent') +%% Connect to instrument object, obj1. +%fopen(obj1); +disp('--------------------') +device_string = query(obj1, '*IDN?'); +disp(horzcat('Connected to ', device_string)); + +% Communicating with instrument object, obj1. +% +% You can send commands using: +% fprintf(obj1, '_command_'); +% +% Or read stuff using: +% _data_ = query(obj1, '_command_'); +disp('Reading traces...'); +%% Read traces +tr1_string = query(obj1, ':TRACE:DATA? TRACE1;'); +tr2_string = query(obj1, ':TRACE:DATA? TRACE2;'); +tr3_string = query(obj1, ':TRACE:DATA? TRACE3;'); + +disp('Reading Spectrum Analyzer parameters...'); +%% Read various spectrum analyzer parameters +freq_start_string = query(obj1, ':SENSE:FREQUENCY:START?'); +freq_stop_string = query(obj1, ':SENSE:FREQUENCY:STOP?'); +freq_center_string = query(obj1, ':SENSE:FREQUENCY:CENTER?'); +freq_span_string = query(obj1, ':SENSE:FREQUENCY:SPAN?'); +amplitude_units_string = query(obj1, ':UNIT:POWER?'); +attenuation_string = query(obj1, ':SENSE:POWER:RF:ATTenuation?'); +ref_level_string = query(obj1, ':DISPLAY:WINDOW:TRACE:Y:SCALE:RLEVEL?'); + +log_scale_string = query(obj1, ':DISPlAY:WINDOW:TRACE:Y:SCALE:PDIVISION?'); + +rbw_string = query(obj1, 'SENSE:BANDWIDTH:RESOLUTION?'); +vbw_string = query(obj1, 'SENSE:BANDWIDTH:VIDEO?'); +sweep_time_string = query(obj1, ':SENSE:SWEEP:TIME?'); + +%% Disconnect from instrument object, obj1. +%fclose(obj1); +disp('Spectrum Analyzer data communincation is done'); + +%% Convert the traces from strings into vectors +tr1 = sscanf(tr1_string, '%f,'); +tr2 = sscanf(tr2_string, '%f,'); +tr3 = sscanf(tr3_string, '%f,'); + +% Transpose the vectors +tr1 = tr1'; +tr2 = tr2'; +tr3 = tr3'; + +% Create the frequency vector +freq_start = sscanf(freq_start_string, '%f'); +freq_stop = sscanf(freq_stop_string, '%f'); +Npoints = length(tr1); +freq = linspace(freq_start,freq_stop, Npoints); + + + +% Create spectrum analyzer structure +spectrum_analyzer.traces=[tr1',tr2', tr3']; +spectrum_analyzer.freq=freq'; +spectrum_analyzer.RBW=sscanf(rbw_string, '%f'); +spectrum_analyzer.VBW=sscanf(vbw_string, '%f'); +spectrum_analyzer.sweep_time=sscanf(sweep_time_string, '%f'); + +%% Save data to a file +if (data_save_flag) + % Get full path of the file to save + save_to_file = qol_get_next_data_file( data_prefix, data_path, run_number_file ); + % + % Write the data to a file + disp(' '); + disp(horzcat('Saving data to ',save_to_file)); + save_to_file_handle = fopen(save_to_file,'wt'); + fprintf(save_to_file_handle,'%s',horzcat('# ', datestr(clock))); + fprintf(save_to_file_handle,'\n'); + fprintf(save_to_file_handle,'%s',horzcat('# Device:', ' ', device_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Frequency center, Hz', ' ', freq_center_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Frequency span, Hz', ' ', freq_span_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Frequency start, Hz', ' ', freq_start_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Frequency stop, Hz', ' ', freq_stop_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Amplitude units ', amplitude_units_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Attenuation ', attenuation_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Reference level ', ref_level_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Log scale ', log_scale_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Resolution bandwidth, Hz', ' ', rbw_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Video bandwidth, Hz', ' ', vbw_string)); + fprintf(save_to_file_handle,'%s',horzcat('# Sweep time, seconds', ' ', sweep_time_string)); + + % saving traces data + data = [freq; tr1; tr2; tr3]; + fprintf(save_to_file_handle,'%f\t%f\t%f\t%f\n',data); + % Close the file + fclose(save_to_file_handle); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +if (data_plot_flag) + %% Plot raw traces + % + % Open a window + figure111 = figure(111); + %close(figure111); + %figure1 = figure(111); + % + % Create axes + axes1 = axes('Parent',figure111,'YGrid','on','XGrid','on','FontSize',14); + box(axes1,'on'); + hold(axes1,'all'); + %ylim([-2,12]) + %ylim([-85,-70]) + % + % Create plot + plot(freq/1e6,tr1,'Color',[1 0 0],'Parent',axes1,'DisplayName','Trace 1') + plot(freq/1e6,tr2,'Color',[0 0 0],'Parent',axes1,'DisplayName','Trace 2') + plot(freq/1e6,tr3,'Color',[0 0 1],'Parent',axes1,'DisplayName','Trace 3') + % + % Create xlabel + xlabel('Detection frequency, MHz','FontSize',14); + % + % Create ylabel + ylabel('Noise power, dBm','FontSize',14); + % + % Show legend + legend('show'); + grid on; + + + %% Plot processed traces + + % Open a window + figure222 = figure(222); + close(figure222); + figure222 = figure(222); + % + % Create axes + axes2 = axes('Parent',figure222,'YGrid','on','XGrid','on','FontSize',14); + box(axes2,'on'); + hold(axes2,'all'); + %ylim([-2,12]) + %ylim([-85,-70]) + % + % Create plot + plot(freq/1e6,tr1-tr1,'Color',[0 0 0],'Parent',axes2,'DisplayName','Zero') + plot(freq/1e6,tr2-tr1,'Color',[1 0 0],'Parent',axes2,'DisplayName','Tr2 - Tr1') + plot(freq/1e6,tr3-tr1,'Color',[0 0 1],'Parent',axes2,'DisplayName','Tr3 - Tr1') + % + % Create xlabel + xlabel('Detection frequency, MHz','FontSize',14); + % + % Create ylabel + ylabel('Noise power, dB','FontSize',14); + % + % Show legend + legend('show'); +end + +%drawnow; + + + +%% Finish up and cleanup +% Close all opened files +fclose('all'); + +% Bring focus back to the command window +%commandwindow; -- cgit v1.2.3