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

    function varargout = mdw1dutils(option,varargin)
%MDW1DUTILS Discrete wavelet Multisignal 1D Utilities.
%   VARARGOUT = MDW1DUTILS(OPTION,VARARGIN)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 25-Jun-2005.
%   Last Revision: 26-Sep-2012.
%   Copyright 1995-2012 The MathWorks, Inc.

%----------------------------------------------------
% OPTION Values:
%---------------
% 'data_INFO_MNGR'
% 'get_Sig_IDENT'
% 'set_Lst_DATA'
% 'lst_Colors'
% 'line_Blink'
% 'colors'
% 'numFORMAT'
% 'get_actPART'
%----------------------------------------------------
switch option
    case 'data_INFO_MNGR'
        optMNGR   = varargin{1};
        fig       = varargin{2};
        switch optMNGR
            case 'create'
                tool_NAME  = varargin{3};
                callingFIG = varargin{4};
                
                % Creating tool_ATTRB.
                %---------------------
                h = guihandles(fig);
                if isfield(h,'Pop_Show_Mode')
                    popMode = h.Pop_Show_Mode;
                    numMode = get(popMode,'Value');
                    nbMode = length(get(popMode,'String'));
                else
                    numMode = 0; nbMode = 0;
                end
                
                tool_ATTR = struct(...
                    'Name',tool_NAME,'State','INI','VisType','SIG',...
                    'plot_MODE','unique','First_Use',true,...
                    'dispMode',[numMode nbMode] ...
                    );
                wtbxappdata('set',fig,'tool_ATTR',tool_ATTR);
                
                % Creating Part IMPORT ATTR.
                %--------------------------
                wtbxappdata('set',fig,'PART_Import_ATTR',[]);
                if isequal(tool_NAME,'ORI')
                    wtbxappdata('set',fig,'SET_of_Partitions',[]);
                end

                % Creating Info Storage.
                %-----------------------                
                switch tool_NAME
                    case 'ORI'
                        fig_ORI  = fig; create_ORI  = true;
                        fig_DorC = fig; create_DorC = true;
                        
                    case {'CMP','DEN'}
                        fig_ORI  = callingFIG; create_ORI  = false;
                        fig_DorC = fig;         create_DorC = true;
                        
                    case {'STA','CLU'}
                        fig_ORI  = callingFIG; create_ORI  = false;
                        fig_DorC = callingFIG; create_DorC = false;
                        
                    case 'PAR'
                        fig_ORI  = callingFIG; create_ORI  = true;
                        fig_DorC = callingFIG; create_DorC = false;                        
                end
                fig_SEL = fig; create_SEL = true;
                fig_Storage = struct(...
                    'callingFIG',callingFIG,'fig_ORI',fig_ORI,...
                    'fig_DorC',fig_DorC,'fig_SEL',fig_SEL);
                wtbxappdata('set',fig,'fig_Storage',fig_Storage);
                
                % Creating Data Storage.
                %-----------------------                                
                if create_ORI
                    varargout{1} = struct(...
                        'siz_INI',[],'signal',[],'dir_DEC',[],'dwtDEC',[],...
                        'Energy',[],'tab_ENER',[],...
                        'siz_ORI',[],'lenSIG',[],'nbSIG',[]);
                    wtbxappdata('set',fig_ORI,'data_ORI',varargout{1});
                end
                if create_DorC
                    if create_ORI
                        varargout{2} = struct(...
                         'typ_DorC','','signal',[],'dir_DEC',[],'dwtDEC',[],...
                         'Energy',[],'tab_ENER',[],'threshold',[]);
                    else
                        data_ORI = wtbxappdata('get',fig_ORI,'data_ORI');
                        level = data_ORI.dwtDEC.level;
                        varargout{2} = struct(...
                            'typ_DorC',lower(tool_NAME),  ...
                            'signal',data_ORI.signal,     ...
                            'dir_DEC',data_ORI.dir_DEC,   ...
                            'dwtDEC',data_ORI.dwtDEC,     ...
                            'Energy',data_ORI.Energy,   ...
                            'tab_ENER',data_ORI.tab_ENER, ...
                            'threshold',zeros(data_ORI.siz_ORI(2),level));
                    end
                    wtbxappdata('set',fig_DorC,'data_DorC',varargout{2});
                end
                if create_SEL
                    if ~create_ORI
                        data_ORI = wtbxappdata('get',callingFIG,'data_ORI');
                        sel_DAT  = data_ORI.signal;
                    else
                        sel_DAT = [];
                    end
                    varargout{3} = struct('sel_DAT',sel_DAT,'Attrb_SEL',[]);
                    wtbxappdata('set',fig_SEL,'data_SEL',varargout{3});
                end
                
            case 'init'
                siz_INI    = varargin{3};
                sig_ORI    = varargin{4};
                dir_DEC    = varargin{5};
                flag_TRANS = varargin{6};
                if flag_TRANS , sig_ORI = sig_ORI'; end
                siz_ORI = size(sig_ORI);
                [nbSIG,lenSIG]= size(sig_ORI);
                data_ORI = struct(...
                    'siz_INI',siz_INI,...
                    'signal',sig_ORI,'dir_DEC',dir_DEC,'dwtDEC',[],...
                    'Energy',[],'tab_ENER',[],...
                    'siz_ORI',siz_ORI,'lenSIG',lenSIG,'nbSIG',nbSIG);
                data_DorC = struct('typ_DorC','',...
                    'signal',[],'dir_DEC',dir_DEC,'dwtDEC',[],...
                    'Energy',[],'tab_ENER',[],'threshold',[]);
                data_SEL  = struct('sel_DAT',sig_ORI,'Attrb_SEL',[]);
                mdw1dutils('data_INFO_MNGR','set',fig,...
                    'ORI',data_ORI,'DorC',data_DorC,'SEL',data_SEL);
                varargout{1} = lenSIG;
                
            case 'reset'
                data_ORI = wtbxappdata('get',fig,'data_ORI');
                data_ORI.dwtDEC = varargin{3};
                data_ORI.Energy = varargin{4};
                data_ORI.tab_ENER = varargin{5};
                data_DorC = struct('typ_DorC','',...
                    'signal',[],'dir_DEC',data_ORI.dir_DEC,'dwtDEC',[],...
                    'Energy',[],'tab_ENER',[],'threshold',[]);
                data_SEL = struct('sel_DAT',data_ORI.signal,'Attrb_SEL',[]);
                mdw1dutils('data_INFO_MNGR','set',fig,...
                    'ORI',data_ORI,'DorC',data_DorC,'SEL',data_SEL);
                
            case 'get'
                fig_Storage = wtbxappdata('get',fig,'fig_Storage');
                nbIN   = length(varargin);
                idxOUT = 1;
                varargout = cell(1,nbIN-2);
                for k = 3:nbIN
                    strARG = varargin{k};
                    f_data = fig_Storage.(['fig_' strARG]);
                    n_data = ['data_' strARG];
                    varargout{idxOUT} = wtbxappdata('get',f_data,n_data);
                    idxOUT = idxOUT + 1;
                end

            case 'set'
                fig_Storage = wtbxappdata('get',fig,'fig_Storage');
                nbIN   = length(varargin);
                for k = 3:2:nbIN
                    strARG = varargin{k};
                    f_data = fig_Storage.(['fig_' strARG]);
                    n_data = ['data_' strARG];
                    wtbxappdata('set',f_data,n_data,varargin{k+1});
                end
            
            case 'save'
                fig_Storage = wtbxappdata('get',fig,'fig_Storage');
                callingFIG = fig_Storage.callingFIG;
                f_data = fig_Storage.fig_DorC;
                n_data = 'data_DorC';
                data_DorC = wtbxappdata('get',f_data,n_data);
                wtbxappdata('set',callingFIG,n_data,data_DorC);
        end
        
    case 'get_Sig_IDENT' 
        % typVAL and typVAL_Num
        %----------------------
        % 's' = 0; 'a' = 1; 'd' = 2; 'ca' = 3; 'cd' = 4;
        %---------------------------------------------------
        % typSIG and typSIG_Num 
        %----------------------
        % 'ori' = 0; 'den' = 1; 'cmp' = 2; 'res' = 3;
        %------------------------------------------------------------------
        % Attrb_Lst_In_SEL = [num_SEL,num_SIG,typVAL_Num,levVAL,typSIG_Num];
        %------------------------------------------------------------------
        fig = varargin{1};
        Attrb_Lst_In_SEL = wtbxappdata('get',fig,'Attrb_Lst_In_SEL');
        if length(varargin)<2
            idxSEL = wtbxappdata('get',fig,'idxSIG_Plot');
        elseif isnumeric(varargin{2})
            idxSEL = varargin{2};
        else
            idxSEL = 1:size(Attrb_Lst_In_SEL,1);
        end
        nbSEL  = length(idxSEL);
        Attrb_Lst = Attrb_Lst_In_SEL(idxSEL,:);        
        numDwtType = Attrb_Lst(:,3);
        numSigType = Attrb_Lst(:,5);
        typeSIG = {'o','d','c','r'};
        typeDWT = {'S','A','D','a','d'};
                
        sigType = repmat(typeSIG{1},nbSEL,1);        
        for k = 1:3
            idx = numSigType==k;
            if any(idx) , sigType(idx,:) = typeSIG{k+1}; end
        end

        dwtType = repmat(typeDWT{1},nbSEL,1);        
        for k = 1:4
            idx = numDwtType==k;
            if any(idx) , dwtType(idx,:) = typeDWT{k+1}; end
        end
        
        switch nargout
            case 1
                varargout{1} = [Attrb_Lst(:,2),dwtType,sigType,Attrb_Lst(:,4)];
            case 2
                varargout = {dwtType,sigType};
            otherwise
                varargout = {Attrb_Lst(:,2),dwtType,sigType,Attrb_Lst(:,4)};

        end
        
    case 'set_Lst_DATA'
        handles = varargin{1};
        mode    = varargin{2};
        switch mode
            case 'init'
                item = getWavMSG('Wavelet:mdw1dRF:Orig_Signals');
            case 'reset'  , 
                item = getWavMSG('Wavelet:mdw1dRF:Orig_Signals');
                lst = handles.Lst_SIG_DATA; tool = 'NON';
            case 'select' , 
                [item,lst,tool] = deal(varargin{3:5});
        end        
        set(handles.Edi_Selected_DATA,'String',{item});
        
        switch mode
            case 'init'
                set(handles.Lst_SIG_DATA,'Value',1)

            case {'reset','select'}
                Edi_FCol = get(lst,'ForegroundColor');
                h2Color = [...
                    handles.Edi_Selected_DATA,handles.Edi_TIT_VISU_DEC,...
                    handles.Edi_TIT_SEL,handles.Edi_TIT_VISU];
                switch tool
                    case 'ORI' , h2Color = [h2Color , handles.Edi_TIT_PAN_INFO];
                    case 'STA' , h2Color = [h2Color , handles.Edi_TIT_STA];
                end
                set(h2Color,'ForegroundColor',Edi_FCol);
        end

    case 'lst_Colors'
        varargout{1} = struct('sig',[170 100 20]/255,'cfs',[15 130 130]/255);
        
    case 'line_Blink'
        hLine = varargin{1};
        try %#ok<*TRYNC>
            for k = 1:2
                set(hLine,'Visible','Off'); pause(0.15);
                set(hLine,'Visible','On');  pause(0.20);
            end
        end
        
    case 'colors'
        % syn_COL = [1 0.9 0]/1.075;     
        syn_COL = [1 0 1]/1.05;
        res_COL = [1 0.70 0.28]/1.1;
        % thr_COL = 0.3*[1 1 1];
        thr_COL = [128 64 0]/255;
        
        varargout{1} = struct(...
            'sig',[1 0 0],'app',[0 0 1],'det',[0 1 0],    ...
            'den',syn_COL,'cmp',syn_COL,'d_OR_c',syn_COL, ...
            'res',res_COL,'thr',thr_COL,'tLD',[1 0 0],   ...
            'N0',[1 0 0.8]/1.2,'L2',[0 0 1]/1.2);
        if isempty(varargin) , return; end
        type = varargin{1};
        if isequal(type,'all')
            tmp = struct2cell(varargout{1});
            varargout{1} = cat(1,tmp{:});
        else
            varargout{1} = varargout{1}.(type);
        end
        if length(varargin)>1 , varargout{1} = 0.8*varargout{1}; end

    case 'LinW'
        LinW.N0 = 1;
        LinW.L2 = 1;
        LinW.THR = 2;
        varargout = {LinW};
        
    case 'numFORMAT'
        nbIN = length(varargin);
        formatNum_Ener = '%0.4g';
        formatPER = '%6.2f%%';
        switch nbIN
            case 0
                intFormat = '%3.0f';
                formatNum = '%8.3f';
                formatSTR = '%4.0f';
                varargout = ...
                    {formatNum,formatPER,formatNum_Ener,...
                     intFormat,formatSTR};

            case 1
                if isnumeric(varargin{1});
                    maxVAL = double(varargin{1});
                    if maxVAL>0
                        nb_digit = ceil(log10(maxVAL));
                    else
                        nb_digit = 3;
                    end
                    if nb_digit<=-1 , nb_digit = -1; end
                    switch nb_digit
                        case {-1,0,1,2} , formatNum = '%9.3f';    
                        case 3 ,       formatNum = '%9.3f';
                        case 4 ,       formatNum = '%9.3f';
                        otherwise ,    formatNum = formatNum_Ener;
                    end
                    varargout = {formatNum,formatPER,formatNum_Ener};
                else % Scientific format
                    varargout = {formatNum_Ener};
                end
        end

    case 'get_actPART'
        fig = varargin{1};
        act_PART = wtbxappdata('get',fig,'active_PART');
        act_PART_FLAG = ~isempty(act_PART);
        if ~act_PART_FLAG
            act_PART = blockdatamngr('get',fig,'current_PART');
        end
        varargout = {act_PART,act_PART_FLAG};
end