📄 rfna_8505.asv
字号:
function varargout = rfna_8505(varargin)% % PLEASE READ:% Run this app with the MATLAB editor's built in debugger for demo purposes. Debug-> Run % It does not need the hardware to display the user interface. % Show the Smith Chart mode by selecting the ps11 button. %% % RFNA_8505 Application M-file for rfna_8505.fig% FIG = RFNA_8505 launch rfna_8505 GUI.% RFNA_8505('callback_name', ...) invoke the named callback.% Run either from command window or Matlab editor / debugger (Debug Run )% This example requires the measurement hardfware for full functionality and is% provided for reference only. % Last Modified by GUIDE v2.0 06-May-2002 17:23:11if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); handles.s(1,1).mag=line('color',[1 0 0],'parent',handles.s11_axis,'linewidth',w); handles.s(1,1).ph =line('color',[0 0 1],'parent',handles.s11_phase_axis,'linewidth',w); handles.s(1,2).mag=line('color',[1 0 0],'parent',handles.s12_axis,'linewidth',w); handles.s(1,2).ph =line('color',[0 0 1],'parent',handles.s12_phase_axis,'linewidth',w); handles.s(2,1).mag=line('color',[1 0 0],'parent',handles.s21_axis,'linewidth',w); handles.s(2,1).ph =line('color',[0 0 1],'parent',handles.s21_phase_axis,'linewidth',w); handles.s(2,2).mag=line('color',[1 0 0],'parent',handles.s22_axis); handles.s(2,2).ph =line('color',[0 0 1],'parent',handles.s22_phase_axis); set(get(handles.s11_axis,'xlabel'),'string','MHz','units','normalized'); set(get(handles.s11_axis,'ylabel'),'string','dB','units','normalized'); set(get(handles.s11_phase_axis,'ylabel'),'string','deg.','units','normalized'); set(get(handles.s11_phase_axis,'title'),'string','S11','units','normalized'); set(get(handles.s12_axis,'xlabel'),'string','MHz','units','normalized'); set(get(handles.s12_axis,'ylabel'),'string','dB','units','normalized'); set(get(handles.s12_phase_axis,'ylabel'),'string','deg.','units','normalized'); set(get(handles.s12_phase_axis,'title'),'string','S12','units','normalized'); set(get(handles.s21_axis,'xlabel'),'string','MHz','units','normalized'); set(get(handles.s21_axis,'ylabel'),'string','dB','units','normalized'); set(get(handles.s21_phase_axis,'ylabel'),'string','deg.','units','normalized'); set(get(handles.s21_phase_axis,'title'),'string','S21','units','normalized'); set(get(handles.s22_axis,'xlabel'),'string','MHz','units','normalized'); set(get(handles.s22_axis,'ylabel'),'string','dB','units','normalized'); set(get(handles.s22_phase_axis,'ylabel'),'string','deg.','units','normalized'); set(get(handles.s22_phase_axis,'title'),'string','S22','units','normalized'); guidata(fig, handles); open_Callback([],[pwd,'\default.rfa'] , handles, []); if nargout > 0 varargout{1} = fig; endelseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK %try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end %catch % disp(lasterr); %endendfunction varargout = all_Callback(h, eventdata, handles, varargin) s11_Callback(h, eventdata, handles, varargin) s12_Callback(h, eventdata, handles, varargin) s21_Callback(h, eventdata, handles, varargin) s22_Callback(h, eventdata, handles, varargin) % MEASUREMENT CORRECTIONS function result = correct(s,input,handles); result=input; if ~get(handles.correct,'value') return; % correction computation is turned off end; % convert to x+jy [x,y]=dbphase2xy(input.mag,input.ph); f =input.f; switch s case {'s11','s22'} Gm=x+j*y; m=str2num(s(2)); % need to interpolate cal data over freq range of input load cal_50_thru.rfa -mat [re,im]=dbphase2xy(data.s(m,m).mag,data.s(m,m).ph); freq=data.s(m,m).freq; Xzo=interp1(freq,re+j*im,f,'spline','extrap'); load cal_open.rfa -mat [re,im]=dbphase2xy(data.s(m,m).mag,data.s(m,m).ph); freq=data.s(m,m).freq; Xoc=interp1(freq,re+j*im,f,'spline','extrap'); %figure %plot(freq,re,f,real(Xoc),freq,im,f,imag(Xoc),f,x,f,y) load cal_short.rfa -mat [re,im]=dbphase2xy(data.s(m,m).mag,data.s(m,m).ph); freq=data.s(m,m).freq; Xsc=interp1(freq,re+j*im,f,'spline','extrap'); % the following equation was derived using the Symbolic Math Toolbox % don't try this by hand, see cor_comp.m g=((-Xoc+Xsc).*(Gm-Xzo))./(-Xoc.*Xzo+2*Xoc.*Xsc-Xzo.*Xsc-Gm.*Xoc+2*Gm.*Xzo-Gm.*Xsc); [result.mag,result.ph] = xy2dbphase(real(g),imag(g)); case {'s12','s21'} Sm=x+j*y; m=str2num(s(2)); n=str2num(s(3)); % need to interpolate cal data over freq range of input load cal_50_thru.rfa -mat [re,im]=dbphase2xy(data.s(m,n).mag,data.s(m,n).ph); freq=data.s(m,n).freq; Sout=Sm./(interp1(freq,re+j*im,f,'spline','extrap')); [result.mag,result.ph] = xy2dbphase(real(Sout),imag(Sout)); end; % --------------------------------------------------------------------function varargout = s11_Callback(h, eventdata, handles, varargin) result=measure('s11',handles); result=correct('s11',result,handles); % the tricky part set(handles.s(1,1).mag,'xdata',result.f,'ydata',result.mag); set(handles.s(1,1).ph,'xdata',result.f,'ydata',result.ph); set([handles.s11_axis,handles.s11_phase_axis],'xlim',[result.f(1),result.f(end)]); drawnow; % --------------------------------------------------------------------function varargout = s21_Callback(h, eventdata, handles, varargin) result=measure('s21',handles); result=correct('s21',result,handles); set(handles.s(2,1).mag,'xdata',result.f,'ydata',result.mag); set(handles.s(2,1).ph,'xdata',result.f,'ydata',result.ph); set([handles.s21_axis,handles.s21_phase_axis],'xlim',[result.f(1),result.f(end)]); drawnow;% --------------------------------------------------------------------function varargout = s12_Callback(h, eventdata, handles, varargin) result=measure('s12',handles); result=correct('s12',result,handles); set(handles.s(1,2).mag,'xdata',result.f,'ydata',result.mag); set(handles.s(1,2).ph,'xdata',result.f,'ydata',result.ph); set([handles.s12_axis,handles.s12_phase_axis],'xlim',[result.f(1),result.f(end)]); drawnow;% --------------------------------------------------------------------function varargout = s22_Callback(h, eventdata, handles, varargin) result=measure('s22',handles); result=correct('s22',result,handles); set(handles.s(2,2).mag,'xdata',result.f,'ydata',result.mag); set(handles.s(2,2).ph,'xdata',result.f,'ydata',result.ph); set([handles.s22_axis,handles.s22_phase_axis],'xlim',[result.f(1),result.f(end)]); drawnow;% MEASUREMENT function result= measure(param,handles) global SN DISPS RF SPAR [SN, DISPS, RF, SPAR]=open_network_analyzer; fprintf(DISPS,'C1I4M1D1D3E,M2D1D3E,I5M1D1D3E,M2D1D3E'); % CLEAR CH1 fprintf(DISPS,'C2I4M1D1D3E,M2D1D3E,I5M1D1D3E,M2D1D3E'); % CLEAR CH2 fprintf(DISPS,'C2I5M3E'); % turn channel 2 on in phase mode % detect if panel setting are to be used set(handles.status,'string',[param,' in progress']); usefrontpannel=get(handles.inst_pannel,'value'); if usefrontpannel % read freq range, Mode, FA, FB fprintf(RF,'L'); % learn RF module setup rf_str = fscanf(RF); % read it back range = str2num(rf_str(6)); width = str2num(rf_str(10)); if (width == 1) | (width==2) % start stop representation. f_start = str2num(rf_str(18:21))*10^(range-3); f_stop = str2num(rf_str(25:28))*10^(range-3); elseif width==4 % center freq & bw representation FA = str2num(rf_str(18:21))*10^(range-3); FB = str2num(rf_str(25:28))*10^(range-4); f_start=FA-FB; f_stop =FA+FB; else close_network_analyzer(SN,RF,DISPS,SPAR) error end; set(handles.fstart_edit,'string',sprintf('%7.2f',f_start)); set(handles.fstop_edit,'string',sprintf('%7.2f',f_stop)); else % setup freq range and freq limits
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -