www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/mdw1dcomp.m
function varargout = mdw1dcomp(varargin) %MDW1DCOMP Discrete wavelet Multisignal 1D Analysis Tool. % VARARGOUT = MDW1DCOMP(VARARGIN) % Last Modified by GUIDE v2.5 30-Aug-2006 18:02:27 % % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 29-Mar-2005. % Last Revision: 10-Jun-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.1.6.10 $ $Date: 2013/07/05 04:31:04 $ %*************************************************************************% % BEGIN initialization code - DO NOT EDIT % % ---------------------------------------- % %*************************************************************************% gui_Singleton = 0; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @mdw1dcomp_OpeningFcn, ... 'gui_OutputFcn', @mdw1dcomp_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end %*************************************************************************% % END initialization code - DO NOT EDIT % %*************************************************************************% %*************************************************************************% % BEGIN Opening Function % % ---------------------- % % --- Executes just before mdw1dcomp is made visible. % %*************************************************************************% function mdw1dcomp_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % Choose default command line output for mdw1dcomp handles.output = hObject; % Update handles structure guidata(hObject,handles); %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% % TOOL INITIALISATION Introduced manualy in the automatic generated code % %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% Init_Tool(hObject,eventdata,handles,varargin{:}); %*************************************************************************% % END Opening Function % %*************************************************************************% %*************************************************************************% % BEGIN Output Function % % --------------------- % % --- Outputs from this function are returned to the command line. % %*************************************************************************% function varargout = mdw1dcomp_OutputFcn(hObject,eventdata,handles) %#ok<INUSL> % varargout cell array for returning output args (see VARARGOUT); % Get default command line output from handles structure varargout{1} = handles.output; %*************************************************************************% % END Output Function % %*************************************************************************% %=========================================================================% % BEGIN Callback Functions % % ------------------------ % %=========================================================================% %%%%%%%%%%%%%%%%%%%%%%%%%%% % Manual CALLBACKS: Begin % %%%%%%%%%%%%%%%%%%%%%%%%%%% %-------------------------------------------------------------------------- function Pus_ENA_MAN_Callback(hObject,eventdata,handles) %#ok<DEFNU> fig = handles.Current_Fig; flag_MAN = get(hObject,'UserData'); if isempty(flag_MAN) , flag_MAN = true; else flag_MAN = ~flag_MAN; end to_HIDE = [handles.Pan_LST_DATA, ... handles.Pus_Compute_ALL,handles.Pus_Compute_RESET]; to_ENA = [... handles.Pus_Compress,... handles.Txt_APP_KEEP,handles.Rad_YES,handles.Rad_NO, ... handles.Txt_THR_TYPE,handles.Rad_SOFT,handles.Rad_HARD,... handles.Pus_CloseWin ... ]; if flag_MAN tool_STATE = 'CMP_MAN'; wtbxappdata('set',fig,'flag_modify_THR',false); data_ORI = mdw1dutils('data_INFO_MNGR','get',fig,'ORI'); level = wgfields(data_ORI,'level'); set(handles.Edi_MAN_THR,'UserData',NaN(1,level)); idxSIG_SEL = wtbxappdata('get',fig,'idxSIG_SEL'); if isempty(idxSIG_SEL) idxSIG_SEL = 1; wtbxappdata('set',fig,'idxSIG_SEL',idxSIG_SEL); end threshold = ... blockdatamngr('get',fig,'data_DorC','threshold'); wtbxappdata('set',fig,'SAVED_threshold',threshold); thrTMP = threshold(idxSIG_SEL,:); set(handles.Pop_MAN_SIG,'UserData',thrTMP); strPOP = num2cell(int2str(idxSIG_SEL(:)),2); strPOP = [getWavMSG('Wavelet:commongui:Str_All');strPOP]; nbSTR = length(strPOP); if nbSTR>1 , valPOP = 2; else valPOP = 1; end set(handles.Pop_MAN_SIG,'String',strPOP,'Value',valPOP); set(handles.Edi_Selected_DATA,'Enable','On') set(to_ENA,'Enable','Off') set(to_HIDE,'Visible','Off') mdw1dafflst('CMP',[],eventdata,handles,'init'); valPOP = get(handles.Pop_MAN_TYP_THR,'Value'); switch valPOP case 1 , Show_Mode = 'lvlThr'; case 2 , Show_Mode = 'glbThr'; end %------------------------------------------------------------------- strPUS = getWavMSG('Wavelet:mdw1dRF:Disable_MAN_THR'); set(hObject,'String',strPUS,'UserData',flag_MAN); blockdatamngr('set',fig,'tool_ATTR','State',tool_STATE); %------------------------------------------------------------------- mdw1dmngr('setDispMode',handles.Pop_Show_Mode,eventdata,handles,... 'CMP','MAN',Show_Mode); mdw1dmisc('show',handles,'MAN_THR','INI') set(handles.Pan_MAN_THR,'Visible','On'); else modify_THR = wtbxappdata('get',fig,'flag_modify_THR'); if modify_THR msg = getWavMSG('Wavelet:mdw1dRF:Quest_KeepThrValue'); Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes'); Str_No = getWavMSG('Wavelet:commongui:Str_No'); ... Str_Cancel = getWavMSG('Wavelet:commongui:Str_Cancel'); BtnName = questdlg(msg,getWavMSG('Wavelet:mdw1dRF:Modif_THR_VAL'), ... Str_Yes,Str_No,Str_Cancel,Str_Yes); ... switch BtnName case Str_Cancel , return; case Str_Yes case Str_No threshold = wtbxappdata('get',fig,'SAVED_threshold'); blockdatamngr('set',fig,'data_DorC',... 'threshold',threshold); mdw1dafflst('CMP',[],[],handles,'init') end wtbxappdata('set',fig,'flag_modify_THR',false); end tool_STATE = 'CMP_ON'; set(handles.Pan_MAN_THR,'Visible','Off'); Edi_ToClean = [... handles.Edi_L2_PERF,handles.Edi_N0_PERF, ... handles.Edi_MAN_THR,handles.Edi_MAN_GLB_THR]; set(Edi_ToClean,'String',''); set(handles.Edi_Selected_DATA,'Enable','Inactive') set(to_ENA,'Enable','On') set(to_HIDE,'Visible','On') %------------------------------------------------------------------- strPUS = getWavMSG('Wavelet:mdw1dRF:Pus_ENA_MAN'); set(hObject,'String',strPUS,'UserData',flag_MAN); blockdatamngr('set',fig,'tool_ATTR','State',tool_STATE); %------------------------------------------------------------------- MAN_TYP_THR = get(handles.Pop_MAN_TYP_THR,'Value'); switch MAN_TYP_THR case 1 , endARG = 'lvlThr_END'; case 2 , endARG = 'glbThr_END'; end mdw1dmngr('setDispMode',handles.Pop_Show_Mode,eventdata,handles,... 'CMP','MAN',endARG); end %-------------------------------------------------------------------------- function ENA_MAN_Func(handles) Pus_MAN = handles.Pus_ENA_MAN; flag_MAN = get(Pus_MAN,'UserData'); if isempty(flag_MAN) || ~flag_MAN , return; end fig = handles.Current_Fig; to_HIDE = [handles.Pan_LST_DATA, ... handles.Pus_Compute_ALL,handles.Pus_Compute_RESET]; to_ENA = [... handles.Pus_Compress,handles.Txt_THR_TYPE,... handles.Rad_SOFT,handles.Rad_HARD,handles.Pus_CloseWin ... ]; tool_STATE = 'CMP_MAN'; strPUS = getWavMSG('Wavelet:mdw1dRF:Disable_MAN_THR'); data_ORI = mdw1dutils('data_INFO_MNGR','get',fig,'ORI'); level = wgfields(data_ORI,'level'); set(handles.Edi_MAN_THR,'UserData',NaN(1,level)); idxSIG_SEL = wtbxappdata('get',fig,'idxSIG_SEL'); if isempty(idxSIG_SEL) idxSIG_SEL = 1; wtbxappdata('set',fig,'idxSIG_SEL',idxSIG_SEL); end threshold = ... blockdatamngr('get',fig,'data_DorC','threshold'); thrTMP = threshold(idxSIG_SEL,:); set(handles.Pop_MAN_SIG,'UserData',thrTMP); strPOP = num2cell(int2str(idxSIG_SEL(:)),2); strPOP = [getWavMSG('Wavelet:commongui:Str_All');strPOP]; nbSTR = length(strPOP); if nbSTR>1 , valPOP = 2; else valPOP = 1; end set(handles.Pop_MAN_SIG,'String',strPOP,'Value',valPOP); set(handles.Edi_Selected_DATA,'Enable','On') set(Pus_MAN,'String',strPUS); set(to_ENA,'Enable','Off') set(to_HIDE,'Visible','Off') % mdw1dmngr('setDispMode',handles.Pop_Show_Mode,[],handles,... % 'CMP','MAN','lvlThr_END'); blockdatamngr('set',fig,'tool_ATTR','State',tool_STATE); mdw1dshow('Show_DEC_Fun',fig,[],handles,'CMP') set(handles.Pan_MAN_THR,'Visible','On'); valPOP = get(handles.Pop_MAN_TYP_THR,'Value'); if valPOP==2 , mdw1dmisc('show',handles,'MAN_THR','INI_GLB'); end %-------------------------------------------------------------------------- function Pop_MAN_SIG_Callback(hObject,eventdata,handles) %#ok<INUSD,DEFNU> %-------------------------------------------------------------------------- function Edi_MAN_THR_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val_THR = str2double(get(hObject,'String')); if isnan(val_THR) , set(hObject,'String',''); return; end fig = handles.Current_Fig; wtbxappdata('set',fig,'flag_modify_THR',true); mdw1dmisc('show',handles,'MAN_THR','EDI',val_THR) %-------------------------------------------------------------------------- function Pop_MAN_LEV_Callback(hObject,eventdata,handles) %#ok<INUSD,DEFNU> %-------------------------------------------------------------------------- function Pus_MAN_Show_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> flag_SHOW = get(hObject,'UserData'); if isempty(flag_SHOW) , flag_SHOW = false; end flag_SHOW = ~flag_SHOW; set(hObject,'UserData',flag_SHOW); uic_2 = [... handles.Rad_MAN_ALL,handles.Txt_MAN_SEL,... handles.Pop_MAN_TYP_THR,handles.Pop_MAN_SIG... ]; hdl_LVL = [... handles.Txt_MAN_LEV,handles.Pop_MAN_LEV,... handles.Txt_MAN_THR,handles.Edi_MAN_THR ... ]; hdl_GLB = [... handles.Txt_MAN_GLB_THR,handles.Edi_MAN_GLB_THR,... handles.Txt_L2_PERF,handles.Edi_L2_PERF,handles.Txt_Per_PerL2,... handles.Txt_N0_PERF,handles.Edi_N0_PERF,handles.Txt_Per_PerN0]; if flag_SHOW uic_ON = uic_1; uic_OF = [uic_2,hdl_LVL,hdl_GLB]; strPUS = getWavMSG('Wavelet:mdw1dRF:Hide_Thresholds'); else valPOP = get(handles.Pop_MAN_TYP_THR,'Value'); switch valPOP case 1 , uic_ON = [uic_2,hdl_LVL]; uic_OF = hdl_GLB; case 2 , uic_ON = [uic_2,hdl_GLB]; uic_OF = hdl_LVL; end strPUS = getWavMSG('Wavelet:mdw1dRF:Show_Thresholds'); end set(uic_OF,'Visible','Off'); set(uic_ON,'Visible','On'); set(hObject,'String',strPUS); %-------------------------------------------------------------------------- function Edi_MAN_GLB_THR_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val_THR = str2double(get(hObject,'String')); if isnan(val_THR) , set(hObject,'String',''); return; end if val_THR<0 val_THR = 0; set(hObject,'String','0'); end fig = handles.Current_Fig; wtbxappdata('set',fig,'flag_modify_THR',true); mdw1dmisc('show',handles,'MAN_THR','EDI_GLB',val_THR) %-------------------------------------------------------------------------- function Edi_L2_PERF_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val_THR = str2double(get(hObject,'String')); if isnan(val_THR) , set(hObject,'String',''); return; end if val_THR<0 val_THR = 0; set(hObject,'String','0'); elseif val_THR>100 val_THR = 100; set(hObject,'String','100'); end fig = handles.Current_Fig; wtbxappdata('set',fig,'flag_modify_THR',true); mdw1dmisc('show',handles,'MAN_THR','EDI_L2',val_THR) %-------------------------------------------------------------------------- function Edi_N0_PERF_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val_THR = str2double(get(hObject,'String')); if isnan(val_THR) , set(hObject,'String',''); return; end if val_THR<0 val_THR = 0; set(hObject,'String','0'); elseif val_THR>100 val_THR = 100; set(hObject,'String','100'); end fig = handles.Current_Fig; wtbxappdata('set',fig,'flag_modify_THR',true); mdw1dmisc('show',handles,'MAN_THR','EDI_N0',val_THR) %-------------------------------------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%% % Manual CALLBACKS: END % %%%%%%%%%%%%%%%%%%%%%%%%%%% %-------------------------------------------------------------------------- function Rad_APP_Callback(hObject,eventdata,handles,typeCALL) %#ok<INUSL,DEFNU> switch typeCALL case 'YES' , newdata = [1,0]; case 'NO' , newdata = [0,1]; end set(handles.Rad_YES,'Value',newdata(1)) set(handles.Rad_NO,'Value',newdata(2)) %-------------------------------------------------------------------------- function Rad_THR_Callback(hObject,eventdata,handles,typeCALL) %#ok<INUSL,DEFNU> switch typeCALL case 'SOFT' , newdata = [1,0]; case 'HARD' , newdata = [0,1]; end set(handles.Rad_SOFT,'Value',newdata(1)) set(handles.Rad_HARD,'Value',newdata(2)) %-------------------------------------------------------------------------- function Pus_Compute_THR_Callback(hObject,eventdata,handles,typeCALL) %#ok<INUSL,DEFNU> % Get figure handle. %------------------- fig = handles.output; switch typeCALL case 'ALL' , idxSIG = getWavMSG('Wavelet:commongui:Str_All'); case 'SEL' , idxSIG = wtbxappdata('get',fig,'idxSIG_SEL'); case 'RESET', idxSIG = getWavMSG('Wavelet:commongui:Str_All'); % not used end if isempty(idxSIG) , return; end % Get Wavelet Decomposition. %--------------------------- data_ORI = mdw1dutils('data_INFO_MNGR','get',fig,'ORI'); dec_ORI = data_ORI.dwtDEC; level = dec_ORI.level; % Compressing and Storing %------------------------ threshold = blockdatamngr('get',fig,'data_DorC',... 'threshold'); cmp_PERF = wtbxappdata('get',fig,'cmp_PERF'); L2_Perf = cmp_PERF{1}; N0_Perf = cmp_PERF{2}; % Get Compression Parameters. %--------------------------- val_S_or_H = get(handles.Rad_SOFT,'Value'); switch val_S_or_H case 0 , S_or_H = 'h'; case 1 , S_or_H = 's'; end keepAPP = logical(get(handles.Rad_YES,'Value')); nameMETH = get_parMETH(handles); % Get Parameters. %---------------- if ~isequal(typeCALL,'RESET') % Computing %---------- wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCompute')); switch nameMETH case {'rem_n0','bal_sn','sqrtbal_sn'} par_METH = {nameMETH,S_or_H,keepAPP}; case {'L2_perf','N0_perf','glb_thr',... 'scarcehi','scarceme','scarcelo','scarce'} input_VAL = str2double(get(handles.Edi_GLB_PAR,'String')); par_METH = {nameMETH,input_VAL,S_or_H,keepAPP}; otherwise error('Wavelet:FunctionArgVal:Invalid_ArgVal', ... getWavMSG('Wavelet:FunctionArgVal:Invalid_ArgVal')) end [THR_VAL,L2_Perf_VAL,N0_Perf_VAL] = ... mswcmptp(dec_ORI,par_METH{:},idxSIG); if ischar(idxSIG) , idxSIG = 1:size(threshold,1); end switch nameMETH case {'rem_n0','bal_sn','sqrtbal_sn','L2_perf','N0_perf','glb_thr'} THR_VAL = THR_VAL(:,ones(1,level)); case {'scarcehi','scarceme','scarcelo','scarce'} end threshold(idxSIG,:) = THR_VAL; L2_Perf(idxSIG) = L2_Perf_VAL; N0_Perf(idxSIG) = N0_Perf_VAL; set(handles.Edi_MAN_THR,'String',num2str(THR_VAL(1),'%10.5f')); set(handles.Edi_MAN_GLB_THR,'String',num2str(THR_VAL(1),'%10.5f')); set(handles.Edi_L2_PERF,'String',num2str(L2_Perf_VAL(1),'%10.2f')); set(handles.Edi_N0_PERF,'String',num2str(N0_Perf_VAL(1),'%10.2f')); change_THR = true; else reset_FLAG = any(threshold(:)); change_THR = false; if reset_FLAG msg = getWavMSG('Wavelet:mdw1dRF:Quest_ResetThrValue'); Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes'); Str_No = getWavMSG('Wavelet:commongui:Str_No'); ... Str_Cancel = getWavMSG('Wavelet:commongui:Str_Cancel'); BtnName = questdlg(msg, ... getWavMSG('Wavelet:mdw1dRF:Quest_ResetThrValue'), ... Str_Yes,Str_No,Str_Cancel,Str_Yes); switch BtnName case Str_Yes [THR_VAL,L2_Perf,N0_Perf] = ... mswcmptp(data_ORI.dwtDEC,'L2_perf',100+eps); threshold = THR_VAL(:,ones(1,level)); change_THR = true; case Str_No case Str_Cancel , return; end end end if change_THR cmp_PERF(1:2) = {L2_Perf,N0_Perf}; wtbxappdata('set',fig,'cmp_PERF',cmp_PERF); blockdatamngr('set',fig,... 'data_DorC','threshold',threshold); flag_MAN = get(handles.Pus_ENA_MAN,'UserData'); if isequal(flag_MAN,true) wtbxappdata('set',fig,'flag_modify_THR',true); end end % Show Thresholds. %----------------- blockdatamngr('set',fig,'tool_ATTR','State','CMP_ON'); mdw1dafflst('CMP',[],eventdata,handles,'init',[]) if isequal(typeCALL,'SEL') , ENA_MAN_Func(handles); end % End waiting. %------------- wwaiting('off',fig); %-------------------------------------------------------------------------- function Pus_Compress_Callback(hObject,eventdata,handles) %#ok<DEFNU> % Get figure handle. %------------------- fig = handles.output; % Get Selected Data Type. %------------------------ [dwtType,sigType] = mdw1dutils('get_Sig_IDENT',fig,'lst'); ori_sig_FLAG = all(dwtType=='S') & all(sigType=='o'); if ~ori_sig_FLAG msg = getWavMSG('Wavelet:mdw1dRF:Quest_CompSig'); Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes'); Str_No = getWavMSG('Wavelet:commongui:Str_No'); ... BtnName = questdlg(msg,getWavMSG('Wavelet:mdw1dRF:Compressing_signals'), ... Str_Yes,Str_No,Str_Yes); switch BtnName case Str_Yes case Str_No , return; end end % Cleaning. %---------- wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitClean')); % Get Wavelet Decomposition. %--------------------------- data_ORI = mdw1dutils('data_INFO_MNGR','get',fig,'ORI'); % Get Compression Parameters. %-------------------------- val_S_or_H = get(handles.Rad_SOFT,'Value'); switch val_S_or_H case 0 , S_or_H = 'h'; case 1 , S_or_H = 's'; end keepAPP = logical(get(handles.Rad_YES,'Value')); % Compressing and Storing %------------------------ threshold = blockdatamngr('get',fig,'data_DorC','threshold'); [sig_DorC,dec_DorC,~,energyDEC_PERF,nb0_PERF] = ... mswcmp('cmp',data_ORI.dwtDEC,'man_thr',threshold,S_or_H,keepAPP); [Energy,tab_ENER] = wdecenergy(dec_DorC); blockdatamngr('set',fig,'data_DorC',... 'signal',sig_DorC,'dwtDEC',dec_DorC,... 'Energy',Energy,'tab_ENER',tab_ENER); cmp_PERF = wtbxappdata('get',fig,'cmp_PERF'); cmp_PERF(1:2) = {energyDEC_PERF,nb0_PERF}; wtbxappdata('set',fig,'cmp_PERF',cmp_PERF); % Setting GUI. %------------- level = dec_DorC.level; mdw1dafflst('DAT','CMP',level,handles.Lst_SIG_DATA,handles.Lst_CFS_DATA); hdl_Menus = wtbxappdata('get',hObject,'hdl_Menus'); set(hdl_Menus.m_save,'Enable','On'); % Show Thresholds. %----------------- blockdatamngr('set',fig,'tool_ATTR','State','CMP_ON'); mdw1dafflst('CMP',hObject,eventdata,handles,'init',[]) flag_MAN = get(handles.Pus_ENA_MAN,'UserData'); if isequal(flag_MAN,1) blockdatamngr('set',fig,'tool_ATTR','State','CMP_MAN'); end % End waiting. %------------- wwaiting('off',fig); %-------------------------------------------------------------------------- function Pop_THR_METH_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> %========================================== % 1) Remove near 0 % 2) Balance sparsity-norm % 3) Balance sparsity-norm (sqrt) % -------------------------------- % 5) Global threshold % 6) Energy ratio % 7) Zero coefficients ratio % -------------------------------- % 9) Scarce high % 10) Scarce medium % 11) Scarce low % 12) Scarce %========================================== val = get(hObject,'Value'); usr = get(hObject,'UserData'); if val==4 || val==8 if isempty(usr) , val = 1; else val = usr; end set(hObject,'Value',val,'UserData',val); return end set(hObject,'UserData',val); if ~isempty(usr) && isequal(usr,val) , return; end hdl_PAR = [handles.Txt_GLB_PAR,handles.Sli_GLB_PAR,handles.Edi_GLB_PAR]; if ismember(val,[1 2 3]) , ena_PAR = 'Off'; else ena_PAR = 'On'; end switch val case {1,2,3} , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Par_Selection'); case 5 , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Sel_GLB_THR'); case 6 , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Sel_ENER_RAT'); case 7 , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Sel_ZER_CFS'); case {9,10,11} , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Sel_SCARCE_PAR'); case 12 , str_TxtPAR = getWavMSG('Wavelet:moreMSGRF:Sel_SCARCE_PAR'); end set(handles.Txt_GLB_PAR,'String',str_TxtPAR); set(hdl_PAR,'Enable',ena_PAR); nameMETH = get_parMETH(handles); usr = get(handles.Sli_GLB_PAR,'UserData'); if isempty(usr) fig = handles.output; cmp_PERF = wtbxappdata('get',fig,'cmp_PERF'); bound_METH = cmp_PERF{4}; else bound_METH = usr{2}; end idx = strcmp(bound_METH(:,1),nameMETH); numMETH = find(idx); set(handles.Sli_GLB_PAR,'UserData',{numMETH,bound_METH}); if ~isempty(bound_METH{numMETH,2}) if bound_METH{numMETH,4}<bound_METH{numMETH,2} bound_METH{numMETH,4} = bound_METH{numMETH,2}; end set(handles.Sli_GLB_PAR,... 'Min',bound_METH{numMETH,2},'Max',bound_METH{numMETH,3},... 'Value',bound_METH{numMETH,4}); set_Edi_GLB_PAR_String(handles.Edi_GLB_PAR,numMETH,bound_METH); else set(handles.Edi_GLB_PAR,'String',''); end %-------------------------------------------------------------------------- function Sli_GLB_PAR_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val = get(hObject,'Value'); usr = get(hObject,'UserData'); numMETH = usr{1}; bound_METH = usr{2}; bound_METH{numMETH,4} = val; set(hObject,'UserData',{numMETH,bound_METH}); set_Edi_GLB_PAR_String(handles.Edi_GLB_PAR,numMETH,bound_METH); %-------------------------------------------------------------------------- function Edi_GLB_PAR_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> val = str2double(get(hObject,'String')); usr = get(handles.Sli_GLB_PAR,'UserData'); numMETH = usr{1}; bound_METH = usr{2}; mini = bound_METH{numMETH,2}; maxi = bound_METH{numMETH,3}; if isnan(val) || isempty(val) val = bound_METH{numMETH,4}; elseif val<mini , val = mini; elseif val>maxi , val = maxi; end bound_METH{numMETH,4} = val; set(handles.Sli_GLB_PAR,'UserData',{numMETH,bound_METH}); set_Edi_GLB_PAR_String(handles.Edi_GLB_PAR,numMETH,bound_METH); %-------------------------------------------------------------------------- function set_Edi_GLB_PAR_String(Edi,numMETH,bound_METH) nameMETH = bound_METH{numMETH,1}; switch nameMETH case {'L2_perf','N0_perf'} , formatNum = '%8.2f'; case {'glb_thr'} , formatNum = '%8.3f'; case {'scarcehi','scarceme','scarcelo','scarce'} , formatNum = '%8.3f'; end set(Edi,'String',num2str(bound_METH{numMETH,4},formatNum)); %-------------------------------------------------------------------------- function Pop_MAN_TYP_THR_Callback(hObject,eventdata,handles,dispName) %#ok<DEFNU> if nargin>3 switch dispName case 'lvlThr' , valPOP = 1; case 'glbThr' , valPOP = 2; end set(hObject,'Value',valPOP); else valPOP = get(hObject,'Value'); end usrPOP = get(hObject,'UserData'); set(hObject,'UserData',valPOP); if isequal(valPOP,usrPOP) || (isempty(usrPOP) && valPOP==1), return; end hdl_LVL = [... handles.Txt_MAN_LEV,handles.Pop_MAN_LEV,... handles.Txt_MAN_THR,handles.Edi_MAN_THR]; hdl_GLB = [... handles.Txt_MAN_GLB_THR,handles.Edi_MAN_GLB_THR,... handles.Txt_L2_PERF,handles.Edi_L2_PERF,handles.Txt_Per_PerL2,... handles.Txt_N0_PERF,handles.Edi_N0_PERF,handles.Txt_Per_PerN0]; switch valPOP case 1 % Manual by level hdl_ON = hdl_LVL; hdl_OFF = hdl_GLB; Show_Mode = 'lvlThr'; case 2 % Manual global hdl_ON = hdl_GLB; hdl_OFF = hdl_LVL; Show_Mode = 'glbThr'; end set(hdl_OFF,'Visible','Off'); set(hdl_ON,'Visible','On'); if nargin>3 , return; end mdw1dmngr('setDispMode',handles.Pop_Show_Mode,eventdata,handles,... 'CMP','MAN',Show_Mode); %-------------------------------------------------------------------------- function Pus_MAN_Valid_Callback(hObject,eventdata,handles) %#ok<INUSL,DEFNU> fig = handles.output; flagMODIFIED = wtbxappdata('get',fig,'flag_modify_THR'); if ~flagMODIFIED , return; end msg = getWavMSG('Wavelet:mdw1dRF:Update_THR_VAL'); Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes'); Str_Cancel = getWavMSG('Wavelet:commongui:Str_Cancel'); BtnName = questdlg(msg,getWavMSG('Wavelet:mdw1dRF:Modif_THR_VAL'), ... Str_Yes,'Cancel',Str_Yes); switch BtnName case Str_Cancel , return; case Str_Yes end threshold = blockdatamngr('get',fig,'data_DorC','threshold'); wtbxappdata('set',fig,'SAVED_threshold',threshold); wtbxappdata('set',fig,'flag_modify_THR',false); %=========================================================================% % END Callback Functions % %=========================================================================% %=========================================================================% % BEGIN Tool Initialization % %=========================================================================% function Init_Tool(fig,eventdata,handles,varargin) %#ok<INUSL> % Input Parameters. %------------------ callingFIG = varargin{1}; Data_Name = varargin{2}; tool_Name = 'CMP'; mdw1dutils('data_INFO_MNGR','create',fig,tool_Name,callingFIG); % Begin initialization. %---------------------- set(fig,'Visible','off'); % WTBX -- Install DynVTool %------------------------- dynvtool('Install_V3',fig,handles); % WTBX -- Initialize GUIDE Figure. %--------------------------------- wfigmngr('beg_GUIDE_FIG',fig); % UIMENU Installation. %--------------------- m_files = wfigmngr('getmenus',fig,'file'); m_close = wfigmngr('getmenus',fig,'close'); cb_close = 'mdw1dmngr(''Pus_CloseWin_Callback'',gcbo,[],guidata(gcbo),''CMP'');'; set(m_close,'Callback',cb_close); m_save = uimenu(m_files,... 'Label',getWavMSG('Wavelet:commongui:Str_Save'), ... 'Position',2,'Enable','Off'); cb_save = 'mdw1dmngr(''Men_save_FUN'',gcbo,[],guidata(gcbo),''CMP_SIG'');'; uimenu(m_save,... 'Label',getWavMSG('Wavelet:mdw1dRF:Save_CMP_SIG'),... 'Position',1,'Enable','On','Callback',cb_save); cb_save = 'mdw1dmngr(''Men_save_FUN'',gcbo,[],guidata(gcbo),''CMP_DEC'');'; uimenu(m_save,... 'Label',getWavMSG('Wavelet:mdw1dRF:Save_CMP_DEC'),... 'Position',2,'Enable','On','Callback',cb_save); hdl_Menus = struct('m_files',m_files,'m_close',m_close,'m_save',m_save); wtbxappdata('set',fig,'hdl_Menus',hdl_Menus); % Help and ContextMenus INSTALLATION %------------------------------------ Install_HELP_and_CtxtMenu(fig,handles); % WTBX -- Terminate GUIDE Figure. %-------------------------------- wfigmngr('end_GUIDE_FIG',fig,mfilename); % Other Initializations. %----------------------- set(handles.Fra_MET_CMP,'ForegroundColor',[0.85 0.85 0.85]) mdw1dmngr('init_TOOL',handles,Data_Name,tool_Name); % set(handles.Edi_TIT_MAN,'Enable','Off'); data_ORI = mdw1dutils('data_INFO_MNGR','get',fig,'ORI'); THR_MAXI = mswcmptp(data_ORI.dwtDEC,'L2_perf',0); [~,L2_Perf,N0_Perf] = mswcmptp(data_ORI.dwtDEC,'L2_perf',150); bound_METH = cell(10,4); bound_METH(:,1) = ... {'rem_n0';'bal_sn';'sqrtbal_sn';... 'glb_thr';'L2_perf';'N0_perf'; ... 'scarcehi';'scarceme';'scarcelo';'scarce'}; bound_METH(4:6,2) = {0}; bound_METH(4,3) = {max(THR_MAXI)}; bound_METH(5:6,3) = {100}; bound_METH(7,2) = {2.5}; bound_METH(7,3) = {10}; bound_METH(8,2) = {1.5}; bound_METH(8,3) = {2.5}; bound_METH(9,2) = {1}; bound_METH(9,3) = {2}; bound_METH(10,2) = {0}; bound_METH(10,3) = {100}; for k = 4:10 , bound_METH(k,4) = bound_METH(k,2); end wtbxappdata('set',fig,'cmp_PERF',{L2_Perf,N0_Perf,THR_MAXI,bound_METH}); %-------------------------------------------------------------------------- function Install_HELP_and_CtxtMenu(hFig,handles) % Add Help for Tool. %------------------ wfighelp('addHelpTool',hFig, ... getWavMSG('Wavelet:mdw1dRF:HLP_MultiSig_CMP'),'MULT_COMP_1D'); % Add Help Item. %---------------- wfighelp('addHelpItem',hFig, ... getWavMSG('Wavelet:commongui:HLP_CompProc'),'COMP_PROCEDURE'); wfighelp('addHelpItem',hFig, ... getWavMSG('Wavelet:commongui:HLP_AvailMeth'),'COMP_DENO_METHODS'); % Add ContextMenus %----------------- hdl_WAV = [handles.Txt_Wav,handles.Edi_Wav_Fam,handles.Edi_Wav_Num]; wfighelp('add_ContextMenu',hFig,hdl_WAV,'UT_WAVELET'); hdl_EXT = [handles.Txt_Ext_Mode,handles.Edi_Ext_Mode]; wfighelp('add_ContextMenu',hFig,hdl_EXT,'EXT_MODE'); hdl_TMP = [handles.Txt_THR_METH,handles.Pop_THR_METH, ... handles.Txt_GLB_PAR,handles.Edi_GLB_PAR,handles.Sli_GLB_PAR]; wfighelp('add_ContextMenu',hFig,hdl_TMP,'COMP_DENO_STRA'); hdl_TMP = [handles.Rad_SOFT,handles.Rad_HARD]; wfighelp('add_ContextMenu',hFig,hdl_TMP,'DENO_SOFTHARD'); %-------------------------------------------------------------------------- %=========================================================================% % END Tool Initialization % %=========================================================================% %-------------------------------------------------------------------------- function [nameMETH,parMETH] = get_parMETH(handles) %========================================== % 1) Remove near 0 % 2) Balance sparsity-norm % 3) Balance sparsity-norm (sqrt) % -------------------------------- % 5) Global threshold % 6) Energy ratio % 7) Zero coefficients ratio % -------------------------------- % 9) Scarce high % 10) Scarce medium % 11) Scarce low % 12) Scarce %========================================== parMETH = []; numMETH = get(handles.Pop_THR_METH,'Value'); switch numMETH case 1 , nameMETH = 'rem_n0'; case 2 , nameMETH = 'bal_sn'; case 3 , nameMETH = 'sqrtbal_sn'; case 5 , nameMETH = 'glb_thr'; case 6 , nameMETH = 'L2_perf'; case 7 , nameMETH = 'N0_perf'; case 9 , nameMETH = 'scarcehi'; case 10 , nameMETH = 'scarceme'; case 11 , nameMETH = 'scarcelo'; case 12 , nameMETH = 'scarce'; otherwise error('Wavelet:FunctionArgVal:Invalid_ArgVal', ... getWavMSG('Wavelet:FunctionArgVal:Invalid_ArgVal')) end %--------------------------------------------------------------------------