📄 pzdesedt.m
字号:
function pzdesedt(mode,cur_txt)
%MODEDT Signal editing for MODGUI
% 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(6:2:12);
%slds = ui(16:3:22);
%stat_bar = ui(61);
ele_mat = get(ui(1),'userdata');
ele_loc = get(ui(14),'userdata');
ele_axs = ui(2);
ele_sld = get(ele_axs,'userdata');
[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 = ['m=' num2str(ele_vec(2),2) ': '];
if ele_vec(1)==1
ele_str2 = ' Pole(s) ';
% if ele_vec(2)==1,
% ele_str2 = ' Pole ';
% else,
% ele_str2 = ' Poles ';
% end
else
ele_str2 = ' Zero(s) ';
% if ele_vec(2)==1,
% ele_str2 = ' Zero ';
% else,
% ele_str2 = ' Zeros ';
% end
end
ele_str3 = num2str(ele_vec(3),6);
imag_part=ele_vec(4);
if imag_part==0
ele_str4 = ' + j0';
else
ele_str4 = [' pm j' num2str(abs(ele_vec(4)),6)];
end
% ele_str4 = [' pm j' num2str(abs(ele_vec(4)),6)];
txt_str = [ele_str1,ele_str2,ele_str3,ele_str4];
if any(mode == [1,3]),
%HIGHLIGHTING MODE
%%%%%%%%%%%%%% NEW ADDITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% if mode == 1 & k == r, clr = 'g'; else clr = 'k'; end
clr='k';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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','pzdesedt(5)');
txt_ext = get(txt2,'extent');
if txt_ext(3) > 0.94, set(txt2,'fontsize',8); end
top = top - txt_ext(4);
else
% this code determines whether to update the operator text. it
% all depeneds if it was the first signal selected
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
end
end
if mode == 1,
set(ui(14),'userdata',k);
set(ui(3),'userdata',txt2);
end
if any(mode == [1,3]),
%%%%%%%%%%%%%%% NEW: CHANGE r>5 to r>4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if r > 4, set(ele_sld,'vis','on'); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
elseif mode == 4, % moving element list
val = get(ele_sld,'value');
set(ele_axs,'ylim',[0,1]+val);
%%%%%%%%%%%%%%% NEW: CHANGE r<=5 to r<=4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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');
% NEW ADDITIONS
%elseif mode == 5, % selecting an element
% cur_obj = gco;
% cur_par = get(cur_obj,'parent');
%%%%%%%%%%%% NEW ADDITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
colour=get(cur_obj,'color');
% if colour(2)==1; % color is [0 1 0]=green
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(13),'enable','on');
set(ui(14),'enable','off');
set(edts,'callback','');
% set(slds,'callback','');
% set(stat_bar,'string','ADD new signal or click on a signal to edit/delete.');
return,end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(get(cur_par,'chil'),'color','k');
data = get(cur_obj,'userdata');
% set([cur_obj,data(2)],'color','g');
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(14),'enable','on');
%%%%%%%%%%%%%% NEW ADDITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(ui(13),'enable','off');
% set(stat_bar,'string','To edit, enter new values. PRESS DEL to DELETE.');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(edts(1),'value',ele_mat(ele_loc,1));
% edts_val = ele_mat(ele_loc,1);
for k = 2:4,
set(edts(k),'string',num2str(ele_mat(ele_loc,k)));
end
for k = 1:4,
edts_val = ele_mat(ele_loc,k);
end
set(edts,'callback','pzdesedt(6)');
elseif any(mode == [6,10,11]), % editing an element via edit or slider
if length(ele_loc) | mode == 11,
edt = gco;
if edt==ui(6);
edt_val = get(edt,'value');
else
edt_val = str2num(get(edt,'string'));
end
if ~length(edt_val) & edt ~=ui(12),
errordlg('You must enter a VALID number.','Input Error');
return;
end
if edt==ui(8)
if rem(edt_val,1) | edt_val<1,
errordlg('Multiplicity must be a positive integer.','Input Error');
return;
end
end
cur_obj = get(ui(3),'userdata');
val1 = get(edts(1),'value');
val2 = str2num(get(edts(2),'string'));
val3 = str2num(get(edts(3),'string'));
val4 = str2num(get(edts(4),'string'));
if ~length(val4), val4 = 0; end
% if ~length(val2), val2 = 0; end
% if ~length(val3), val3 = 0; end
ele_mat(ele_loc,:) = [val1, val2, val3, val4];
set(ui(1),'userdata',ele_mat);
pzdesplt;
pzdesedt(2,cur_obj);
end
elseif mode == 7, % deleting an element
set(ui(13),'enable','on');
set(ui(14),'enable','off');
set(edts,'callback','');
% set(slds,'callback','pzdesedt(11)');
% removing element
ele_mat(ele_loc,:)=[];
set(ui(1),'userdata',ele_mat);
% set(stat_bar,'string','Deleting selected signal...');
pzdesplt;
pzdesedt(3);
% set(stat_bar,'string','Signal deleted. PRESS Add to UNDO.');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -