www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/sw1dtool.m
function varargout = sw1dtool(option,varargin) %SW1DTOOL Stationary Wavelet Transform 1-D tool. % VARARGOUT = SW1DTOOL(OPTION,VARARGIN) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 17-Dec-97. % Last Revision: 10-Jun-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.10.4.17 $ $Date: 2013/07/05 04:30:24 $ % Test inputs. %------------- if nargin==0 , option = 'create'; end [option,winAttrb] = utguidiv('ini',option,varargin{:}); % Default values. %---------------- max_lev_anal = 8; def_lev_anal = 5; % Memory Blocks of stored values. %================================ % MB1. %----- n_membloc1 = 'MB_1'; ind_status = 1; ind_sav_menu = 2; ind_filename = 3; ind_pathname = 4; ind_sig_name = 5; ind_NB_lev = 6; ind_wave = 7; nb1_stored = 7; % MB2. %----- n_membloc2 = 'MB_2'; ind_pus_dec = 1; ind_chk_den = 2; ind_axe_hdl = 3; ind_lin_hdl = 4; ind_txt_hdl = 5; ind_lin_den = 6; ind_gra_area = 7; nb2_stored = 7; % MB3. %----- n_membloc3 = 'MB_3'; ind_coefs = 1; % Tag property. %--------------- tag_sig_ori = 'Sig_ori'; tag_app = 'App'; tag_sig_den = 'Sig_den'; tag_noise = 'Noise'; if ~isequal(option,'create') , win_tool = varargin{1}; end switch option case 'create' % Get Globals. %------------- [Def_Btn_Height,Y_Spacing] = ... mextglob('get','Def_Btn_Height','Y_Spacing'); % Window initialization. %----------------------- win_title = getWavMSG('Wavelet:divGUIRF:SW1D_Name'); [win_tool,pos_win,win_units,str_numwin,... pos_frame0,Pos_Graphic_Area] = ... wfigmngr('create',win_title,winAttrb, ... 'ExtFig_WTMOTION',mfilename,1,1,0); if nargout>0 , varargout{1} = win_tool; end % Add Help for Tool. %------------------ wfighelp('addHelpTool',win_tool, ... getWavMSG('Wavelet:divGUIRF:I_D_Anal_Deno'),'SW1D_GUI'); % Add Help Item. %---------------- wfighelp('addHelpItem',win_tool, ... getWavMSG('Wavelet:divGUIRF:SWT'),'SWT'); wfighelp('addHelpItem',win_tool, ... getWavMSG('Wavelet:commongui:HLP_AvailMeth'),'COMP_DENO_METHODS'); wfighelp('addHelpItem',win_tool, ... getWavMSG('Wavelet:divGUIRF:VarAdapMeth'),'VARTHR'); wfighelp('addHelpItem',win_tool, ... getWavMSG('Wavelet:commongui:HLP_LoadSave'),'SW1D_LOADSAVE'); % Menu construction for current figure. %-------------------------------------- m_files = wfigmngr('getmenus',win_tool,'file'); uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:LoadSig'), ... 'Position',1, ... 'Callback',[mfilename '(''load'',' str_numwin ');'] ... ); m_save = uimenu(m_files,... 'Label',getWavMSG('Wavelet:commongui:SaveDenSig'),... 'Position',2,'Enable','Off', ... 'Callback',[mfilename '(''save'',' str_numwin ');'] ... ); m_file = get(m_save,'Parent'); pos = get(m_save,'Position'); m_gen = uimenu(m_file,... 'Label',getWavMSG('Wavelet:commongui:GenerateMATLABDenoise'), ... 'Position',pos+1, ... 'Enable','Off', ... 'Separator','On', ... 'Tag','Generate', ... 'Callback', ... ['wsaveprocess(''sw1dtool'',' ... str_numwin ');'] ... ); wtbxappdata('set',win_tool,'M_GenCode',m_gen); m_demo = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:Lab_Example'), ... 'Tag','Examples','Position',3); uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:Str_ImpSig'), ... 'Position',4,'Separator','On',... 'Tag','Import', ... 'Callback',[mfilename '(''load'',' str_numwin ',''load_wrks'');']... ); m_exp_sig = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:Str_ExpSig'), ... 'Position',5,'Enable','Off','Separator','Off',... 'Tag','Export', ... 'Callback',[mfilename '(''exp_wrks'',' str_numwin ');'] ... ); m_demo_1 = uimenu(m_demo, ... 'Label',getWavMSG('Wavelet:divGUIRF:NoisySig'), ... 'Tag','Noisy_Signals'); m_demo_2 = uimenu(m_demo,... 'Label',getWavMSG('Wavelet:divGUIRF:NoisySig_IDV')); demoSET = {... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBlocks') , ... 'noisbloc' , 'haar', 5 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBumps') , ... 'noisbump' , 'sym4', 5 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NHeavySin') , ... 'heavysin' , 'sym8', 5 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NDoppler') , ... 'noisdopp' , 'sym4', 5 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NQdchirp') , ... 'noischir' , 'db1' , 5 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_Nmishmash') , ... 'noismima' , 'db3' , 6 , '{}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBlocks_PL') , ... 'noisbloc' , 'haar', 5 , '{''penallo''}' ... }; setDEMOS(m_demo_1,mfilename,str_numwin,demoSET,0) demoSET = {... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBlocks_I') , ... 'nblocr1' , 'haar', 5 , '{3}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBlocks_II') , ... 'nblocr2' , 'haar', 5 , '{3}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NDoppler_I') , ... 'ndoppr1' , 'haar', 5 , '{3}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBumps_I') , ... 'nbumpr1' , 'haar', 5 , '{3}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBumps_II') , ... 'nbumpr2' , 'haar', 5 , '{2}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NBumps_III') , ... 'nbumpr3' , 'haar', 5 , '{4}' ; ... getWavMSG('Wavelet:moreMSGRF:EX1D_Name_NElec') , ... 'nelec' , 'haar', 4 , '{3}' ... }; setDEMOS(m_demo_2,mfilename,str_numwin,demoSET,0) % Begin waiting. %--------------- wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitInit')); % General parameters initialization. %----------------------------------- dy = Y_Spacing; str_pus_dec = getWavMSG('Wavelet:commongui:Str_DecSig'); str_chk_den = getWavMSG('Wavelet:commongui:Ovr_DenSig'); % Command part of the window. %============================ % Data, Wavelet and Level parameters. %------------------------------------ xlocINI = pos_frame0([1 3]); ytopINI = pos_win(4)-dy; toolPos = utanapar('create',win_tool, ... 'xloc',xlocINI,'top',ytopINI,... 'Enable','off', ... 'wtype','dwt', ... 'deflev',def_lev_anal, ... 'maxlev',max_lev_anal ... ); % Decompose pushbutton. %---------------------- h_uic = 3*Def_Btn_Height/2; y_uic = toolPos(2)-h_uic-2*dy; w_uic = (3*pos_frame0(3))/4; x_uic = pos_frame0(1)+(pos_frame0(3)-w_uic)/2; pos_pus_dec = [x_uic, y_uic, w_uic, h_uic]; pus_dec = uicontrol(... 'Parent',win_tool, ... 'Style','pushbutton', ... 'Units',win_units, ... 'Position',pos_pus_dec, ... 'String',str_pus_dec, ... 'Enable','off', ... 'Tag','Pus_Dec', ... 'Interruptible','On' ... ); % De-noising tool. %----------------- ytopTHR = pos_pus_dec(2)-4*dy; toolPos = utthrw1d('create',win_tool, ... 'xloc',xlocINI,'top',ytopTHR,... 'ydir',-1, ... 'levmax',def_lev_anal, ... 'levmaxMAX',max_lev_anal, ... 'status','Off', ... 'toolOPT','deno' ... ); x_uic = pos_frame0(1)+(pos_frame0(3)-w_uic)/2; h_uic = Def_Btn_Height; y_uic = toolPos(2)-Def_Btn_Height/2-h_uic; pos_chk_den = [x_uic, y_uic, w_uic, h_uic]; chk_den = uicontrol(... 'Parent',win_tool, ... 'Style','checkbox', ... 'Visible','on', ... 'Units',win_units, ... 'Position',pos_chk_den, ... 'String',str_chk_den, ... 'Tag','Chk_Den', ... 'Enable','off' ... ); % Callbacks update. %------------------ hdl_den = utthrw1d('handles',win_tool); utanapar('set_cba_num',win_tool,[m_files;hdl_den(:)]); pop_lev = utanapar('handles',win_tool,'lev'); tmp = num2mstr([pop_lev chk_den]); end_cba = [str_numwin ',' tmp ');']; cba_pop_lev = [mfilename '(''update_level'',' end_cba]; cba_pus_dec = [mfilename '(''decompose'',' str_numwin ');']; cba_chk_den = [mfilename '(''show_lin_den'',' str_numwin ');']; set(pop_lev,'Callback',cba_pop_lev); set(pus_dec,'Callback',cba_pus_dec); set(chk_den,'Callback',cba_chk_den); % General graphical parameters initialization. %-------------------------------------------- txtfontsize = 14; % Axes parameters initialization. %-------------------------------- w_gra_rem = Pos_Graphic_Area(3); h_gra_rem = Pos_Graphic_Area(4); NB_lev = max_lev_anal; % dummy ecx_left = 0.08*pos_win(3); ecx_med = 0.07*pos_win(3); ecx_right = 0.06*pos_win(3); w_left = (w_gra_rem-ecx_left-ecx_med-ecx_right)/2; w_right = w_left; w_medium = w_left; x_left = ecx_left; x_right = x_left+w_left+ecx_med; x_medium = (w_gra_rem-w_medium)/2; ecy_up = 0.06*pos_win(4); ecy_mid_1 = 0.08*pos_win(4); ecy_mid_2 = 0.08*pos_win(4); ecy_det = (0.04*pos_win(4))/1.4; ecy_mid_3 = ecy_det; ecy_down = 0.04*pos_win(4); h_min = h_gra_rem/12; h_max = h_gra_rem/5; h_axe_std = (h_min*NB_lev+h_max*(max_lev_anal-NB_lev))/max_lev_anal; h_space = ecy_up+ecy_mid_1+ecy_mid_2+ecy_mid_3+ ... NB_lev*ecy_det+ecy_down; h_detail = (h_gra_rem-2*h_axe_std-h_space)/(NB_lev+1); y_low_ini = pos_win(4); % Building data axes. %-------------------- commonProp = {... 'Parent',win_tool,... 'Visible','Off', ... 'Units',win_units,... 'Box','On'... }; y_low_ini = y_low_ini-h_axe_std-ecy_up; pos_left = [x_left y_low_ini w_left h_axe_std]; axe_left_1 = axes(commonProp{:},'Position',pos_left); pos_right = [x_right y_low_ini w_right h_axe_std]; axe_right_1 = axes(commonProp{:},'Position',pos_right); y_low_ini = y_low_ini-h_axe_std-ecy_mid_1; pos_medium = [x_medium y_low_ini w_medium h_axe_std]; axe_medium = axes(commonProp{:},'Position',pos_medium); y_low_ini = y_low_ini-ecy_mid_2; % Building approximation & details axes on the left part. %-------------------------------------------------------- axe_left = zeros(1,max_lev_anal); txt_left = zeros(1,max_lev_anal); y_left = y_low_ini; pos_left = [x_left y_left w_left h_detail]; % Left approximation axes. %------------------------- pos_left(2) = pos_left(2)-pos_left(4); axe_app_l = axes(commonProp{:},'Position',pos_left); str_txt = ['a_' int2str(max_lev_anal)]; txt_app_l = txtinaxe('create',str_txt, ... axe_app_l,'l','off','bold',txtfontsize); pos_left(2) = pos_left(2)-ecy_mid_3; % Left details axes. %------------------- for j = 1:NB_lev k = NB_lev-j+1; pos_left(2) = pos_left(2)-pos_left(4)-ecy_det; axe_left(k) = axes(commonProp{:}, ... 'Position',pos_left, ... 'XTickLabelMode','manual',... 'XTickLabel',[] ... ); %#ok<*LAXES> str_txt = ['d' wnsubstr(k)]; txt_left(k) = txtinaxe('create',str_txt, ... axe_left(k),'l','off','bold',txtfontsize); end set(axe_left(1),'XTickLabelMode','auto'); % Building approximation & details axes on the right part. %--------------------------------------------------------- axe_right = zeros(1,max_lev_anal); txt_right = zeros(1,max_lev_anal); y_right = y_low_ini; pos_right = [x_right y_right w_right h_detail]; % Right approximation axes. %-------------------------- pos_right(2) = pos_right(2)-pos_right(4); axe_app_r = axes(commonProp{:},'Position',pos_right); str_txt = ['a' wnsubstr(max_lev_anal)]; txt_app_r = txtinaxe('create',str_txt, ... axe_app_r,'r','off','bold',txtfontsize); pos_right(2) = pos_right(2)-ecy_mid_3; % Right details axes. %-------------------- for j = 1:NB_lev k = NB_lev-j+1; pos_right(2) = pos_right(2)-pos_right(4)-ecy_det; axe_right(k) = axes(commonProp{:}, ... 'Position',pos_right, ... 'XTickLabelMode','manual',... 'XTickLabel',[] ... ); str_txt = ['d' wnsubstr(k)]; txt_right(k) = txtinaxe('create',str_txt, ... axe_right(k),'r','off','bold',txtfontsize); end set(axe_right(1),'XTickLabelMode','auto'); % Normalization. %---------------- Pos_Graphic_Area = wfigmngr('normalize',win_tool, ... Pos_Graphic_Area,'On'); drawnow % Handles and Positions. %----------------------- axes_hdl = [axe_left_1 axe_right_1 axe_medium ... axe_left axe_app_l axe_right axe_app_r]; lin_hdl = NaN*ones(1,length(axes_hdl)); text_hdl = [NaN NaN NaN ... double([txt_left txt_app_l txt_right txt_app_r])]; % Memory blocks update. %---------------------- utthrw1d('set',win_tool,'axes',axe_left); wmemtool('ini',win_tool,n_membloc1,nb1_stored); wmemtool('ini',win_tool,n_membloc2,nb2_stored); wmemtool('wmb',win_tool,n_membloc1, ... ind_status,-1, ... ind_sav_menu,m_save ... ); wtbxappdata('set',win_tool,'m_exp_sig',m_exp_sig); wmemtool('wmb',win_tool,n_membloc2, ... ind_pus_dec,pus_dec, ... ind_chk_den,chk_den, ... ind_axe_hdl,axes_hdl, ... ind_lin_hdl,lin_hdl, ... ind_gra_area,Pos_Graphic_Area, ... ind_txt_hdl,text_hdl, ... ind_lin_den,NaN ... ); % End waiting. %--------------- wwaiting('off',win_tool); case {'load','demo'} switch option case 'load' if length(varargin)<2 % LOAD SIGNAL [sigInfos,sig_Anal,ok] = ... utguidiv('load_sig',win_tool,'Signal_Mask', ... getWavMSG('Wavelet:commongui:LoadSig')); elseif isequal(varargin{2},'load_wrks') % LOAD from WORKSPACE [sigInfos,sig_Anal,ok] = wtbximport('1d'); end if ~ok, return; end sig_Name = sigInfos.name; case 'demo' sig_Name = deblank(varargin{2}); wav_Name = deblank(varargin{3}); lev_Anal = varargin{4}; if length(varargin)>4 && ~isempty(varargin{5}) par_Demo = varargin{5}; else par_Demo = ''; end filename = [sig_Name '.mat']; pathname = utguidiv('WTB_DemoPath',filename); [sigInfos,sig_Anal,ok] = ... utguidiv('load_dem1D',win_tool,pathname,filename); if ~ok, return; end end % Begin waiting. %--------------- wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitClean')); % Setting Analysis parameters. %----------------------------- wmemtool('wmb',win_tool,n_membloc1, ... ind_status,-1, ... ind_filename,sigInfos.filename, ... ind_pathname,sigInfos.pathname, ... ind_sig_name,sigInfos.name ... ); % Cleaning and setting GUI. %-------------------------- cbanapar('Enable',win_tool,'Off'); dynvtool('stop',win_tool) utthrset('stop',win_tool); ax_hdl = wmemtool('rmb',win_tool,n_membloc2,ind_axe_hdl); obj2del = findobj(ax_hdl,'Type','line'); delete(obj2del) utthrw1d('clean_thr',win_tool); % Setting analysis & GUI values. %-------------------------------- levm = wmaxlev(sigInfos.size,'haar'); levmax = min(levm,max_lev_anal); if isequal(option,'demo') anaPar = {'wav',wav_Name}; else lev_Anal = min(nextpow2(sigInfos.size),def_lev_anal); anaPar = {}; end strlev = int2str((1:levmax)'); anaPar = {anaPar{:},'n_s',{sig_Name,sigInfos.size}, ... 'lev',{'String',strlev,'Value',lev_Anal}}; %#ok<CCAT> cbanapar('set',win_tool,anaPar{:}); % Initial drawing (& analysis). %------------------------------ chk_den = wmemtool('rmb',win_tool,n_membloc2,ind_chk_den); sw1dtool('position',win_tool,lev_Anal,chk_den); sw1dtool('set_axes',win_tool,-1); sw1dtool('Enable',win_tool,'ini','on'); sw1dtool('plot_ini',win_tool,sig_Anal); if isequal(option,'demo') sw1dtool('decompose',win_tool); if ~isempty(par_Demo) utthrw1d('demo',win_tool,'sw1d',par_Demo); end sw1dtool('denoise',win_tool); sw1dtool('show_lin_den',win_tool,'On') end cbanapar('Enable',win_tool,'On'); % End waiting. %------------- wwaiting('off',win_tool); case 'save' % Testing file. %-------------- [filename,pathname,ok] = utguidiv('test_save',win_tool, ... '*.mat',getWavMSG('Wavelet:commongui:SaveDenSig')); if ~ok, return; end % Begin waiting. %-------------- wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitSave')); % Saving file. %-------------- [name,ext] = strtok(filename,'.'); if isempty(ext) || isequal(ext,'.') ext = '.mat'; filename = [name ext]; end % Get de-noising parameters & de-noised signal. %----------------------------------------------- [NB_lev,wname] = ... wmemtool('rmb',win_tool,n_membloc1,ind_NB_lev,ind_wave); %#ok<NASGU> [thrStruct,hdl_den] = utthrw1d('get',win_tool,'thrstruct','handleTHR'); thrParams = {thrStruct(1:NB_lev).thrParams}; %#ok<NASGU> sig_den = get(hdl_den,'YData'); try try eval([name ' = sig_den ;']); catch x = sig_den; %#ok<NASGU> name = 'x'; end saveStr = {name,'thrParams','wname'}; save([pathname filename],saveStr{:}); catch %#ok<*CTCH> errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg'); end % End waiting. %------------- wwaiting('off',win_tool); case 'exp_wrks' wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitExport')); hdl_den = utthrw1d('get',win_tool,'handleTHR'); sig_den = get(hdl_den,'YData'); wtbxexport(sig_den,'name','sig_1D', ... 'title',getWavMSG('Wavelet:commongui:Str_Sig')); wwaiting('off',win_tool); case 'decompose' % Compute decomposition and plot. %-------------------------------- wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute')); % Analysis parameters. %--------------------- [wname,lev_Anal] = cbanapar('get',win_tool,'wav','lev'); % Test decomposition. %-------------------- hdl_ori = utthrw1d('get',win_tool,'handleORI'); sig_ori = get(hdl_ori,'YData'); xmin = 1; xmax = length(sig_ori); pow = 2^lev_Anal; if rem(xmax,pow)>0 LenOK = ceil(xmax/pow)*pow; wwaiting('off',win_tool); msg = getWavMSG('Wavelet:moreMSGRF:SWT_length_MSG',... lev_Anal,xmax,LenOK); errargt(mfilename,msg,'msg'); return end % Clean. %-------- utthrw1d('clean_thr',win_tool); sw1dtool('show_lin_den',win_tool,'off') wmemtool('wmb',win_tool,n_membloc1, ... ind_status,0,ind_NB_lev,lev_Anal,ind_wave,wname); % Decomposition. %--------------- wDEC = swt(sig_ori,lev_Anal,wname); wmemtool('wmb',win_tool,n_membloc3,ind_coefs,wDEC); % Initializing by level threshold. %--------------------------------- maxTHR = zeros(1,lev_Anal); for k = 1:lev_Anal , maxTHR(k) = max(abs(wDEC(k,:))); end valTHR = sw1dtool('compute_LVL_THR',win_tool); valTHR = min(valTHR,maxTHR); % Plotting Decomposition. %------------------------ hdl_lines = sw1dtool('plot_dec',win_tool,wDEC,valTHR,maxTHR,'Off'); % Initialization of Denoising structure. %--------------------------------------- utthrw1d('set',win_tool,... 'thrstruct',{xmin,xmax,valTHR,hdl_lines},... 'intdepthr',[]); % Enabling HDLG. %--------------- sw1dtool('Enable',win_tool,'dec','on'); % End waiting. %------------- wwaiting('off',win_tool); case 'denoise' % De-noise and Plot. %----------------------------------------------------- % axes_hdl = [axe_left_1 axe_right_1 axe_medium ... % axe_left axe_app_l axe_right axe_app_r]; %---------------------------------------------------- % Begin waiting. %--------------- wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute')); % Disable De-noising Tool. %--------------------------- utthrw1d('Enable',win_tool,'off'); [axe_hdl,lin_hdl] = wmemtool('rmb',win_tool,n_membloc2, ... ind_axe_hdl,ind_lin_hdl); NB_lev = wmemtool('rmb',win_tool,n_membloc1,ind_NB_lev); sig = get(lin_hdl(1),'YData'); wDEC = wmemtool('rmb',win_tool,n_membloc3,ind_coefs); wDEC = utthrw1d('den_M1',win_tool,wDEC,length(sig)); d_axe = 3+max_lev_anal+1; for k = 1:NB_lev ind = k+d_axe; vis = get(axe_hdl(ind),'Visible'); set(lin_hdl(ind),'YData',wDEC(k,:),'Visible',vis); end % Set right approximation visible'. %---------------------------------- set(lin_hdl(end),'Visible','On'); % Plotting de-noised Signal. %--------------------------- wname = wmemtool('rmb',win_tool,n_membloc1,ind_wave); den_sig = iswt(wDEC,wname); set(lin_hdl(2),'YData',den_sig,'Visible','On'); lin_den = wmemtool('rmb',win_tool,n_membloc2,ind_lin_den); set(lin_den,'YData',den_sig); % Plotting "Noise". %------------------- residual = sig-den_sig; set(lin_hdl(3),'YData',residual,'Visible','On'); % Dynvtool Attachment. %--------------------- dynvtool('ini_his',win_tool,0); set(axe_hdl(3),'YLim',getylim(residual)); dynvtool('put',win_tool) % Enabling HDLG. %--------------- utthrw1d('Enable',win_tool,'on'); sw1dtool('Enable',win_tool,'den','on'); % End waiting. %------------- wwaiting('off',win_tool); case 'show_lin_den' chk_den = wmemtool('rmb',win_tool,n_membloc2,ind_chk_den); if length(varargin)>1 vis = lower(varargin{2}); if isequal(vis,'on') , val = 1; else val = 0; end set(chk_den,'Value',val); else vis = getonoff(get(chk_den,'Value')); end [axe_hdl,lin_den] = wmemtool('rmb',win_tool,n_membloc2,... ind_axe_hdl,ind_lin_den); if isequal(vis,'on') strTitle = getWavMSG('Wavelet:divGUIRF:Sig_SandDS'); else strTitle = getWavMSG('Wavelet:divGUIRF:Sig_S'); end set(lin_den,'Visible',vis); wtitle(strTitle,'Parent',axe_hdl(1)) case 'position' lev_Anal = varargin{2}; chk_den = varargin{3}; set(chk_den,'Visible','off'); pos_old = utthrw1d('get',win_tool,'position'); utthrw1d('set',win_tool,'position',{1,lev_Anal}) pos_new = utthrw1d('get',win_tool,'position'); ytrans = pos_new(2)-pos_old(2); pos_chk = get(chk_den,'Position'); pos_chk(2) = pos_chk(2)+ytrans; set(chk_den,'Position',pos_chk,'Visible','on'); case 'update_level' pop_lev = varargin{2}(1); chk_den = varargin{2}(2); if ~ishandle(pop_lev) handles = guihandles(gcbf); pop_lev = handles.Pop_Lev; chk_den = handles.Chk_Den; end lev_New = get(pop_lev,'Value'); sw1dtool('position',win_tool,lev_New,chk_den); [status,lev_Anal] = wmemtool('rmb',win_tool,n_membloc1,... ind_status,ind_NB_lev); sw1dtool('set_axes',win_tool,status); vis_Lines = 'off'; vis_den_ovr = 'off'; if isequal(lev_New,lev_Anal) switch status case -1 , sw1dtool('Enable',win_tool,'ini'); case 0 , sw1dtool('Enable',win_tool,'dec'); case 1 , vis_Lines = 'on'; val = get(chk_den,'Value'); if val==1 , vis_den_ovr = 'on'; end sw1dtool('Enable',win_tool,'dec','on'); sw1dtool('Enable',win_tool,'den','on'); set(chk_den,'Value',val); end else sw1dtool('Enable',win_tool,'ini'); end % Get Handles. %------------- [axe_hdl,lin_den] = wmemtool('rmb',win_tool,n_membloc2,... ind_axe_hdl,ind_lin_den); NBaxes = length(axe_hdl); %----------------------------------------------------- % axes_hdl = [axe_left_1 axe_right_1 axe_medium ... % axe_left axe_app_l axe_right axe_app_r]; %----------------------------------------------------- NBaxdet = (NBaxes-5)/2; i_app_l = 3+NBaxdet+1; indOff = [2,3,i_app_l+(1:NBaxdet),NBaxes]; axe_Off = axe_hdl(indOff); axe_Off = axe_Off(ishandle(axe_Off)); lin_Off = findobj(axe_Off,'Type','line'); set(lin_Off,'Visible',vis_Lines); set(lin_den(1),'Visible',vis_den_ovr); case 'compute_LVL_THR' [numMeth,meth,alfa] = utthrw1d('get_LVL_par',win_tool); %#ok<ASGLU> wDEC = wmemtool('rmb',win_tool,n_membloc3,ind_coefs); varargout{1} = wthrmngr('sw1ddenoLVL',meth,wDEC,alfa); case 'update_LVL_meth' sw1dtool('clear_GRAPHICS',win_tool); valTHR = sw1dtool('compute_LVL_THR',win_tool); utthrw1d('update_LVL_meth',win_tool,valTHR); case 'clear_GRAPHICS' status = wmemtool('rmb',win_tool,n_membloc1,ind_status); if status<1 , return; end % Disable Toggle and Menus. %--------------------------- sw1dtool('Enable',win_tool,'den','off'); % Get Handles. %------------- [axe_hdl,lin_hdl] = wmemtool('rmb',win_tool,n_membloc2,... ind_axe_hdl,ind_lin_hdl); NBaxes = length(axe_hdl); %----------------------------------------------------- % axes_hdl = [axe_left_1 axe_right_1 axe_medium ... % axe_left axe_app_l axe_right axe_app_r]; %----------------------------------------------------- lin_den = wmemtool('rmb',win_tool,n_membloc2,ind_lin_den); sw1dtool('show_lin_den',win_tool,'off') set(lin_den,'YData',get(lin_hdl(1),'YData')); NBaxdet = (NBaxes-5)/2; i_app_l = 3+NBaxdet+1; indOff = [2,3,i_app_l+(1:NBaxdet),NBaxes]; axe_Off = axe_hdl(indOff); axe_Off = axe_Off(ishandle(axe_Off)); lin_Off = findobj(axe_Off,'Type','line'); set(lin_Off,'Visible','off'); case {'enable','Enable'} type = varargin{2}; m_save = wmemtool('rmb',win_tool,n_membloc1,ind_sav_menu); m_exp_sig = wtbxappdata('get',win_tool,'m_exp_sig'); m_gen = wtbxappdata('get',win_tool,'M_GenCode'); m_SAV_EXP = [m_save,m_exp_sig,m_gen]; chk_den = wmemtool('rmb',win_tool,n_membloc2,ind_chk_den); switch type case 'ini' pus_dec = wmemtool('rmb',win_tool,n_membloc2,ind_pus_dec); set([m_SAV_EXP,chk_den],'Enable','off'); utthrw1d('status',win_tool,'off'); set(pus_dec,'Enable','on'); case 'dec' level = wmemtool('rmb',win_tool,n_membloc1,ind_NB_lev); set(m_SAV_EXP,'Enable','off'); utthrw1d('status',win_tool,'on'); utthrw1d('Enable',win_tool,'on',(1:level)); case 'den' enaVal = varargin{3}; set([m_SAV_EXP,chk_den],'Enable',enaVal); utthrw1d('enable_tog_res',win_tool,enaVal); if strncmpi(enaVal,'on',2) , status = 1; else status = 0; end wmemtool('wmb',win_tool,n_membloc1,ind_status,status); end case 'set_axes' %*************************************************************% %** OPTION = 'set_axes' - Set axes positions and visibility **% %*************************************************************% status = varargin{2}; [ax_hdl,lin_hdl,Pos_Graphic_Area] = ... wmemtool('rmb',win_tool,n_membloc2, ... ind_axe_hdl,ind_lin_hdl,ind_gra_area); NB_lev = cbanapar('get',win_tool,'lev'); % Hide axes %----------- lin_den = wmemtool('rmb',win_tool,n_membloc2,ind_lin_den); if ishandle(lin_den) vis_den = get(lin_den,'Visible'); else vis_den = 'off'; end obj_in_axes = findobj(ax_hdl); set(obj_in_axes,'Visible','off'); % Plots. %--------------------------------------------------- % ax_hdl = [axe_left_1 axe_right_1 axe_medium ... % axe_left axe_app_l axe_right axe_app_r]; %--------------------------------------------------- NBaxes = length(ax_hdl); ax_l_1 = ax_hdl(1); ax_r_1 = ax_hdl(2); ax_med = ax_hdl(3); NBaxdet = (NBaxes-5)/2; i_app_l = 3+NBaxdet+1; i_app_r = NBaxes; ax_det = ax_hdl(4:i_app_l-1); ax_app_l = ax_hdl(i_app_l); ax_deno = ax_hdl(i_app_l+1:i_app_r-1); ax_app_r = ax_hdl(i_app_r); % Axes parameters initialization. %-------------------------------- pos_win = get(win_tool,'Position'); h_gra_rem = Pos_Graphic_Area(4); ecy_up = 0.06*pos_win(4); ecy_mid_1 = 0.08*pos_win(4); ecy_mid_2 = 0.08*pos_win(4); ecy_det = (0.04*pos_win(4))/1.4; ecy_mid_3 = ecy_det; ecy_down = 0.04*pos_win(4); h_min = h_gra_rem/12; h_max = h_gra_rem/5; h_axe_std = (h_min*NB_lev+h_max*(max_lev_anal-NB_lev))/max_lev_anal; h_space = ecy_up+ecy_mid_1+ecy_mid_2+ecy_mid_3+ ... NB_lev*ecy_det+ecy_down; h_detail = (h_gra_rem-2*h_axe_std-h_space)/(NB_lev+1); y_low_ini = 1; % Building data axes. %-------------------- y_low_ini = y_low_ini-h_axe_std-ecy_up; pos_axes = get(ax_l_1,'Position'); pos_axes([2 4]) = [y_low_ini h_axe_std]; set(ax_l_1,'Position',pos_axes); axe_vis = ax_l_1; pos_axes = get(ax_r_1,'Position'); pos_axes([2 4]) = [y_low_ini h_axe_std]; set(ax_r_1,'Position',pos_axes) axe_vis = [axe_vis ax_r_1]; y_low_ini = y_low_ini-h_axe_std-ecy_mid_1; pos_axes = get(ax_med,'Position'); pos_axes([2 4]) = [y_low_ini h_axe_std]; set(ax_med,'Position',pos_axes) axe_vis = [axe_vis ax_med]; % Position for approximation & details axes on the left part. %------------------------------------------------------------ y_low_ini = y_low_ini-ecy_mid_2; pos_axes = get(ax_l_1,'Position'); pos_y = [y_low_ini , h_detail]; % Left approximation axes. %------------------------- pos_y(1) = pos_y(1)-h_detail; pos_axes([2 4]) = pos_y; set(ax_app_l,'Position',pos_axes); axe_vis = [axe_vis ax_app_l]; pos_y(1) = pos_y(1)-ecy_mid_3; % Left details axes. %------------------- for j = 1:NB_lev i_axe = NB_lev-j+1; ax_act = ax_det(i_axe); pos_axes = get(ax_act,'Position'); pos_y(1) = pos_y(1)-h_detail-ecy_det; pos_axes([2 4]) = pos_y; set(ax_act,'Position',pos_axes); axe_vis = [axe_vis ax_act]; %#ok<AGROW> end i_ax_det_Title = NB_lev; % Position for approximation & details axes on the right part. %------------------------------------------------------------- pos_axes = get(ax_r_1,'Position'); pos_y = [y_low_ini , h_detail]; % Right approximation axes. %-------------------------- pos_y(1) = pos_y(1)-h_detail; pos_axes([2 4]) = pos_y; set(ax_app_r,'Position',pos_axes); axe_vis = [axe_vis ax_app_r]; pos_y(1) = pos_y(1)-ecy_mid_3; % Right details axes. %-------------------- for j = 1:NB_lev i_axe = NB_lev-j+1; ax_act = ax_deno(i_axe); pos_axes = get(ax_act,'Position'); pos_y(1) = pos_y(1)-h_detail-ecy_det; pos_axes([2 4]) = pos_y; set(ax_act,'Position',pos_axes); axe_vis = [axe_vis ax_act]; %#ok<AGROW> end i_ax_den_Title = NB_lev; % Modification of app_text. %-------------------------- if status<0 % Initialize txt_hdl = wmemtool('rmb',win_tool,n_membloc2,ind_txt_hdl); txt_app_l = txt_hdl(i_app_l); txt_app_r = txt_hdl(i_app_r); num_app = NB_lev; str_app = ['a' wnsubstr(num_app)]; set(txt_app_l,'String',str_app); set(txt_app_r,'String',str_app); end % Set axes. %----------- axeNoXTick = [ax_app_l,ax_det((2:NB_lev)),ax_app_r,ax_deno(2:NB_lev)]; set(axeNoXTick,'XTick',[],'XTickLabel',[]); titles = get([ax_det;ax_deno],'title'); set(cat(1,titles{:}),'String',''); obj_in_axes_vis = findobj(axe_vis); if isequal(vis_den,'off') indLineDEN = [2,3,i_app_l+1:i_app_r]; notVisible = lin_hdl(indLineDEN)'; notVisible(isnan(notVisible)) = []; obj_in_axes_vis = setdiff(double(obj_in_axes_vis),notVisible); end set(obj_in_axes_vis,'Visible','on'); if ishandle(lin_den) , set(lin_den,'Visible',vis_den); end % Setting axes title %-------------------- wtitle(getWavMSG('Wavelet:divGUIRF:Sig_S'),'Parent',ax_l_1) wtitle(getWavMSG('Wavelet:divGUIRF:Sig_S_DS'),'Parent',ax_med) wtitle(getWavMSG('Wavelet:divGUIRF:Deno_S'),'Parent',ax_r_1) axAct = ax_det(i_ax_det_Title); wtitle(getWavMSG('Wavelet:divGUIRF:NDDetCfs'),'Parent',axAct); axAct = ax_deno(i_ax_den_Title); wtitle(getWavMSG('Wavelet:divGUIRF:Deno_NDDetCfs'),'Parent',axAct); wtitle(getWavMSG('Wavelet:divGUIRF:NDAppCfs'),'Parent',ax_app_l); wtitle(getWavMSG('Wavelet:divGUIRF:NDAppCfs'),'Parent',ax_app_r); case 'plot_ini' sig_anal = varargin{2}; [ax_hdl,lin_hdl] = wmemtool('rmb',win_tool,n_membloc2, ... ind_axe_hdl,ind_lin_hdl); ax_data = ax_hdl(1); color = wtbutils('colors','sig'); xmin = 1; xmax = length(sig_anal); xdata = (xmin:xmax); lin_hdl(1) = line(... 'Parent',ax_data, ... 'XData',xdata, ... 'YData',sig_anal, ... 'Color',color, ... 'Tag',tag_sig_ori ... ); color = wtbutils('colors','ssig'); lin_den = line(... 'Parent',ax_data, ... 'Visible','off', ... 'XData',xdata, ... 'YData',sig_anal, ... 'Linewidth',2, ... 'Color',color ... ); ylim = getylim(sig_anal); set(ax_data,'YLim',ylim) wtitle(getWavMSG('Wavelet:divGUIRF:Sig_S'),'Parent',ax_data); set(ax_hdl,'XLim',[xmin xmax]); wmemtool('wmb',win_tool,n_membloc2,... ind_lin_hdl,lin_hdl,ind_lin_den,lin_den); utthrw1d('set',win_tool,'handleORI',lin_hdl(1)); case 'plot_dec' %****************************% %** OPTION = 'plot_dec' - **% %****************************% % out1 = hdl_line_cfs %------------------ wDEC = varargin{2}; valTHR = varargin{3}; maxTHR = varargin{4}; visFLG = varargin{5}; %------------------ [nbrow,lon] = size(wDEC); % Plots. %----------------------------------------------------- % axes_hdl = [axe_left_1 axe_right_1 axe_medium ... % axe_left axe_app_l axe_right axe_app_r]; %---------------------------------------------------- nbdet = nbrow-1; [ax_hdl,lin_hdl,txt_hdl,lin_den] = ... wmemtool('rmb',win_tool,n_membloc2, ... ind_axe_hdl,ind_lin_hdl,ind_txt_hdl,ind_lin_den); NBaxes = length(ax_hdl); % ax_l_1 = ax_hdl(1); ax_r_1 = ax_hdl(2); ax_med = ax_hdl(3); NBaxdet = (NBaxes-5)/2; i_app_l = 3+NBaxdet+1; i_app_r = NBaxes; ax_det = ax_hdl(4:i_app_l-1); ax_app_l = ax_hdl(i_app_l); ax_deno = ax_hdl(i_app_l+1:i_app_r-1); ax_app_r = ax_hdl(i_app_r); ind_den = i_app_l+(1:nbdet); % Reset lin_den. %--------------- set(lin_den,'YData',get(lin_hdl(1),'YData')); % Clean axes. %------------ axes2clean = [ax_r_1,ax_med,ax_det,ax_app_l,ax_deno,ax_app_r]; obj2del = findobj(axes2clean,'Type','line'); delete(obj2del) lin_hdl((2:NBaxes)) = NaN; % Compute X-interval. %-------------------- xmin = 1; xmax = lon; % Plotting details. %------------------ delta_i_axe = 0; colorDET = wtbutils('colors','det',nbdet); out1 = zeros(nbdet,1); for k = 1:nbdet i_axe = k+delta_i_axe; ax_act = ax_det(i_axe); ybounds = [-valTHR(k) , valTHR(k) , -maxTHR(k) , maxTHR(k)]; tag = ['cfs_' int2str(i_axe)]; out1(k) = plotline(ax_act,xmin:xmax,wDEC(k,:), ... colorDET(k,:),tag,'On',ybounds); utthrw1d('plot_dec',win_tool,i_axe,{maxTHR(k),valTHR(k),xmin,xmax,k}); end lin_hdl(3+(1:nbdet)) = out1; % Plotting coarse approximation. %------------------------------- app = wDEC(nbrow,:); txt = ['a' wnsubstr(nbdet)]; color = wtbutils('colors','app',1); lin_hdl(i_app_l) = plotline(ax_app_l,(xmin:xmax),app,color,tag_app,'On'); set(txt_hdl(i_app_l),'String',txt); lin_hdl(i_app_r) = plotline(ax_app_r,(xmin:xmax),app,... color,tag_app,visFLG); set(txt_hdl(i_app_r),'String',txt); % Plotting de-noised details. %---------------------------- for k = 1:nbdet i_axe = k+delta_i_axe; tag_det = ['det_' int2str(i_axe)]; ax_act = ax_deno(i_axe); lin_hdl(ind_den(k)) = ... plotline(ax_act,(xmin:xmax),wDEC(k,:),colorDET(k,:),tag_det,visFLG); end % Plotting de-noised Signal. %--------------------------- color = wtbutils('colors','ssig'); sig = get(lin_hdl(1),'YData'); lin_hdl(2) = plotline(ax_r_1,(xmin:xmax),sig,color,tag_sig_den,visFLG); % Plotting residuals. %-------------------- color = wtbutils('colors','res'); lin_hdl(3) = plotline(ax_med,(xmin:xmax),zeros(size(sig)),... color,tag_noise,'Off'); wmemtool('wmb',win_tool,n_membloc2,ind_lin_hdl,lin_hdl); utthrw1d('set',win_tool,'handleTHR',lin_hdl(2),'handleRES',lin_hdl(3)); axeNoXTick = [ax_det(2:NBaxdet),ax_app_l,ax_deno(2:NBaxdet),ax_app_r]; set(axeNoXTick,'XTick',[],'XTickLabel',[]); set(ax_hdl,'XLim',[xmin xmax]) % Dynvtool Attachment. %--------------------- dynvtool('init',win_tool,[],ax_hdl,[],[1 0],'','','') varargout = {out1}; case 'close' otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end %=========================================================================% % INTERNAL FUNCTIONS %=========================================================================% %-------------------------------------------------------------------------% function setDEMOS(m_demo,funcName,str_numwin,demoSET,sepFlag) beg_call_str = [funcName '(''demo'',' str_numwin ',''']; nbDEM = size(demoSET,1); for k=1:nbDEM nam = demoSET{k,1}; fil = demoSET{k,2}; wav = demoSET{k,3}; lev = int2str(demoSET{k,4}); par = demoSET{k,5}; libel = getWavMSG('Wavelet:divGUIRF:WT_Example',wav,lev,nam); action = [beg_call_str fil ''',''' wav ''',' lev ',' par ');']; if sepFlag && (k==1) , sep = 'on'; else sep = 'off'; end uimenu(m_demo,'Label',libel,'Separator',sep,'Callback',action); end %-------------------------------------------------------------------------% function ylim = getylim(sig) mini = min(sig); maxi = max(sig); if abs(maxi-mini)<eps maxi = maxi+0.0001; mini = mini-0.0001; end; yec = 0.05*(maxi-mini); ylim = [mini-yec maxi+yec]; %-------------------------------------------------------------------------% function ll = plotline(axe,x,y,color,tag,vis,ylimplus) ll = findobj(axe,'Type','line','Tag',tag); if isempty(ll) ll = line('Parent',axe,'XData',x,'YData',y,... 'Visible',vis,'Color',color,'Tag',tag); else set(ll,'XData',x,'YData',y,'Color','Visible',vis,color,'Tag',tag); end if nargin<7 ylim = getylim(y); else ylim = getylim([y(:) ; ylimplus(:)]); end set(axe,'YLim',ylim); %-------------------------------------------------------------------------% %=========================================================================%