www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wpdtool.m
function varargout = wpdtool(option,varargin) %WPDTOOL Wavelet packets display tool. % VARARGOUT = WPDTOOL(OPTION,VARARGIN) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96. % Last Revision 01-Nov-2012. % Copyright 1995-2012 The MathWorks, Inc. % Test inputs. %------------- if nargin==0 , option = 'create'; end [option,winAttrb] = utguidiv('ini',option,varargin{:}); % MemBloc1 of stored values. %--------------------------- n_miscella = 'WpDisp_Misc'; ind_graph_area = 1; ind_wave_fam = 2; ind_wave_nam = 3; ind_maxnum = 4; ind_refinement = 5; nb1_stored = 5; % Tag property of objects. %------------------------- tag_prec_val = 'Prec_Val'; tag_cmd_frame = 'Cmd_Frame'; tag_pop_mod = 'Pop_Mod'; tag_display = 'Display'; tag_pus_inf1 = 'Pus_Inf1'; tag_pus_inf2 = 'Pus_Inf2'; switch option case 'create' % Get Globals. %------------- [Def_Txt_Height,Def_Btn_Height,Def_Btn_Width, ... Pop_Min_Width,X_Spacing,Y_Spacing,Def_FraBkColor] = ... mextglob('get',... 'Def_Txt_Height','Def_Btn_Height','Def_Btn_Width', ... 'Pop_Min_Width','X_Spacing','Y_Spacing','Def_FraBkColor' ... ); % Window initialization. %---------------------- win_title = getWavMSG('Wavelet:divGUIRF:WPWSys_Name'); [win_loctool,pos_win,win_units,str_numwin,... pos_frame0,Pos_Graphic_Area] = ... wfigmngr('create',win_title,winAttrb,'ExtFig_WDisp',mfilename); if nargout>0 , varargout{1} = win_loctool; end % Add Help for Tool. %------------------ wfighelp('addHelpTool',win_loctool, ... getWavMSG('Wavelet:divGUIRF:WPT_Name'),'WPDI_GUI'); % Add Help Item. %---------------- wfighelp('addHelpItem',win_loctool, ... getWavMSG('Wavelet:divGUIRF:Building_WPT'),'WPDI_BUILDING'); wfighelp('addHelpItem',... win_loctool,getWavMSG('Wavelet:divGUIRF:WP_Atoms'),'WPDI_ATOMS'); % Begin waiting. %--------------- set(wfindobj('figure'),'Pointer','watch'); % General graphical parameters initialization. %-------------------------------------------- dx = X_Spacing; dx2 = 2*dx; dy = Y_Spacing; dy2 = 2*dy; d_txt = (Def_Btn_Height-Def_Txt_Height); push_width = (pos_frame0(3)-4*dx)/2; % Position property of objects. %------------------------------ xlocINI = pos_frame0([1 3]); ybottomINI = pos_win(4)-1.5*Def_Btn_Height-dy2; y_low = ybottomINI-2*Def_Btn_Height; x_left = pos_frame0(1)+dx2; pos_prec_txt = [x_left, y_low+d_txt/2, 1.5*Def_Btn_Width, Def_Txt_Height]; x_left = x_left+1.5*Def_Btn_Width+dx; pos_prec_val = [x_left , y_low , Def_Btn_Width , Def_Btn_Height]; x_left = pos_frame0(1)+dx2; y_low = y_low-2*Def_Btn_Height; pos_txt_mod = [x_left , y_low , 2.5*Def_Btn_Width , Def_Btn_Height]; y_low = y_low-Def_Btn_Height; x_left = pos_frame0(1)+(pos_frame0(3)-Pop_Min_Width)/2; pos_pop_mod = [x_left , y_low , Pop_Min_Width+dx , Def_Btn_Height]; w_uic = 3*push_width/2; xborder = (pos_frame0(3)-w_uic)/2; x_left = pos_frame0(1)+xborder; y_low = pos_prec_txt(2)-7*Def_Btn_Height; pos_display = [x_left , y_low , w_uic , 2*Def_Btn_Height]; y_low = y_low-3*Def_Btn_Height; x_left = pos_frame0(1)+dx2; pos_inf_txt = [x_left , y_low , 2.5*Def_Btn_Width , Def_Btn_Height]; pos_pus_inf1 = pos_display; pos_pus_inf1(2) = pos_inf_txt(2)-2*Def_Btn_Height-dy; pos_pus_inf2 = pos_pus_inf1; pos_pus_inf2(2) = pos_pus_inf1(2)-3*Def_Btn_Height; % pos_pus_inf1(1) = pos_pus_inf1(1)-xborder/2; % pos_pus_inf1(3) = pos_pus_inf1(3)+xborder; % String property of objects. %---------------------------- str_mod_txt = getWavMSG('Wavelet:divGUIRF:WPDISP_ModTxt'); str_pop_mod = ['1 ' ; '2 ' ; '3 ' ; '4 ' ; '5 ' ; '6 ' ; '7 ' ; '8 ' ; ... '9 ' ; '10' ; '11' ; '12' ; '13' ; '14'] ; str_display = getWavMSG('Wavelet:commongui:Str_Display'); str_inf_txt = getWavMSG('Wavelet:divGUIRF:StrInfo_On'); str_inf1 = getWavMSG('Wavelet:divGUIRF:StrWavFAM','(HAAR)'); str_inf2 = getWavMSG('Wavelet:divGUIRF:W_System'); str_prec_txt = getWavMSG('Wavelet:divGUIRF:Str_Refinement'); str_prec_val = ['5 ' ; '6 ' ; '7 ' ; '8 ' ; '9 ' ; '10' ; '11' ; '12']; % Command part construction of the window. %----------------------------------------- utanapar('create',win_loctool, ... 'xloc',xlocINI,'bottom',ybottomINI,... 'datflag',0,'levflag',0,... 'wtype','owt' ... ); comFigProp = {'Parent',win_loctool,'Units',win_units}; comPopProp = [comFigProp,'Style','Popup']; comPusProp = [comFigProp,'Style','pushbutton']; comTxtProp = [comFigProp,'Style','Text', ... 'HorizontalAlignment','left','BackgroundColor',Def_FraBkColor]; Tooltip = getWavMSG('Wavelet:divGUIRF:NbIter_forWP'); txt_prec_txt = uicontrol(comTxtProp{:}, ... 'Position',pos_prec_txt,... 'String',str_prec_txt,... 'TooltipString',Tooltip ... ); pop_prec_val = uicontrol(comPopProp{:},... 'Position',pos_prec_val,... 'String',str_prec_val,... 'Value',4,... 'TooltipString',Tooltip,... 'Tag',tag_prec_val... ); txt_mod_txt = uicontrol(comTxtProp{:},... 'Position',pos_txt_mod,... 'String',str_mod_txt... ); pop_mod_dis = uicontrol(comPopProp{:},... 'Position',pos_pop_mod,... 'String',str_pop_mod,... 'Value',6,... 'Tag',tag_pop_mod... ); pus_display = uicontrol(comPusProp{:},... 'Position',pos_display,... 'String',str_display,... 'Tag',tag_display... ); uicontrol(comTxtProp{:},... 'Position',pos_inf_txt,... 'String',str_inf_txt... ); pus_inf1 = uicontrol(comPusProp{:},... 'Position',pos_pus_inf1,... 'String',str_inf1,... 'Tag',tag_pus_inf1... ); pus_inf2 = uicontrol(comPusProp{:},... 'Position',pos_pus_inf2,... 'String',str_inf2,... 'Tag',tag_pus_inf2... ); % Callbacks update. %------------------ utanapar('set_cba_num',win_loctool,pus_display); [pop_fam,pop_num] = utanapar('handles',win_loctool,'fam','num'); cb_fam = get(pop_fam,'Callback'); cb_num = get(pop_num,'Callback'); cba_upd_fam = [mfilename '(''upd_fam'',' str_numwin ');']; cba_update = [mfilename '(''new'',' str_numwin ');']; cba_draw_1d = [mfilename '(''draw1d'',' str_numwin ');']; cba_inf1 = [mfilename '(''inf1'',' str_numwin ');']; cba_inf2 = [mfilename '(''inf2'',' str_numwin ');']; set(pop_fam,'Callback',[cb_fam , cba_upd_fam]); set(pop_num,'Callback',[cb_num , cba_update]); set(pop_prec_val,'Callback',cba_update); set(pop_mod_dis,'Callback',cba_update); set(pus_display,'Callback',cba_draw_1d); set(pus_inf1,'Callback',cba_inf1); set(pus_inf2,'Callback',cba_inf2); % Setting units to normalized. %----------------------------- Pos_Graphic_Area = wfigmngr('normalize',win_loctool, ... Pos_Graphic_Area,'On'); % Add Context Sensitive Help (CSHelp). %------------------------------------- hdl_WPDI_GUI = [txt_prec_txt,pop_prec_val,txt_mod_txt,pop_mod_dis]; wfighelp('add_ContextMenu',win_loctool,hdl_WPDI_GUI,'WPDI_GUI'); %------------------------------------- % Memory for stored values. %-------------------------- wmemtool('ini',win_loctool,n_miscella,nb1_stored); wmemtool('wmb',win_loctool,n_miscella,... ind_graph_area,Pos_Graphic_Area,... ind_wave_fam,'haar', ... ind_wave_nam,'haar', ... ind_maxnum,6, ... ind_refinement,0 ... ); % End waiting. %------------- set(wfindobj('figure'),'Pointer','arrow'); case 'upd_fam' %**********************************************************% %** OPTION = 'upd_fam' - UPDATE OF THE WAVELET FAMILY **% %**********************************************************% win_loctool = varargin{1}; new = wpdtool('new',win_loctool); if new==0 , return; end % Handles of tagged objects. %--------------------------- pus_handles = findobj(win_loctool,'Style','pushbutton'); pus_inf1 = findobj(pus_handles,'Tag',tag_pus_inf1); % Set visible on or off the wavelet number if exists. %---------------------------------------------------- wav_nam = cbanapar('get',win_loctool,'wav'); [wav_fn,wav_fsn] = wavemngr('fields',wav_nam,'fn','fsn'); strPush = ... getWavMSG('Wavelet:divGUIRF:PusNamWav',wav_fn,upper(wav_fsn)); set(pus_inf1,'String',strPush); case 'inf1' %*****************************************% %** OPTION = 'inf1' - LOCAL INFORMATION **% %*****************************************% win_loctool = varargin{1}; % Getting wavelet. %----------------- wav_nam = cbanapar('get',win_loctool,'wav'); wav_fam = wavemngr('fam_num',wav_nam); infotxt = [deblankl(wav_fam) 'info.m']; [old_info,fig] = whelpfun('getflag'); if ~isempty(old_info) && isequal(infotxt,old_info) figure(fig); return; end % Waiting message. %----------------- wwaiting('msg',win_loctool,getWavMSG('Wavelet:commongui:WaitLoad')); [str_inf,fid] = wreadinf(infotxt,'noerror'); if fid==-1 msg = getWavMSG('Wavelet:commongui:ErrLoadFile',infotxt); errargt(mfilename,msg,'msg'); wwaiting('off',win_loctool); return else dim = size(str_inf); rowfam = str_inf(1,:); str_inf = str_inf(2:dim(1),:); col = 1; while all(str_inf(:,col)==' ') , col = col+1; end blk = ' ' ; str_inf = [rowfam ; ... str_inf(:,col:dim(2)) blk*ones(dim(1)-1,col-1) ]; end ftnsize = wmachdep('FontSize','winfo'); whelpfun('create',str_inf,infotxt,ftnsize); % End waiting. %------------- wwaiting('off',win_loctool); case 'inf2' %*****************************************% %** OPTION = 'inf2' - LOCAL INFORMATION **% %*****************************************% win_loctool = varargin{1}; % Handles of tagged objects. %--------------------------- infotxt = 'infowsys.m'; [old_info,fig] = whelpfun('getflag'); if ~isempty(old_info) && isequal(infotxt,old_info) figure(fig); return; end % Waiting message. %----------------- wwaiting('msg',win_loctool,getWavMSG('Wavelet:commongui:WaitLoad')); [str_inf,fid] = wreadinf(infotxt,'noerror'); if fid==-1 msg = getWavMSG('Wavelet:commongui:ErrLoadFile',infotxt); errargt(mfilename,msg,'msg'); wwaiting('off',win_loctool); return end ftnsize = wmachdep('FontSize','winfo'); whelpfun('create',str_inf,infotxt,ftnsize); % End waiting. %------------- wwaiting('off',win_loctool); case 'draw1d' %************************************************% %** OPTION = 'draw1d' - DRAW AXES IN 1D **% %************************************************% win_loctool = varargin{1}; [new,Wave_Fam,Wave_Nam,nb_func,prec_val] = wpdtool('new',win_loctool); if new==0 , return; end % Waiting message. %----------------- wwaiting('msg',win_loctool,getWavMSG('Wavelet:commongui:WaitCompute')); % Handles of tagged objects. %--------------------------- fra_handles = findobj(win_loctool,'Style','frame'); hdl_frame0 = findobj(fra_handles,'Tag',tag_cmd_frame); % Update parameters selection before drawing. %------------------------------------------- wmemtool('wmb',win_loctool,n_miscella, ... ind_wave_fam,Wave_Fam, ... ind_wave_nam,Wave_Nam, ... ind_maxnum,nb_func, ... ind_refinement,prec_val ... ); % General graphical parameters initialization. %-------------------------------------------- pos_g_area = wmemtool('rmb',win_loctool,n_miscella,ind_graph_area); pos_hdl_frame0 = get(hdl_frame0,'Position'); win_units = 'normalized'; pos_win = get(win_loctool,'Position'); bdx = 0.08*pos_win(3); bdy = 0.09*pos_win(4); bdy_d = bdy; bdy_u = bdy; w_graph = pos_hdl_frame0(1); h_graph = pos_g_area(4); % Computing and displaying wavelets and filters. %----------------------------------------------- wtype = wavemngr('type',Wave_Nam); if wtype==1 str_wintitle = ... getWavMSG('Wavelet:divGUIRF:NamWinWPDISP',Wave_Fam,Wave_Nam); else % End waiting. %------------- wwaiting('off',win_loctool); return; end nb_axes = nb_func+1; pos_axe = zeros(nb_func,4); if nb_axes<11 nb2 = ceil(nb_axes/2); w_axe = (w_graph-3*bdx)/2; h_axe = (h_graph-(nb2-1)*bdy-bdy_u-bdy_d)/nb2; x_left = bdx; y_low = pos_g_area(2)+pos_g_area(4)-bdy_u-h_axe; for k= 1:nb2 pos_axe(2*k-1,:) = [x_left,y_low,w_axe,h_axe]; pos_axe(2*k,:) = [x_left+w_axe+bdx,y_low,w_axe,h_axe]; y_low = y_low-h_axe-bdy; end else nb2 = ceil(nb_axes/3); w_axe = (w_graph-4*bdx)/3; h_axe = (h_graph-(nb2-1)*bdy-bdy_u-bdy_d)/nb2; x_left = bdx; y_low = pos_g_area(2)+pos_g_area(4)-bdy_u-h_axe; for k= 1:nb2 pos_axe(3*k-2,:) = [x_left,y_low,w_axe,h_axe] ; xl = x_left+w_axe+bdx; pos_axe(3*k-1,:) = [xl,y_low,w_axe,h_axe]; xl = xl+w_axe+bdx; pos_axe(3*k,:) = [xl,y_low,w_axe,h_axe]; y_low = y_low-h_axe-bdy; end end [wpws,xval] = wpfun(Wave_Nam,nb_func,prec_val); hdl_axe = zeros(1,nb_func); xaxis = [min(xval) max(xval)]; if ~isequal(get(0,'CurrentFigure'),win_loctool) figure(win_loctool); end for k= 1:nb_axes yaxis = [min(wpws(k,:))-eps max(wpws(k,:))+eps]; ecart = abs(yaxis(2)-yaxis(1))/20; yaxis(1) = yaxis(1)-ecart; yaxis(2) = yaxis(2)+ecart; hdl_axe(k) = axes(... 'Parent',win_loctool, ... 'Units',win_units, ... 'Position',pos_axe(k,:),... 'XLim',xaxis, ... 'YLim',yaxis, ... 'Box','On' ... ); %#ok<LAXES> line(... 'XData',xval,... 'YData',wpws(k,:),... 'Color','r',... 'Parent',hdl_axe(k)); if k==1 strlab = getWavMSG('Wavelet:divGUIRF:NamWPhiFun',k-1); elseif k==2 , strlab = getWavMSG('Wavelet:divGUIRF:NamWPsiFun',k-1); else strlab = getWavMSG('Wavelet:divGUIRF:NamWFunNum',k-1); end wtitle(strlab,'Parent',hdl_axe(k)); end % Display status line. %--------------------- wfigtitl('String',win_loctool,str_wintitle,'on'); % Axes attachment. %----------------- dynvtool('init',win_loctool,[],hdl_axe,[],[0 0]); % Setting units to normalized. %----------------------------- set(findobj(win_loctool,'Units','pixels'),'Units','normalized'); % End waiting. %------------- wwaiting('off',win_loctool); case 'new' %*************************************************% %** OPTION = 'new' - test drawing parameters **% %*************************************************% win_loctool = varargin{1}; % Handles of tagged objects. %--------------------------- pop_handles = findobj(win_loctool,'Style','popupmenu'); pop_mod_dis = findobj(pop_handles,'Tag',tag_pop_mod); pop_prec_val = findobj(pop_handles,'Tag',tag_prec_val); % Test Main parameters selection before drawing. %----------------------------------------------- Wave_Nam = cbanapar('get',win_loctool,'wav'); Wave_Fam = wavemngr('fam_num',Wave_Nam); prec_val = get(pop_prec_val,'Value')+4; ind = get(pop_mod_dis,'Value'); strnum = get(pop_mod_dis,'String'); nb_func = wstr2num(strnum(ind,:)); [wfam,wnam,maxn,raf] = wmemtool('rmb',win_loctool,n_miscella,... ind_wave_fam,ind_wave_nam,... ind_maxnum,ind_refinement); if raf~=prec_val || ~strcmp(wnam,Wave_Nam) || ... ~strcmp(wfam,Wave_Fam) || nb_func~=maxn varargout = {1,Wave_Fam,Wave_Nam,nb_func,prec_val}; else varargout = {0,Wave_Fam,Wave_Nam,nb_func,prec_val}; return end % Setting refinement to 0 (as flag). %---------------------------------- wmemtool('wmb',win_loctool,n_miscella,ind_refinement,0); % Cleaning the graphical part. %----------------------------- dynvtool('stop',win_loctool); axe_handles = findobj(get(win_loctool,'Children'),'flat', ... 'Type','axes','Visible','on'); delete(axe_handles); wfigtitl('vis',win_loctool,'off'); case 'demo' %*******************************************% %** OPTION = 'demo' - for DEMOS or TESTS **% %*******************************************% win_loctool = varargin{1}; Wave_Nam = varargin{2}; % Handles of tagged objects. %--------------------------- children = get(win_loctool,'Children'); uic_handles = findobj(children,'flat','Type','uicontrol'); pop_handles = findobj(uic_handles,'Style','popupmenu'); pop_prec_val = findobj(pop_handles,'Tag',tag_prec_val); pop_mod_dis = findobj(pop_handles,'Tag',tag_pop_mod); pus_handles = findobj(win_loctool,'Style','pushbutton'); pus_inf1 = findobj(pus_handles,'Tag',tag_pus_inf1); cbanapar('set',win_loctool,'wav',Wave_Nam); [Wave_Fam,tabNums] = wavemngr('fields',Wave_Nam,'fsn','tabNums'); if nargin>3 set(pop_prec_val,'Value',varargin{3}); if nargin>4 , set(pop_mod_dis,'Value',varargin{4}); end end wpdtool('new',win_loctool); if size(tabNums,1)>1 str_inf1 = getWavMSG('Wavelet:divGUIRF:Info_WV_2',Wave_Fam); else str_inf1 = getWavMSG('Wavelet:divGUIRF:Info_WV_1',Wave_Fam); end set(pus_inf1,'String',str_inf1); wpdtool('draw1d',win_loctool); case 'close' otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_ArgVal')); end