📄 rfna_8505.m
字号:
close_network_analyzer(SN,RF,DISPS,SPAR) error end; range= 1+ (f_stop>13) + (f_stop>130); % clever those hp dudes switch range case 1 % < 13 MHz fprintf(RF,['R1W1FA',strrep(sprintf('%4.0f',f_start*100),' ','0'),'FB',strrep(sprintf('%4.0f',f_stop*100),' ','0'),'E']); case 2 fprintf(RF,['R2W1FA',strrep(sprintf('%4.0f',f_start*10),' ','0'),'FB',strrep(sprintf('%4.0f',f_stop*10),' ','0'),'E']); case 3 fprintf(RF,['R3W1FA',strrep(sprintf('%4.0f',f_start),' ','0'),'FB',strrep(sprintf('%4.0f',f_stop),' ','0'),'E']); end; % note the "E" = Execute end; fprintf(DISPS,'C3I1M1E'); % turn electrical line compensation off fprintf(DISPS,'C3I2M1E'); fprintf(DISPS,'L'); % learn DISPlay module setup disp_str = fscanf(DISPS); ref_c1=str2num(disp_str(15:20))/100; % channel 1 reference level (div by 100 for dB) ref_c2=str2num(disp_str(31:36))/10; % channel 2 reference level (div by 10 for phase) per_div.ph =[180 90 45 20 10 5 2 1]; per_div.mag = [20 10 5 2 1 .5 .2 .1]; mscale=2; % start with 10 dB per div pscale=3; % and 45 deg/div for phase autorange=get(handles.autorange,'value'); d=0.5; % need to pause or ref_c1 setting gets hosed in autoscale mode for k=1:1+autorange fprintf(SN,'AB'); % stop current measurement in storage normalizer switch param case 's11' fprintf(SPAR,'1'); % 1 is forward, 2 is reverse pause(d) fprintf(DISPS,['C1I4M2S',int2str(mscale),'E']); % A/R, Mag fprintf(DISPS,['C2I4M3S',int2str(pscale),'E']); % A/R, Phase case 's12' fprintf(SPAR,'2'); % 1 is forward, 2 is reverse pause(d) fprintf(DISPS,['C1I4M2S',int2str(mscale),'E']); % A/R, Mag fprintf(DISPS,['C2I4M3S',int2str(pscale),'E']); % A/R, Phase case 's21' fprintf(SPAR,'1'); % 1 is forward, 2 is reverse pause(d) fprintf(DISPS,['C1I5M2S',int2str(mscale),'E']); % B/R, Mag fprintf(DISPS,['C2I5M3S',int2str(pscale),'E']); % B/R, Phase case 's22' fprintf(SPAR,'2'); % 1 is forward, 2 is reverse pause(d) fprintf(DISPS,['C1I5M2S',int2str(mscale),'E']); % B/R, Mag fprintf(DISPS,['C2I5M3S',int2str(pscale),'E']); % B/R, Phase end; fprintf(SN,'S2C1I2C2I2TS2'); %turn c1 & c2 on, 2 sweeps (ts2) to get mag & phase fprintf(SN,'EX'); fprintf(SN,'P3'); % select Page 3 , implicit AB ch1str=fscanf(SN); % fetch mag in dB result fprintf(SN,'P4'); % select Page 4 , implicit AB ch2str=fscanf(SN); % fetch phase result % results should be the same size, but sometimes thay are not % lch1=length(ch1str) % lch2=length(ch2str) % [ch1str(1:20);ch2str(1:20)] % ch1str(2960:end) % ch2str(2960:end) % end; x_end=2980; % empirically determined ending point x_beg=5; % ditto dB_scale =per_div.mag(mscale)*10/500; % if mag in dB and 10 db per div 100/500=0.2 x1=dB_scale*str2num(ch1str(x_beg:x_end))+ref_c1; % trim bogus data, add ref offset deg_scale=per_div.ph(pscale)*8/400; % x2=deg_scale*str2num(ch2str(x_beg:x_end))+ref_c2; % trim bogus data, add ref offset N= min(length(x2),length(x1)); result.mag= x1(1:N); result.ph = x2(1:N); result.f = f_start+(0:(N-1))'*(f_stop-f_start)/N; % need this if autoranging % mag and phase spread if autorange & (k==1) min_mag = min(result.mag); max_mag= max(result.mag); ref_c1 = round((min_mag+max_mag)/2); % new reference level if ref_c1>=0 s='+'; else s='-'; end; sm=['C1M2R',s,sprintf('%04i',abs(round(ref_c1*100))),'E']; fprintf(DISPS,sm); usedmag_per_div = (max_mag-min_mag)/10; % 10 dB per div initial measurement mscale=sum(usedmag_per_div<=per_div.mag); % new mscale % do same for phase [min_ph,i1] = min(result.ph); [max_ph,i2] = max(result.ph); % ph_min_max=[min_ph,max_ph] ref_c2 = round((min_ph+max_ph)/2); if ref_c2>=0 s='+'; else s='-'; end; sp=['C2M3R',s,sprintf('%04i',abs(round(ref_c2*10))),'E']; fprintf(DISPS,sp); usedph_per_div=(max_ph-min_ph)/8; % 360 phase should map to 45 deg / div pscale=sum(usedph_per_div <= per_div.ph); % new pscale end; end; % restore condictions that were read back from panel setup fprintf(DISPS,[disp_str,'E']); fprintf(RF,[rf_str,'E']); fprintf(SN,'EX'); % resume normal measurement process close_network_analyzer(SN,DISPS,RF,SPAR); set(handles.status,'string',[param,' complete']);% --------------------------------------------------------------------% --------------------------------------------------------------------function varargout = open_Callback(h, eventdata, handles, varargin) if isempty(eventdata) [file_n,path_n]=uigetfile([pwd,'\*.rfa'],'Open File',0.5,0.5); path_file=[path_n,file_n]; if isempty(file_n) return end; else path_file=eventdata; end; s=load(path_file,'-mat'); data=s.data; for k=1:2 for p=1:2 set(handles.s(k,p).mag,'xdata',data.s(k,p).freq, 'ydata',data.s(k,p).mag); set(get(handles.s(k,p).mag,'parent'),'xlim',data.s(k,p).freq([1,end])); set(handles.s(k,p).ph,'xdata',data.s(k,p).freq, 'ydata',data.s(k,p).ph); set(get(handles.s(k,p).ph,'parent'),'xlim',data.s(k,p).freq([1,end])); end; end% --------------------------------------------------------------------function varargout = save_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = save_as_Callback(h, eventdata, handles, varargin) for k=1:2 for p=1:2 data.s(k,p).freq = get(handles.s(k,p).mag,'xdata'); % this has cal factor data.s(k,p).mag = get(handles.s(k,p).mag,'ydata'); % if cal factor was applied data.s(k,p).ph = get(handles.s(k,p).ph,'ydata'); % which may be the way to go end; end [file_n,path_n]=uiputfile([pwd,'\*.rfa'],'Save File',0.5,0.5); if isempty(file_n) return end; % check for rfa extension p=findstr(file_n,'.'); if ~isempty(p) % force it temp=file_n(1:(p-1)); file_n=temp; end; file_n=[file_n,'.rfa']; file_path=[path_n,file_n]; save(file_path,'data','-mat'); % --------------------------------------------------------------------function varargout = ps_Callback(h, eventdata, handles, varargin) name=eventdata; tag=[eventdata,'_plot']; h_fig=findobj('tag',tag); if isempty(h_fig) h_fig=rfna_plot; set(h_fig,'tag',tag,'name',name); else figure(h_fig); end; k = str2num(name(2)); p = str2num(name(3)); data.freq = get(handles.s(k,p).mag,'xdata'); data.mag = get(handles.s(k,p).mag,'ydata'); data.ph = get(handles.s(k,p).ph,'ydata'); data.name = name; rfna_plot('plot_data',h_fig,data,guidata(h_fig));% --------------------------------------------------------------------function varargout = fstart_edit_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = fstop_edit_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = inst_pannel_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = autorange_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = correct_Callback(h, eventdata, handles, varargin)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -