⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctsigedt.m

📁 ADSP TOOLBOX: Version 2.0 and gui m-files
💻 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 + -