www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wp1dmngr.m

    function varargout = wp1dmngr(option,win_wptool,in3,in4,in5,in6,in7)
%WP1DMNGR Wavelet packets 1-D general manager.
%   OUT1 = WP1DMNGR(OPTION,WIN_WPTOOL,IN3,IN4,IN5,IN6,IN7)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision 01-Aug-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.17.4.11 $

% Default values.
%----------------
default_nbcolors = 128;

% Memory Blocks of stored values.
%================================
% MB0.
%-----
n_InfoInit   = 'WP1D_InfoInit';
ind_filename = 1;
ind_pathname = 2;

% MB1.
%-----
n_param_anal   = 'WP1D_Par_Anal';
ind_sig_name   = 1;
ind_wav_name   = 2;
ind_lev_anal   = 3;
ind_ent_anal   = 4;
ind_ent_par    = 5;
ind_sig_size   = 6;
ind_act_option = 7;
ind_thr_val    = 8;

% MB2.
%-----
n_wp_utils = 'WP_Utils';
ind_nb_colors = 6;

switch option
    case {'load_sig','import_sig'}
        switch option
            case 'load_sig'
                [sigInfos,Sig_Anal,ok] = utguidiv('load_sig',win_wptool,...
                     'Signal_Mask',getWavMSG('Wavelet:commongui:LoadSig'));
                if ~ok, return; end

            case 'import_sig'
                [sigInfos,Sig_Anal,ok] = wtbximport('wp1d');
                if ~ok, return; end
                if isa(Sig_Anal,'wptree')
                    wp1dmngr('load_dec',win_wptool,Sig_Anal,sigInfos.name);
                    return
                end
                option = 'load_sig';
        end
        wtbxappdata('set',win_wptool,...
            'Anal_Data_Info',{Sig_Anal,sigInfos.name});

        % Cleaning.
        %----------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitClean'));
        wp1dutil('clean',win_wptool,option,'');

        % Setting Analysis parameters.
        %-----------------------------
        wmemtool('wmb',win_wptool,n_param_anal, ...
                       ind_act_option,option,     ...
                       ind_sig_name,sigInfos.name,...
                       ind_sig_size,sigInfos.size ...
                       );
        wmemtool('wmb',win_wptool,n_InfoInit, ...
                       ind_filename,sigInfos.filename, ...
                       ind_pathname,sigInfos.pathname  ...
                       );
        wmemtool('wmb',win_wptool,n_wp_utils,...
                       ind_nb_colors,default_nbcolors);

        % Setting GUI values.
        %--------------------
        wp1dutil('set_gui',win_wptool,option);

        % Drawing.
        %---------
        wp1ddraw('sig',win_wptool,Sig_Anal);

        % Setting enabled values.
        %------------------------
        wp1dutil('Enable',win_wptool,option);

        % End waiting.
        %-------------
        wwaiting('off',win_wptool);

    case {'load_dec','import_dec'}
        switch option
            case 'load_dec'
                switch nargin
                    case 2
                        % Testing file.
                        %--------------
                        winTitle = getWavMSG('Wavelet:wp1d2dRF:LoadWP1D');
                        fileMask = {...
                            '*.wp1;*.mat' , 'Decomposition  (*.wp1;*.mat)';
                            '*.*','All Files (*.*)'};
                        [filename,pathname,ok] = ...
                            utguidiv('load_wpdec',win_wptool, ...
                                        fileMask,winTitle,2);
                        if ~ok, return; end

                        % Loading file.
                        %--------------
                        load([pathname filename],'-mat');
                        if ~exist('data_name','var')
                            data_name = 'no name';
                        end
                        if exist('tree_struct','var')
                            WP_Tree = tree_struct; %#ok<NODEF>
                        end

                    case {3,4}
                        WP_Tree = in3;
                        if nargin>3
                            data_name = in4; 
                        else
                            data_name = 'input var';
                        end
                end

            case 'import_dec'
                [ok,S,varName] = wtbximport('decwp1d'); %#ok<NASGU>
                if ok
                    WP_Tree = S.tree_struct;
                    if isa(WP_Tree,'wptree')
                        order = treeord(WP_Tree);
                        ok = isequal(order,2);
                    else
                        ok = false;
                    end
                end
                if ~ok, return; end
                data_name = S.data_name;
                option = 'load_dec';
        end

        % Cleaning.
        %----------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitClean'));
        wp1dutil('clean',win_wptool,option);

        % Getting Analysis parameters.
        %-----------------------------
        [Wave_Name,Ent_Name,Ent_Par,Signal_Size] = ...
                read(WP_Tree,'wavname','entname','entpar','sizes',0);
        Level_Anal  = treedpth(WP_Tree);
        Sig_Name = data_name;

        % Setting Analysis parameters
        %-----------------------------
        wmemtool('wmb',win_wptool,n_param_anal,  ...
                       ind_act_option,option,    ...
                       ind_sig_name,Sig_Name, ...
                       ind_wav_name,Wave_Name,   ...
                       ind_lev_anal,Level_Anal,  ...
                       ind_sig_size,Signal_Size, ...
                       ind_ent_anal,Ent_Name,    ...
                       ind_ent_par,Ent_Par       ...
                       );
        wmemtool('wmb',win_wptool,n_wp_utils,      ...
                       ind_nb_colors,default_nbcolors ...
                       );
        % Writing structures.
        %----------------------
        wtbxappdata('set',win_wptool,'WP_Tree',WP_Tree);
        wtbxappdata('set',win_wptool,'WP_Tree_Saved',WP_Tree);

        % Setting GUI values.
        %--------------------
        wp1dutil('set_gui',win_wptool,option);

        % Computing and Drawing Original Signal.
        %---------------------------------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitCompute'));
        Sig_Anal = wprec(WP_Tree);
        wp1ddraw('sig',win_wptool,Sig_Anal);

        % Decomposition drawing
        %----------------------
        wp1ddraw('anal',win_wptool);

        % Setting enabled values.
        %------------------------
        wp1dutil('Enable',win_wptool,option);

        % End waiting.
        %-------------
        wwaiting('off',win_wptool);

    case 'demo'
        % in3 = Sig_Name
        % in4 = Wave_Name
        % in5 = Level_Anal
        % in6 = Ent_Name
        % in7 = Ent_Par (optional)
        %--------------------------
        Sig_Name = deblank(in3);
        Wave_Name   = deblank(in4);
        Level_Anal  = in5;
        Ent_Name    = deblank(in6);
        if nargin==6 ,  Ent_Par = 0 ; else Ent_Par = in7; end

        % Loading file.
        %-------------
        filename = [Sig_Name '.mat'];       
        pathname = utguidiv('WTB_DemoPath',filename);
        [sigInfos,Sig_Anal,ok] = ...
            utguidiv('load_dem1D',win_wptool,pathname,filename);
        if ~ok, return; end

        % Cleaning.
        %----------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitClean'));
        wp1dutil('clean',win_wptool,option);

        % Setting Analysis parameters
        %-----------------------------
        wmemtool('wmb',win_wptool,n_param_anal,    ...
                       ind_act_option,option,      ...
                       ind_sig_name,sigInfos.name, ...
                       ind_wav_name,Wave_Name,     ...
                       ind_lev_anal,Level_Anal,    ...
                       ind_sig_size,sigInfos.size, ...
                       ind_ent_anal,Ent_Name,      ...
                       ind_ent_par,Ent_Par         ...
                        );
        wmemtool('wmb',win_wptool,n_InfoInit, ...
                       ind_filename,sigInfos.filename, ...
                       ind_pathname,sigInfos.pathname  ...
                       );
        wmemtool('wmb',win_wptool,n_wp_utils,      ...
                       ind_nb_colors,default_nbcolors ...
                       );

        % Setting GUI values.
        %--------------------
        wp1dutil('set_gui',win_wptool,option);

        % Drawing.
        %---------
        wp1ddraw('sig',win_wptool,Sig_Anal);

        % Calling Analysis.
        %-----------------
        wp1dmngr('step2',win_wptool,option);

        % Setting enabled values.
        %------------------------
        wp1dutil('Enable',win_wptool,option);

        % End waiting.
        %-------------
        wwaiting('off',win_wptool);

    case 'save_synt'
        % Testing file.
        %--------------
        [filename,pathname,ok] = utguidiv('test_save',win_wptool, ...
                                     '*.mat',getWavMSG('Wavelet:commongui:SaveSS'));
        if ~ok, return; end
        name  = strtok(filename,'.');

        % Begin waiting.
        %--------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitSave'));

        % Saving Synthesized Signal.
        %---------------------------
        [wname,valTHR] = wmemtool('rmb',win_wptool,n_param_anal, ...
            ind_wav_name,ind_thr_val); %#ok<NASGU,ASGLU>
        hdl_node = wpssnode('r_synt',win_wptool);
        if ~isempty(hdl_node)
            x = get(hdl_node,'UserData');        %#ok<NASGU>
        else
            WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
            x = wprec(WP_Tree); %#ok<NASGU>
        end
        
        try
            saveStr = name;
            eval([saveStr '= x ;']);
        catch %#ok<*CTCH>
            saveStr = 'x';
        end
        
        % Saving file.
        %--------------
        [name,ext] = strtok(filename,'.');
        if isempty(ext) || isequal(ext,'.')
            ext = '.mat'; filename = [name ext];
        end
        wwaiting('off',win_wptool);
        try
          save([pathname filename],saveStr,'valTHR','wname');
        catch
          errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg');
        end

    case 'save_dec'
         % Testing file.
        %--------------
         fileMask = {...
               '*.wp1;*.mat' , 'Decomposition  (*.wp1;*.mat)';
               '*.*','All Files (*.*)'};                
        [filename,pathname,ok] = utguidiv('test_save',win_wptool, ...
                           fileMask,getWavMSG('Wavelet:wp1d2dRF:SaveWP1D'));
        if ~ok, return; end

        % Begin waiting.
        %--------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitSaveDec'));

        % Getting Analysis parameters.
        %-----------------------------
        data_name = wmemtool('rmb',win_wptool,n_param_anal,ind_sig_name); %#ok<NASGU>

        % Reading structures.
        %--------------------
        tree_struct = wtbxappdata('get',win_wptool,'WP_Tree'); %#ok<NASGU>

        % Saving file.
        %--------------
        valTHR = wmemtool('rmb',win_wptool,n_param_anal,ind_thr_val); %#ok<NASGU>
        [name,ext] = strtok(filename,'.');
        if isempty(ext) || isequal(ext,'.')
            ext = '.wp1'; filename = [name ext];
        end
        saveStr = {'tree_struct','data_name','valTHR'};
        wwaiting('off',win_wptool);
        try
            save([pathname filename],saveStr{:});
        catch
            errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg');
        end
        
    case 'exp_wrks'
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitExport'));
        typeEXP = in3;
        switch typeEXP
            case 'sig'
                hdl_node = wpssnode('r_synt',win_wptool);
                if ~isempty(hdl_node)
                    x = get(hdl_node,'UserData');
                else
                    WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
                    x = wprec(WP_Tree);
                end
                wtbxexport(x,'name','sig_1D',...
                    'title',getWavMSG('Wavelet:commongui:Str_SS_Abrev'));

            case 'dec'
                [data_name,valTHR] = wmemtool('rmb',win_wptool,...
                        n_param_anal,ind_sig_name,ind_thr_val);
                tree_struct = wtbxappdata('get',win_wptool,'WP_Tree');
                S = struct(...
                    'tree_struct',tree_struct,...
                    'data_name',data_name,'valTHR',valTHR);
                wtbxexport(S,'name','dec_WP1D', ...
                    'title',getWavMSG('Wavelet:commongui:Str_Decomp'));
        end
        wwaiting('off',win_wptool);
        
    case 'anal'
        active_option = wmemtool('rmb',win_wptool,n_param_anal,ind_act_option);
        if ~strcmp(active_option,'load_sig')
            % Cleaning. 
            %----------
            wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitClean'));
            wp1dutil('clean',win_wptool,'load_sig','new_anal');
            wp1dutil('Enable',win_wptool,'load_sig');
        else
            wmemtool('wmb',win_wptool,n_param_anal,ind_act_option,'anal');
        end

        % Waiting message.
        %-----------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitCompute'));

        % Setting Analysis parameters
        %-----------------------------
        [Wave_Name,Level_Anal] = cbanapar('get',win_wptool,'wav','lev');
        [Ent_Name,Ent_Par,err] = utentpar('get',win_wptool,'ent');
        if err>0
            wwaiting('off',win_wptool);
            switch err
              case 1 , msg = getWavMSG('Wavelet:wp1d2dRF:ErrEntPar');
              case 2 , msg = getWavMSG('Wavelet:wp1d2dRF:ErrEntNam');
            end
            errargt(mfilename,msg,'msg');
            utentpar('set',win_wptool);
            return
        end
        wmemtool('wmb',win_wptool,n_param_anal, ...
            ind_wav_name,Wave_Name, ...
            ind_lev_anal,Level_Anal,...
            ind_ent_anal,Ent_Name,  ...
            ind_ent_par,Ent_Par     ...
            );

        % Calling Analysis.
        %------------------
        wp1dmngr('step2',win_wptool,option);

        % Setting enabled values.
        %------------------------
        wp1dutil('Enable',win_wptool,option);

        % End waiting.
        %-------------
        wwaiting('off',win_wptool);

    case 'step2'
        % Begin waiting.
        %---------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitCompute'));

        % Getting  Analysis parameters.
        %------------------------------
        [Sig_Name,Wave_Name,Level_Anal,Ent_Name,Ent_Par] = ...
                wmemtool('rmb',win_wptool,n_param_anal, ...
                               ind_sig_name, ...
                               ind_wav_name,ind_lev_anal, ...
                               ind_ent_anal,ind_ent_par);
        active_option = wmemtool('rmb',win_wptool,n_param_anal,ind_act_option);
        [filename,pathname] = wmemtool('rmb',win_wptool,n_InfoInit, ...
                                             ind_filename,ind_pathname);

        % Computing.
        %-----------   
        switch active_option
            case {'demo','anal'}
                try
                    load([pathname filename],'-mat');
                    Sig_Anal = eval(Sig_Name);
                catch
                    try
                        Anal_Data_Info = ...
                            wtbxappdata('get',win_wptool,'Anal_Data_Info');
                        Sig_Anal = Anal_Data_Info{1};
                    catch
                        [Sig_Anal,ok] = utguidiv('direct_load_sig', ...
                            win_wptool,pathname,filename);
                        if ~ok
                            wwaiting('off',win_wptool);
                            msg = getWavMSG('Wavelet:commongui:ErrLoadFile',filename);
                            nam = getWavMSG('Wavelet:commongui:LoadERROR');
                            errordlg(msg,nam,'modal');
                            return
                        end

                    end
                end

            case 'load_dec'       % second time only for load_dec
                Sig_Anal = get(wp1ddraw('r_orig',win_wptool),'YData');
                WP_Tree  = wtbxappdata('get',win_wptool,'WP_Tree'); %#ok<NASGU>
        end
        WP_Tree = wpdec(Sig_Anal,Level_Anal,Wave_Name,Ent_Name,Ent_Par);

        % Writing structures.
        %----------------------
        wtbxappdata('set',win_wptool,'WP_Tree',WP_Tree);
        wtbxappdata('set',win_wptool,'WP_Tree_Saved',WP_Tree);

        % Decomposition drawing
        %----------------------
        wp1ddraw('anal',win_wptool);

        % End waiting.
        %-------------
        wwaiting('off',win_wptool);

    case 'comp'
        mousefrm(0,'watch');
        drawnow;
        wp1dutil('Enable',win_wptool,option);
        fig = feval('wp1dcomp','create',win_wptool);
        if nargout>0 , varargout{1} = fig; end

    case 'deno'
        mousefrm(0,'watch');
        drawnow;
        wp1dutil('Enable',win_wptool,option);
        fig = feval('wp1ddeno','create',win_wptool);
        if nargout>0 , varargout{1} = fig; end        

    case {'return_comp','return_deno'}
        % in3 = 1 : preserve compression
        % in3 = 0 : discard compression
        % in4 = hdl_line (optional)
        %--------------------------------------
        if in3==1
            % Begin waiting.
            %--------------
            wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitDraw'));

            if strcmp(option,'return_comp')
                namesig = 'cs';
            else
                namesig = 'ds';
            end
            wpssnode('plot',win_wptool,namesig,1,in4,[]);

            % End waiting.
            %-------------
            wwaiting('off',win_wptool);
        end
        wp1dutil('Enable',win_wptool,option);

    otherwise
        errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
        error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
end