www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/dw1ddecm.m
function [out1,out2] = dw1ddecm(option,win_dw1dtool,in3,in4) %DW1DDECM Discrete wavelet 1-D full decomposition mode manager. % [OUT1,OUT2] = DW1DDECM(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.15.4.10 $ % MemBloc1 of stored values. %--------------------------- n_param_anal = 'DWAn1d_Par_Anal'; % ind_sig_name = 1; ind_sig_size = 2; ind_wav_name = 3; ind_lev_anal = 4; ind_axe_ref = 5; % ind_act_option = 6; ind_ssig_type = 7; % ind_thr_val = 8; % nb1_stored = 8; % 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_declev = 'Pop_DecLev'; % tag_txtdeclev = 'Txt_DecLev'; tag_axe_dec = 'Axe_Dec'; tag_txt_dec = 'Txt_Dec'; tag_s_dec = 'S_dec'; tag_ss_dec = 'SS_dec'; tag_a_dec = 'A_dec'; tag_d_dec = 'D_dec'; 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,2); val = get(in3,'Value'); flg_s_ss(2) = val; dw1dvmod('set_vm',win_dw1dtool,2,flg_s_ss,ccfs); ss_dec = findobj(axe_handles,'Tag',tag_ss_dec); Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal); num = Level_Anal+2; txt_dec = findobj(txt_a_handles,'UserData',num,'Tag',tag_txt_dec); if val==0 set(ss_dec,'Visible','off'); set(txt_dec,'String','s'); else set(ss_dec,'Visible','on'); ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type); set(txt_dec,'String',['s/' ss_type]); end case 'dec' wwaiting('msg',win_dw1dtool, ... getWavMSG('Wavelet:commongui:WaitCompute')); pop_handles = findobj(win_dw1dtool,'Style','popupmenu'); pop = findobj(pop_handles,'Tag',tag_declev); lev = get(pop,'Value'); a_dec = findobj(axe_handles,'Type','line','Tag',tag_a_dec); if ~isempty(a_dec) && lev~=get(a_dec,'UserData') delete(a_dec); a_dec = []; end if isempty(a_dec) , dw1ddecm('view',win_dw1dtool,-1,lev); end wwaiting('off',win_dw1dtool); case 'view' % in3 = old_mode or ... % in3 = -1 : same mode % in3 = 0 : clean %--------------------------- % in4 = level (optional) %--------------------------- old_mode = in3; [~,Level_Anal,Signal_Size] = ... wmemtool('rmb',win_dw1dtool,n_param_anal,... ind_wav_name,ind_lev_anal,ind_sig_size); if nargin==3 , level = Level_Anal; else level = in4; end v_flg = dw1dvmod('get_vm',win_dw1dtool,2); vis_str = getonoff(v_flg); v_s = vis_str{1}; v_ss = vis_str{2}; [axe_hdl,txt_hdl] = dw1ddecm('axes',win_dw1dtool,level); lin_handles = findobj(axe_hdl,'Type','line'); s_dec = findobj(lin_handles,'Tag',tag_s_dec); ss_dec = findobj(lin_handles,'Tag',tag_ss_dec); a_dec = findobj(lin_handles,'Tag',tag_a_dec); d_dec = findobj(lin_handles,'Tag',tag_d_dec); if ~isempty(a_dec) if level~=get(a_dec,'UserData') , delete(a_dec); a_dec = []; end end if ~isempty(d_dec) usr = get(d_dec,'UserData'); usr = cat(1,usr{:}); inv_d = d_dec(usr>level); if ~isempty(inv_d) , set(inv_d,'Visible','off'); end end % nb_axe = level+2; ind = [1:level,Level_Anal+1:Level_Anal+2]; set([axe_hdl(ind) txt_hdl(ind)],'Visible','On'); ind = Level_Anal+2; axAct = axe_hdl(ind); ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type); if v_flg(1)==1 if v_flg(2)==1 , txt = ['s/' ss_type]; else txt = 's'; end else if v_flg(2)==1 , txt = ss_type; else txt = ''; end end set(txt_hdl(ind),'String',txt); if isempty(s_dec) [x,ymin,ymax] = dw1dfile('sig',win_dw1dtool,1); xmin = 1; xmax = length(x); set(axe_hdl,'XLim',[xmin xmax]); axes(axAct); %#ok<*MAXES> col = wtbutils('colors','sig'); line('Parent',axAct,'XData',1:length(x),'YData',x,... 'Color',col,'Visible',v_s,'Tag',tag_s_dec); set(axAct,'YLim',[ymin ymax],'UserData',ind,'Tag',tag_axe_dec); else set(s_dec,'Visible',v_s); end if isempty(ss_dec) [x,ymin,ymax] = dw1dfile('ssig',win_dw1dtool,1); ylim = get(axAct,'YLim'); if ylim(1)<ymin , ymin = ylim(1); end if ylim(2)>ymax , ymax = ylim(2); end axes(axAct); col = wtbutils('colors','ssig'); line('Parent',axAct,'XData',1:length(x),'YData',x,... 'Color',col,'Visible',v_ss,'Tag',tag_ss_dec); set(axAct,'YLim',[ymin,ymax],'UserData',ind,'Tag',tag_axe_dec); else set(ss_dec,'Visible',v_ss); end ind = Level_Anal+1; axAct = axe_hdl(ind); if isempty(a_dec) [x,ymin,ymax] = dw1dfile('app',win_dw1dtool,level,3); col_app = wtbutils('colors','app',Level_Anal); line(... 'Parent',axAct, ... 'XData',1:length(x), ... 'YData',x, ... 'Color',col_app(level,:),... 'UserData',level,'Tag',tag_a_dec); set(axAct,'YLim',[ymin ymax],'Tag',tag_axe_dec); else set(a_dec,'Visible','on'); end set(txt_hdl(ind),'String',['a' wnsubstr(level)]); if isempty(d_dec) [x,set_ylim,ymin,ymax] = dw1dfile('det',win_dw1dtool,1:Level_Anal,1); col_det = wtbutils('colors','det',Level_Anal); for k = Level_Anal:-1:1 axe = axe_hdl(k); if k>level , vis = 'off'; else vis = 'on'; end line(... 'Parent',axe, ... 'XData',1:size(x,2), ... 'YData',x(k,:), ... 'Color',col_det(k,:), ... 'UserData',k, ... 'Visible',vis, ... 'Tag',tag_d_dec ... ); prop = {'UserData',k,'Tag',tag_axe_dec}; if set_ylim , prop = ['YLim',[ymin(k) ymax(k)],prop]; %#ok<*AGROW> end set(axe,prop{:}); end else set(d_dec(1:level),'Visible','on'); end set(axe_hdl(2:end),... 'XTickLabelMode','manual', ... 'XTickLabel',[] ... ); axeAct = axe_hdl(end); axes(axeAct); Sdec = ['s = a' int2str(level)]; for k =level:-1:1 Sdec = [Sdec ' + d' int2str(k)]; end wtitle(getWavMSG('Wavelet:dw1dRF:DecAtLev',level,Sdec),... 'Parent',axeAct); % Axes attachment. %----------------- okNew = dw1dvdrv('test_mode',win_dw1dtool,'dec',old_mode); if okNew set(axe_hdl,'XLim',[1 Signal_Size]); dynvtool('init',win_dw1dtool,[],axe_hdl,[],[1 0]); end % Reference axes used by stat. & histo & ... %------------------------------------------- wmemtool('wmb',win_dw1dtool,n_param_anal,ind_axe_ref,axe_hdl(1)); case 'axes' % in3 = level_view %----------------- Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal); if nargin==2 , in3 = Level_Anal; end % 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'); nb_axes_tot = Level_Anal+2; nb_axes = in3+2; [bdXLSPACE,bdXRSPACE] = mextglob('get','bdXLSpacing','bdXRSpacing'); bdxl = 1.5*bdXLSPACE*pos_win(3); bdxr = bdXRSPACE*pos_win(3); w_used = pos_graph(3)-bdxl-bdxr; bdy = 0.05*pos_win(4); ecy = 0.02*pos_win(4); h_used = (pos_graph(4)-2*bdy-(nb_axes-1)*ecy)/nb_axes; pos_axe = [bdxl pos_graph(2)+bdy w_used h_used]; pos_axe = pos_axe(ones(1,nb_axes),:); y_axe = pos_axe(1,2); for k=2:nb_axes y_axe = y_axe+h_used+ecy; pos_axe(k,2) = y_axe; end out1 = zeros(1,nb_axes_tot); out2 = zeros(1,nb_axes_tot); out1tmp = findobj(axe_handles,'flat','Tag',tag_axe_dec); fontsize = wtbutils('dw1d_DEC_PREFS'); if ~isempty(out1tmp) out2tmp = findobj(txt_a_handles,'Tag',tag_txt_dec); for k = 1:nb_axes_tot out1(k) = findobj(out1tmp,'flat','UserData',k); out2(k) = findobj(out2tmp,'UserData',k); end set([out1 out2],'Visible','off'); else axeProp = {... 'Parent',win_dw1dtool,... 'Units',win_units, ... 'Visible','off', ... 'NextPlot','add', ... 'Box','On', ... 'Tag',tag_axe_dec ... }; for k = 1:nb_axes_tot if k~=1 axeProp = {axeProp{:}, ... 'XTickLabelMode','manual','XTickLabel',[]}; %#ok<*CCAT> end out1(k) = axes(axeProp{:},'UserData',k); switch k case nb_axes_tot , txt_str = 's/ss'; case nb_axes_tot-1 , txt_str = 'a'; otherwise , txt_str = ['d' wnsubstr(k)]; end out2(k) = txtinaxe('create',... txt_str,out1(k),'l','off','bold',fontsize); set(out2(k),'UserData',k,'Tag',tag_txt_dec); end end for k = 1:nb_axes-2 set(out1(k),'Position',pos_axe(k,:)); txtinaxe('pos',out2(k)); end ind = nb_axes-2; for k = nb_axes_tot-1:nb_axes_tot ind = ind+1; set(out1(k),'Position',pos_axe(ind,:)); txtinaxe('pos',out2(k)); end case 'del_ss' lin_handles = findobj(axe_handles,'Type','line'); ss_sig = findobj(lin_handles,'Tag',tag_ss_dec); delete(ss_sig); case 'clear' dynvtool('stop',win_dw1dtool); out1 = wfindobj(axe_handles,'flat','Tag',tag_axe_dec); delete(out1); otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end