www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/dw1dtrem.m
function out1 = dw1dtrem(option,win_dw1dtool,in3,in4) %DW1DTREM Discrete Wavelet 1-D tree mode manager. % OUT1 = DW1DTREM(OPTION,WIN_DW1DTOOL,IN3,IN4) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96. % Last Revision: 10-Jun-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.18.4.10 $ % MemBloc1 of stored values. %--------------------------- n_param_anal = 'DWAn1d_Par_Anal'; % ind_sig_name = 1; ind_sig_size = 2; ind_lev_anal = 4; ind_axe_ref = 5; ind_ssig_type = 7; % MemBloc4 of stored values. %--------------------------- n_miscella = 'DWAn1d_Miscella'; ind_graph_area = 1; % ind_view_mode = 2; % ind_savepath = 3; % nb4_stored = 3; % Tag property of objects. %------------------------- tag_pus_anal = 'Pus_Anal'; tag_axe_sig = 'Axe_Sig_Tre'; tag_axe_ele = 'Axe_Ele_Tre'; % tag_axe_tre = 'Axe_Tree_Tre'; tag_axe_txt = 'Axe_Txt_Tre'; tag_s_tre = 'S_tre'; tag_ss_tre = 'SS_Tre'; tag_ele_tre = 'Ele_Tre'; tag_app = 'App_Tre'; tag_det = 'Det_Tre'; axe_handles = findobj(get(win_dw1dtool,'Children'),'flat','Type','axes'); % txt_a_handles = findobj(axe_handles,'Type','text'); switch option case 'ssig' % in3 = chk_handle %----------------- [flg_s_ss,ccfs] = dw1dvmod('get_vm',win_dw1dtool,5); val = get(in3,'Value'); flg_s_ss(2) = val; dw1dvmod('set_vm',win_dw1dtool,5,flg_s_ss,ccfs); ss_tre = findobj(axe_handles,'Tag',tag_ss_tre); if val==0 set(ss_tre,'Visible','off'); else set(ss_tre,'Visible','on'); end ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type); if strcmp(ss_type,'ss') msgKey = 'Str_S_SS'; elseif strcmp(ss_type,'cs') msgKey = 'Str_S_CS'; elseif strcmp(ss_type,'ds') msgKey = 'Str_S_DS'; end if val==1 str_title = getWavMSG(['Wavelet:commongui:',msgKey]); else str_title = getWavMSG('Wavelet:commongui:Str_Sig'); end axe_sig = findobj(axe_handles,'flat','Tag',tag_axe_sig); wtitle(str_title,'Parent',axe_sig); case 'view' % in3 = old_mode or ... % in3 = -1 : same mode % in3 = 0 : clean %------------------------- % in4 = level (optional) %------------------------- % Get Globals. %------------- % Terminal_Prop = mextglob('get','Terminal_Prop'); old_mode = in3; [Level_Anal,Signal_Size] = ... wmemtool('rmb',win_dw1dtool,n_param_anal,... ind_lev_anal,ind_sig_size); if nargin==3 , level = Level_Anal; else level = in4; end %#ok<NASGU> v_flg = dw1dvmod('get_vm',win_dw1dtool,5); vis_str = getonoff(v_flg); v_s = vis_str{1}; v_ss = vis_str{2}; axe_sig = findobj(axe_handles,'flat','Tag',tag_axe_sig); if isempty(axe_sig) dw1dtrem('axes',win_dw1dtool); axe_handles = findobj(win_dw1dtool,'Type','axes'); axe_sig = findobj(axe_handles,'flat','Tag',tag_axe_sig); end axe_ele = findobj(axe_handles,'flat','Tag',tag_axe_ele); axe_txt = findobj(axe_handles,'flat','Tag',tag_axe_txt); set([axe_sig axe_ele axe_txt],'Visible','On'); s_tre = findobj(axe_sig,'Tag',tag_s_tre); ss_tre = findobj(axe_sig,'Tag',tag_ss_tre); ele_tre = findobj(axe_ele,'Tag',tag_ele_tre); ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type); switch ss_type case 'ss' , msgKey = 'SS'; case 'cs' , msgKey = 'CS'; case 'ds' , msgKey = 'DS'; end if v_flg(1)==1 if v_flg(2)==1 msgKey = ['Str_S_' msgKey]; else msgKey = 'Str_Sig'; end else if v_flg(2)==1 msgKey = ['Str_' msgKey]; else msgKey = ''; end end if ~isempty(msgKey) str_title = getWavMSG(['Wavelet:commongui:' msgKey]); else str_title = ''; end if isempty(s_tre) [x,ymin,ymax] = dw1dfile('sig',win_dw1dtool,1); xmin = 1; xmax = length(x); set(axe_sig,'XLim',[xmin xmax]); col = wtbutils('colors','sig'); line(... 'XData',xmin:xmax,... 'YData',x,... 'Color',col,... 'Visible',v_s,... 'Tag',tag_s_tre,... 'Parent',axe_sig); set(axe_sig,'YLim',[ymin ymax]); else set(s_tre,'Visible',v_s); end if isempty(ss_tre) [x,ymin,ymax] = dw1dfile('ssig',win_dw1dtool,1); ylim = get(axe_sig,'YLim'); if ylim(1)<ymin , ymin = ylim(1); end if ylim(2)>ymax , ymax = ylim(2); end col = wtbutils('colors','ssig'); xmin = 1; xmax = length(x); line(... 'XData',xmin:xmax,... 'YData',x,... 'Color',col,... 'Visible',v_ss,... 'Tag',tag_ss_tre,... 'Parent',axe_sig); set(axe_sig,'YLim',[ymin,ymax]); else set(ss_tre,'Visible',v_ss); end wtitle(str_title,'Parent',axe_sig); col_app = wtbutils('colors','app',Level_Anal); col_det = wtbutils('colors','det',Level_Anal); if isempty(ele_tre) [x,ymin,ymax] = dw1dfile('app',win_dw1dtool,Level_Anal,3); axe = axe_ele; xmin = 1; xmax = length(x); line(... 'Parent',axe, ... 'XData',xmin:xmax,'YData',x, ... 'Color',col_app(Level_Anal,:), ... 'UserData',Level_Anal,'Tag',tag_ele_tre); set(axe,'YLim',[ymin ymax]); wtitle(getWavMSG('Wavelet:dw1dRF:AppRec',Level_Anal),'Parent',axe); else set(ele_tre,'Visible','on'); end push = findobj(win_dw1dtool,'Style','pushbutton','Tag',tag_pus_anal); A_or_S = get(push,'String'); A_or_S = lower(A_or_S(1)); xdiv = 4; ydiv = 12; xa = 1/xdiv; xd = (xdiv-1)/xdiv; y = 1/ydiv; dy = (ydiv-2)/(ydiv*Level_Anal); col = get(axe_txt,'Xcolor'); lineWidth = 1; line(... 'Parent',axe_txt, ... 'XData',[xa xa], ... 'YData',[1/ydiv (ydiv-1)/ydiv], ... 'LineWidth',lineWidth, ... 'Color',col ... ); for k = 1:Level_Anal line(... 'Parent',axe_txt, ... 'XData',[xa xd], ... 'YData',[y y+dy], ... 'LineWidth',lineWidth, ... 'Color',col ... ); y = y+dy; end if A_or_S=='a' , sens = -1; else sens = 1; end y = 1/ydiv+dy/2; lon = 0.03; scaleX = sens*lon; scaleY = sens*lon; alpha = pi/4; theta = pi/2; betaP = theta+alpha; betaM = theta-alpha; for k = 1:Level_Anal xx = xa + [0 , scaleX*cos(betaP) , NaN , 0 , scaleX*cos(betaM)]'; yy = y + [0 , scaleY*sin(betaP) , NaN , 0 , scaleY*sin(betaM)]'; line(... 'Parent',axe_txt,... 'XData',xx,'YData',yy,... 'LineWidth',lineWidth,'Color',col); y = y+dy; end old_u = get(axe_txt,'Units'); set(axe_txt,'Units','pixels'); pos = get(axe_txt,'Position'); set(axe_txt,'Units',old_u); tp = mextglob('get','Terminal_Prop'); mul = (tp(1)*pos(3))/(tp(2)*pos(4)); y = 1/ydiv+dy/2; xm = (xa+xd)/2; lon = 0.02; scaleX = 2*sens*lon; scaleY = sens*lon; alpha = atan(dy/((xd-xa)*mul)); theta = alpha; betaP = theta+alpha; betaM = theta-alpha; for k = 1:Level_Anal xx = xm + [0 , scaleX*cos(betaP) , NaN , 0 , scaleX*cos(betaM)]'; yy = y + [0 , scaleY*sin(betaP) , NaN , 0 , scaleY*sin(betaM)]'; line(... 'Parent',axe_txt,... 'XData',xx,'YData',yy,... 'LineWidth',lineWidth,'Color',col); y = y+dy; end y = 1/ydiv; Ps = [xa;y]; Pa = [xa*ones(1,Level_Anal) ; y+dy*(1:Level_Anal)]; Pd = [xd*ones(1,Level_Anal) ; y+dy*(1:Level_Anal)]; line(... 'Parent',axe_txt, ... 'XData',[Ps(1,:),Pa(1,:),Pd(1,:)], ... 'YData',[Ps(2,:),Pa(2,:),Pd(2,:)], ... 'LineStyle','none', ... 'Marker','.', ... 'MarkerSize',28, ... 'Color',col ... ); if A_or_S=='a' , wtitle(getWavMSG('Wavelet:dw1dRF:DWT_WT'),'Parent',axe_txt); sig_nam = 's'; else wtitle(getWavMSG('Wavelet:dw1dRF:IDWT_WT'),'Parent',axe_txt); sig_nam = 'ss'; end beg_cba = [mfilename '(''select'',' int2str(win_dw1dtool) ',']; y = 1/ydiv; fontsize = wmachdep('FontSize','normal',6,Level_Anal)+2; col = wtbutils('colors','sig'); xa = xa-0.5/xdiv; xd = xd+0.5/xdiv; commonProp = {... 'Parent',axe_txt, ... 'FontWeight','bold', ... 'FontSize',fontsize, ... 'HorizontalAlignment','center', ... 'VerticalAlignment','middle', ... 'Clipping','on' ... }; locProp = [commonProp, ... 'String', sig_nam, ... 'Position',[xa y 0], ... 'UserData',0, ... 'Color',col, ... 'Tag',tag_app ... ]; txt = text(locProp{:}); set(txt,'ButtonDownFcn',[beg_cba num2mstr(txt) ');']); y = y+dy; for k = 1:Level_Anal locProp = [commonProp, ... 'String',['a' wnsubstr(k)],... 'Position',[xa y 0], ... 'UserData',k, ... 'Color',col_app(k,:),... 'Tag',tag_app ... ]; txt = text(locProp{:}); set(txt,'ButtonDownFcn',[beg_cba num2mstr(txt) ');']); locProp = [commonProp, ... 'String',['d' wnsubstr(k)],... 'Position',[xd y 0], ... 'UserData',k, ... 'Color',col_det(k,:),... 'Tag',tag_det ... ]; txt = text(locProp{:}); set(txt,'ButtonDownFcn',[beg_cba num2mstr(txt) ');']); y = y+dy; end set(axe_txt,'Visible','on') % Axes attachment. %----------------- okNew = dw1dvdrv('test_mode',win_dw1dtool,'tre',old_mode); if okNew set([axe_sig axe_ele],'XLim',[1 Signal_Size]); dynvtool('init',win_dw1dtool,[],[axe_sig axe_ele],[],[1 0]); end % Reference axes used by stat. & histo & ... %------------------------------------------- wmemtool('wmb',win_dw1dtool,n_param_anal,ind_axe_ref,axe_sig); case 'axes' % in3 = level_view %----------------- % Axes Positions. %---------------- pos_graph = wmemtool('rmb',win_dw1dtool,n_miscella,ind_graph_area); pos_win = get(win_dw1dtool,'Position'); win_units = get(win_dw1dtool,'Units'); bdx = 0.05*pos_win(3); bdy = 0.06*pos_win(4); w_used = pos_graph(3)-3.5*bdx; h_used = pos_graph(4)-2*bdy; w_tre = w_used/3; h_tre = h_used; y_tre = pos_graph(2)+bdy; w_sig = (2*w_used)/3; h_sig = (h_used-2*bdy)/2; x_sig = bdx+w_tre+1.5*bdx; y_sig = y_tre+h_sig+2*bdy; pos_axe_tre = [bdx y_tre w_tre h_tre]; pos_axe_ele = [x_sig y_tre w_sig h_sig]; pos_axe_sig = [x_sig y_sig w_sig h_sig]; axes(... 'Parent',win_dw1dtool, ... 'Units',win_units, ... 'Visible','off', ... 'Position',pos_axe_sig, ... 'NextPlot','add', ... 'Box','On', ... 'Tag',tag_axe_sig ... ); axes(... 'Parent',win_dw1dtool, ... 'Units',win_units, ... 'Visible','off', ... 'Position',pos_axe_ele, ... 'Box','On', ... 'Tag',tag_axe_ele ... ); axes(... 'Parent',win_dw1dtool, ... 'Units',win_units, ... 'Visible','off', ... 'XLim',[0 1], ... 'YDir','reverse', ... 'YLim',[0 1], ... 'Position',pos_axe_tre, ... 'Box','On', ... 'XTick',[], ... 'YTick',[], ... 'XTickLabel',[], ... 'YTickLabel',[], ... 'Tag',tag_axe_txt ... ); case 'select' % in3 = txt_handle %------------------ selectType = get(win_dw1dtool,'SelectionType'); if ~isequal(selectType,'normal') , return; end mousefrm(0,'watch') axe_sig = findobj(axe_handles,'flat','Tag',tag_axe_sig); axe_ele = findobj(axe_handles,'flat','Tag',tag_axe_ele); usr = get(in3,'UserData'); col = get(in3,'Color'); if usr~=0 tag = get(in3,'Tag'); if strcmp(tag,tag_app) , app = 1; else app = 0; end end delete(get(axe_ele,'Children')); if usr==0 push = findobj(win_dw1dtool,'Style','pushbutton','Tag',tag_pus_anal); A_or_S = get(push,'String'); A_or_S = lower(A_or_S(1)); if A_or_S=='a' , str_title = getWavMSG('Wavelet:dw1dRF:SigAppLev0'); else str_title = getWavMSG('Wavelet:dw1dRF:SSigAppLev0'); end [x,ymin,ymax] = dw1dfile('sig',win_dw1dtool,1); elseif app [x,ymin,ymax] = dw1dfile('app',win_dw1dtool,usr,3); str_title = getWavMSG('Wavelet:dw1dRF:AppRec',usr); else [x,~,ymin,ymax] = dw1dfile('det',win_dw1dtool,usr,1); str_title = getWavMSG('Wavelet:dw1dRF:DetRec',usr); end xlim = get(axe_sig,'XLim'); xmin = 1; xmax = length(x); line(... 'XData',xmin:xmax,... 'YData',x,... 'Color',col,... 'UserData',usr,... 'Tag',tag_ele_tre,... 'Parent',axe_ele); set(axe_ele,'XLim',xlim,'YLim',[ymin ymax]); wtitle(str_title,'Parent',axe_ele) mousefrm(0,'arrow') case 'del_ss' lin_handles = findobj(axe_handles,'Type','line'); ss_sig = findobj(lin_handles,'Tag',tag_ss_tre); delete(ss_sig); case 'clear' dynvtool('stop',win_dw1dtool); axe_sig = findobj(axe_handles,'flat','Tag',tag_axe_sig); axe_ele = findobj(axe_handles,'flat','Tag',tag_axe_ele); axe_txt = findobj(axe_handles,'flat','Tag',tag_axe_txt); out1 = [axe_sig axe_ele axe_txt]; delete(out1); otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end