📄 ctsigedt.m
字号:
function ctsigedt(mode,cur_txt)
% CTSIGEDT Support file for CTSIGGUI
% ADSP Toolbox: Version 2.0
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998
f = gcf;
ui = get(f,'userdata');
%edts = ui(15:3:21);
edts = ui(15:3:27);
cust_edt = ui(63);
stat_bar = ui(61);
ele_mat = get(ui(1),'userdata');
top_axs = ui(29);
ele_loc = get(ui(14),'userdata');
ele_axs = get(ui(12),'userdata');
ele_sld = get(ele_axs,'userdata');
ele_typ = get(ui(5),'value');
[r,c] = size(ele_mat);
if any(mode == [1:3]), % displaying elements
if any(mode == [1,3]),
axes(ele_axs);
cla;
top = 0.8;
range = 1:r;
else
ele_loc = get(ui(14),'userdata');
range = ele_loc;
end
for k = range,
ele_vec = ele_mat(k,:);
ele_str1 = num2str(ele_vec(1),2);
ele_str2 = num2str(ele_vec(2),2);
ele_str3 = num2str(ele_vec(3),2);
ele_str4 = num2str(ele_vec(4),2);
ele_str5 = num2str(ele_vec(5),2);
ele_str7 = num2str(ele_vec(7),2);
ele_str9 = num2str(ele_vec(9),2);
if ele_vec(6) == 1, % general form
txt_str = genasig(ele_vec(1:5),'t');
elseif ele_vec(6) == 2, % Matlab array
if isnan(ele_vec(1)) | mode == 2
txt_str = get(cust_edt,'string');
else
txt_str = get(ele_vec(1),'userdata');
end
end
%%%%DELETED March 13,2000
if any(finite([ele_vec(7),ele_vec(9)])),
if finite(ele_vec(7)), ele_str7 = [',[',ele_str7];
else ele_str7 = [',(',ele_str7]; end
if finite(ele_vec(9)), ele_str9 = [ele_str9,']'];
else ele_str9 = [ele_str9,')']; end
txt_str = [txt_str,' ',ele_str7,',',ele_str9];
end
if any(mode == [1,3]),
clr='k';
axes(ele_axs);
if k ~= 1,
txt1 = text(0.05,top,'+','color',clr,'fontsize',10,...
'fontweight','bold','verti','top','horiz','center',...
'clipping','on');
else
txt1 = text(0,top,' ','vis','off');
end
txt2 = text(0.1,top,txt_str,'color',clr,'fontsize',10,...
'fontweight','bold','verti','top',...
'clipping','on','userdata',[k,txt1],...
'buttondownfcn','ctsigedt(5)');
txt_ext = get(txt2,'extent');
if txt_ext(3) > 0.94, set(txt2,'fontsize',8); end
top = top - txt_ext(4);
if ele_vec(6) == 2
axes(top_axs);
if isnan(ele_vec(1))
txt3 = text('vis','off');
set(txt3,'userdata',get(cust_edt,'string'));
ele_mat(k,1) = txt3;
elseif mode == 2
set(ele_mat(k,1),'userdata',get(cust_edt,'string'));
end
end
else
set(cur_txt,'string',txt_str);
txt_ext = get(cur_txt,'extent');
if txt_ext(3) > 0.94, set(cur_txt,'fontsize',8);
else set(cur_txt,'fontsize',10); end
if ele_vec(6) == 2
set(ele_vec(1),'userdata',get(cust_edt,'string'));
end
end
end
if mode == 1,
set(ui(14),'userdata',k);
set(ui(3),'userdata',txt2);
end
if any(mode == [1,3]),
if r > 4, set(ele_sld,'vis','on'); end
end
set(ui(1),'userdata',ele_mat);
elseif mode == 4, % moving element list
val = get(ele_sld,'value');
set(ele_axs,'ylim',[0,1]+val);
if val == 0 & r <= 4, set(ele_sld,'vis','off'); end
elseif mode == 5, % selecting an element
cur_obj = gco;
cur_par = get(cur_obj,'parent');
colour=get(cur_obj,'color');
if colour(3)==1, % color is [0 0 1]=blue
set(get(cur_par,'chil'),'color','k');
data = get(cur_obj,'userdata');
set([cur_obj,data(2)],'color','k');
set(ui(6),'enable','on');
set(ui(7),'enable','off');
set([edts,ui(13),cust_edt],'callback','');
set(ui([4,5,8,9,10,19]),'enable','on');
% set(stat_bar,'string','ADD signal or click on component to EDIT/DELETE');
return
end
set(get(cur_par,'chil'),'color','k');
data = get(cur_obj,'userdata');
set([cur_obj,data(2)],'color','b');
ele_loc = data(1);
set(ui(14),'userdata',ele_loc);
set(ui(3),'userdata',cur_obj);
set(ui(5),'value',ele_mat(ele_loc,6));
set(ui(6),'enable','off');
set(ui(7),'enable','on');
set(ui([4,5,8,9,10,19]),'enable','off');
set(stat_bar,'string',...
'EDIT values & click on component or click DEL to DELETE.');
if get(ui(10),'userdata') == 1,
ctsiggui(8,ele_loc);
elseif get(ui(10),'userdata') == 2,
convgui(8,ele_loc);
elseif get(ui(10),'userdata') == 3,
ctsysgui(8,ele_loc);
end
elseif mode == 6, % editing an element
if length(ele_loc),
edt = gco;
edt_st = get(edt,'string');
if edt==ui(13)
n_str = get(ui(13),'string');
if isempty(n_str)
errordlg('No values entered for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
n_val = eval(['[',n_str,']'],'[]');
if isempty(n_val)
errordlg('MATLAB syntax error for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
if length(n_val)~=2
errordlg('Signal range requires 2 values.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
minn=n_val(1);maxn=n_val(2);
if minn >= maxn,
errordlg('Signal range must be entered as min, max.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
end
problem=0;
if ele_typ==2,
if edt_st(1)=='W',
edt_st(1)=[];edt_str=edt_st;evalin('base',[edt_st ';'],'problem=1;')
if problem==0, edt_st=evalin('base',edt_st);
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
if get(ui(10),'userdata') == 3
if ~isstr(edt_st),
errordlg([edt_str ' is not a string variable.'],'Input Error');
return
end
end
end
end
t=[1,2];ttt=0;
if ~isstr(edt_st)
edt_val=edt_st;
else
eval(['[', edt_st, '];'],'ttt=1;');
if ttt==1
errordlg('MATLAB Syntax error.','Input Error');
return
end
edt_val = eval(['[', edt_st, ']']);
end
if ele_typ==2 & ~length(edt_val),
errordlg('No entry for x(t)!!','Input Error');
ele_vec=ele_mat(ele_loc,:);
txt_st = get(ele_vec(1),'userdata');
set(cust_edt,'string',txt_st);
return;
end
if ele_typ == 1 & edt==ui(21) & ~isempty(edt_st)
if rem(edt_val,1),
errordlg(' b must be an integer.','Input Error');
ele_vec=ele_mat(ele_loc,:);
set(ui(18),'string',num2str(ele_vec(2)));
return;
end
end
cur_obj = get(ui(3),'userdata');
% obtain local range values
n_str = get(ui(13),'string');
if isempty(n_str)
errordlg('No values entered for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
n_val = eval(['[',n_str,']'],'[]');
if isempty(n_val)
errordlg('MATLAB syntax error for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
if length(n_val)~=2
errordlg('Signal range requires 2 values.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
minn=n_val(1);maxn=n_val(2);
if minn >= maxn,
errordlg('Signal range must be entered as min, max.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
set(ui(13),'userdata',n_str);
val6 = get(ui(5),'value');
if val6 ~= 2
val1 = str2num(get(edts(1),'string'));
else
val1 = ele_mat(ele_loc,1);
end
val2 = str2num(get(edts(2),'string'));
val3 = str2num(get(edts(3),'string'));
val4 = str2num(get(edts(4),'string'));
val5 = str2num(get(edts(5),'string'));
val7 = minn; % min value of range
val8 = 1; % step value
val9 = maxn; % max value of range
if ~length(val2), val2 = 0; end
if ~length(val3), val3 = 0; end
if ~length(val4), val4 = 0; end
if ~length(val5), val5 = 0; end
if val6 == 2
xn_str = get(cust_edt,'string');
problem=0;if xn_str(1)=='W',
xn_str(1)=[];xn_st=xn_str;evalin('base',[xn_str ';'],'problem=1;')
if problem==0, xn_str=evalin('base',xn_str);
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
if get(ui(10),'userdata') == 3
if ~isstr(xn_str),
errordlg([xn_st ' is not a string variable.'],'Input Error');
return
end
end
end
r_str = get(ui(13),'string');
n = eval(['[',r_str,']']);
dn = str2num(get(ui(19),'string'));
if isempty(dn), dn=0.01;end
t = n(1):dn:n(2);
if isstr(xn_str)
xn_str = ['[',xn_str,']'];
ttt=0;
eval([xn_str ';'],'ttt=1;');
if ttt
errordlg('Incorrect Matlab Syntax.','Input Error');
return
end
xn_str=eval(xn_str);
end
if length(xn_str) ~= length(t) & length(xn_str) ~= 1
errordlg('Time and signal arrays have different length.','Input Error');
return
end
end
ele_mat(ele_loc,:) = [val1,val2,val3,val4,val5,val6,val7,val8,val9];
set(ui(1),'userdata',ele_mat);
ctsigedt(2,cur_obj);
ctsigplt(2);
plot_val=get(ui(10),'userdata');
if plot_val == 1,
ctoplt;
elseif plot_val == 3
drawnow;
ctsysplt;
end
end
elseif mode == 7, % deleting an element
set(ui(6),'enable','on');
set(ui(7),'enable','off');
set([edts,ui(13),cust_edt],'callback','');
set(ui([4,5,8,9,10,19]),'enable','on');
% removing element
ele_mat(ele_loc,:)=[];
set(ui(1),'userdata',ele_mat);
set(stat_bar,'string','Deleting selected signal...');
ctsigedt(3);
ctsigplt(2);
set(stat_bar,'string','Signal deleted. PRESS Add to UNDO.');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -