📄 cnf_set.m
字号:
'String','State Feedback', ...
'Style','radiobutton',...
'Callback',{@callback_observer},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.radio_OV_full =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','Full Order Measurement Feedback', ...
'Style','radiobutton',...
'Callback',{@callback_observer},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.radio_OV_reduced =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','Reduced Order Measurement Feedback', ...
'Style','radiobutton',...
'Callback',{@callback_observer},...
'HorizontalAlignment','left');
% set(ud.Handles.radio_OV_none,'UserData',[ud.Handles.radio_OV_full,ud.Handles.radio_OV_reduced]);
% set(ud.Handles.radio_OV_full,'UserData',[ud.Handles.radio_OV_none,ud.Handles.radio_OV_reduced]);
% set(ud.Handles.radio_OV_reduced,'UserData',[ud.Handles.radio_OV_none,ud.Handles.radio_OV_full]);
% the frame
% frmWid=TextWL+TextW;
frmHt=9*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder/2;
Y=Y-Params.vBorder;
frmBot=Y-frmHt;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
% the CNF linear feedback part
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'ForegroundColor','b', ...
'FontSize',10,...
'Position',[X0,Y, TextWL TextH], ...
'String','Design State Feedback Gain Matrix F using', ...
'Style','text', ...
'HorizontalAlignment','left');
% A specific F
Y=Y-Vgap;
ud.Handles.radio_FB_gain =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','A specific F', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_FB_gain = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% H2 control
Y=Y-Vgap;
ud.Handles.radio_FB_H2 =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','H2 control with a preliminary tuning parameter epsilon (tunable)', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_FB_epsilon = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
% pole placement
Y=Y-Vgap;
ud.Handles.radio_FB_poles =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','Pole placement with preliminary damping ratio and natural frequency (tunable)', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_FB_poles = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
% the integral pole
Y=Y-Vgap;
ud.Handles.text_Integral=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X,Y, TextWL*0.8 TextH], ...
'String','Preliminary integration pole and gain (tunable) ', ...
'Style','text', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_Integral = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
set(ud.Handles.check_IC,'UserData',[ud.Handles.text_Integral, ud.Handles.edit_Integral]);
% set the database to control the radio-button
udb=struct('others',[], 'enable',[],'disable',[]);
udb.others=[ud.Handles.radio_FB_gain,ud.Handles.radio_FB_poles];
udb.disable=[ud.Handles.edit_FB_gain,ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
udb.enable=[ud.Handles.edit_FB_epsilon ];
set(ud.Handles.radio_FB_H2,'UserData',udb);
udb.others=[ud.Handles.radio_FB_H2, ud.Handles.radio_FB_poles];
udb.enable=[ud.Handles.edit_FB_gain];
udb.disable=[ud.Handles.edit_FB_epsilon , ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
set(ud.Handles.radio_FB_gain,'UserData',udb);
udb.others=[ud.Handles.radio_FB_H2, ud.Handles.radio_FB_gain];
udb.disable=[ud.Handles.edit_FB_epsilon, ud.Handles.edit_FB_gain];
udb.enable=[ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
set(ud.Handles.radio_FB_poles,'UserData',udb);
% the right half window
Y=Y0;
% the CNF nonlinear feedback part
% the frame
frmLft=frmLft+0.5;
% frmWid=TextWL+TextW;
frmHt=4*Vgap+Params.vBorder;
% Y=Y-Params.vBorder;
frmBot=Y-frmHt;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
X0 = frmLft + Params.hBorder;
X = X0 + TextW/2;
Y=Y-Vgap;
ud.Handles.check_CNF=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'ForegroundColor','b', ...
'FontSize',10,...
'Position',[X0,Y, TextWL TextH], ...
'String','CNF Nonlinear Feedback', ...
'Style','Checkbox', ...
'Callback',{@callback_check}, ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.text_W=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL, TextH], ...
'String','The diagonal vector of matrix W (tunable)', ...
'Style','text', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_CNF_W = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.text_Rho =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','Nonlinear function rho (parameters tunable at simulation panel). ', ...
'Style','text', ...
'HorizontalAlignment','left');
set(ud.Handles.check_CNF,'UserData', [ud.Handles.text_W, ud.Handles.edit_CNF_W, ud.Handles.text_Rho]);
% the observer part
% the frame
% frmWid=TextWL+TextW;
frmHt=7*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder/2;
Y=Y-Params.vBorder;
frmBot=Y-frmHt;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
Y=Y-Vgap;
ud.Handles.text_OV_tip=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','b', ...
'BackgroundColor',Params.StdColor, ...
'FontSize',10,...
'Position',[X0,Y, TextWL TextH], ...
'String','Design Observer Gain Matrix K using', ...
'Style','text', ...
'HorizontalAlignment','left');
% design observer using a specific K
Y=Y-Vgap;
ud.Handles.radio_OV_gain =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','A specific K', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_OV_gain = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% design observer via H2
Y=Y-Vgap;
ud.Handles.radio_OV_H2 =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','H2 technique with a tuning parameter epsilon (tunable)', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_OV_epsilon = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
% design observer via Butterworth filter
Y=Y-Vgap;
ud.Handles.radio_OV_butter =uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'String','Desired bandwidth of observer dynamics in Butterworth pattern (tunable)', ...
'Style','radiobutton',...
'Callback',{@callback_radio_choice},...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_OV_omega = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@Callback_Matrix_Read}, ...
'HorizontalAlignment','left');
% set the database for the radio buttons associated with observer type
obv_type=[ud.Handles.radio_OV_none,ud.Handles.radio_OV_full,ud.Handles.radio_OV_reduced];
obv_gain=[ud.Handles.radio_OV_gain, ud.Handles.edit_OV_gain, ...
ud.Handles.radio_OV_H2, ud.Handles.edit_OV_epsilon, ...
ud.Handles.radio_OV_butter, ud.Handles.edit_OV_omega, ud.Handles.text_OV_tip];
obv=struct('obv_type', obv_type, 'obv_gain',obv_gain, 'on_off','on');
set(ud.Handles.radio_OV_full,'UserData',obv);
set(ud.Handles.radio_OV_reduced,'UserData',obv);
obv.on_off='off';
set(ud.Handles.radio_OV_none,'UserData',obv);
% set the database to control the radio-button
% udb=struct('others',[], 'enable',[],'disable',[]);
udb.others=[ud.Handles.radio_OV_H2, ud.Handles.radio_OV_butter];
udb.enable=[ud.Handles.edit_OV_gain];
udb.disable=[ud.Handles.edit_OV_epsilon,ud.Handles.edit_OV_omega];
set(ud.Handles.radio_OV_gain,'UserData',udb);
udb.others=[ud.Handles.radio_OV_gain,ud.Handles.radio_OV_butter];
udb.disable=[ud.Handles.edit_OV_gain,ud.Handles.edit_OV_omega];
udb.enable=[ud.Handles.edit_OV_epsilon];
set(ud.Handles.radio_OV_H2,'UserData',udb);
udb.others=[ud.Handles.radio_OV_gain,ud.Handles.radio_OV_H2];
udb.disable=[ud.Handles.edit_OV_gain,ud.Handles.edit_OV_epsilon];
udb.enable=[ud.Handles.edit_OV_omega];
set(ud.Handles.radio_OV_butter,'UserData',udb);
% For filter
Y=Y-Params.vBorder;
frmHt=2*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder;
frmBot=Y-frmHt;
ud.Handles.frame_FT = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
Y=Y-Vgap;
ud.Handles.text_FT=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','The Transfer Function of the Addtional (Notch) Filter', ...
'Style','text', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_FT_Fcn = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@edit_RM_Callback,gco}, ...
'HorizontalAlignment','left');
set(ud.Handles.check_FT, 'UserData', [ud.Handles.frame_FT, ud.Handles.text_FT, ud.Handles.edit_FT_Fcn] );
% For Nonlinearity Compensation part
% the frame
% frmWid=TextWL+TextW;
Y=Y-Params.vBorder;
frmHt=2*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder;
frmBot=Y-frmHt;
ud.Handles.frame_NF = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
Y=Y-Vgap;
ud.Handles.text_NF=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'ForegroundColor','b', ...
'FontSize',10,...
'Position',[X0,Y, TextWL TextH], ...
'String','Nonlinear Pre-compensation Function g(y) ', ...
'Style','text', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_NF = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Tag','y', ...
'Callback',{@edit_NF_Callback,gco}, ...
'HorizontalAlignment','left');
set(ud.Handles.check_NL, 'UserData', ...
[ud.Handles.frame_NF, ud.Handles.text_NF, ud.Handles.edit_NF] );
% For the buttons
Y=Y-Vgap;
BW = Params.ButtonW; % button width
BH = Params.ButtonH;
XGap = BW/2;
Y0 = BH/2;
X0 = 1/2+(0.5-BW*2.5)/2;
% Add window buttons
ud.Handles.OKButton = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'Position',[X0 Y0 BW BH], ...
'FontWeight','bold', ...
'Callback',{@button_OK_Controller},...
'String','Apply');
% 'BackgroundColor',[0.7 1 1], ...
X0 = X0 + BW + XGap;
ud.Handles.CancelButton = uicontrol('Parent',ThisFig, ...
'Callback','close(gcbf)',...
'Unit',Params.StdUnit,...
'Position',[X0 Y0 BW BH], ...
'FontWeight','bold', ...
'String','Cancel');
% 'BackgroundColor',[1 1 0.7], ...
% Fill the initial controller data
handles=ud.Handles;
FB_choice = cnfdb.Controller.FB_choice;
switch FB_choice
case 1
callback_radio_choice(handles.radio_FB_gain);
case 2
callback_radio_choice(handles.radio_FB_H2);
case 3
callback_radio_choice(handles.radio_FB_poles);
end
FB_poles=cnfdb.Controller.FB_poles;
if isempty(cnfdb.Entry.F)
set(handles.edit_FB_gain,'String', matrix2str(cnfdb.Controller.FB_F));
else
set(handles.edit_FB_gain,'String', cnfdb.Entry.F);
end
set(handles.edit_FB_epsilon,'String', num2str(FB_poles(1)));
if size(FB_poles,2) >=3
set(handles.edit_FB_poles,'String', matrix2str(FB_poles(2:3)));
end
set(handles.check_IC, 'Value', cnfdb.Controller.IC_in);
if cnfdb.Controller.IC_in==0
set(get(handles.check_IC,'UserData'), 'Visible', 'off');
end
if size(FB_poles,2) >=4
if size(FB_poles,2)>=5
intpg=FB_poles(4:5);
else
intpg=[FB_poles(4) 1];
end
set(handles.edit_Integral, 'String', matrix2str(intpg));
end
set(handles.check_CNF, 'Value', cnfdb.Controller.ctrl_type);
if cnfdb.Controller.ctrl_type==0
set(get(handles.check_CNF, 'UserData'), 'Visible', 'off');
end
set(handles.edit_CNF_W,'String', matrix2str(cnfdb.Controller.CNF_W));
ov_type=cnfdb.Controller.OV_type;
set(handles.radio_OV_none,'Value',(ov_type==0));
set(handles.radio_OV_full,'Value',(ov_type==1));
set(handles.radio_OV_reduced,'Value',(ov_type==2));
if ov_type==0
set(obv_gain,'Visible','off');
end
ov_choice=cnfdb.Controller.OV_choice;
switch ov_choice
case 1
callback_radio_choice(handles.radio_OV_gain);
case 2
callback_radio_choice(handles.radio_OV_H2);
case 3
callback_radio_choice(handles.radio_OV_butter);
end
if isempty(cnfdb.Entry.K)
set(handles.edit_OV_gain, 'String', matrix2str(cnfdb.Controller.OV_K) );
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -