www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/sigxtool.m
function varargout = sigxtool(option,varargin) %SIGXTOOL Signal extension tool. % VARARGOUT = SIGXTOOL(OPTION,VARARGIN) % % GUI oriented tool which allows the construction of a new % signal from an original one by truncation or extension. % Extension is done by selecting different possible modes: % Symmetric, Periodic, Zero Padding, Continuous or Smooth. % A special mode is provided to extend a signal in order % to be accepted by the SWT decomposition. %------------------------------------------------------------ % Internal options: % % OPTION = 'create' 'load' 'demo' % 'update_deslen' 'extend_truncate' % 'draw' 'save' % 'clear_graphics' 'mode' % 'close' % % See also WEXTEND. % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 23-Oct-98. % Last Revision: 07-Aug-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.11.4.20 $ $Date: 2013/08/23 23:45:10 $ % Test inputs. %------------- if nargin==0 , option = 'create'; end [option,winAttrb] = utguidiv('ini',option,varargin{:}); % Initialisations for all options excepted 'create'. %--------------------------------------------------- switch option case 'create' otherwise % Get figure handle. %------------------- win_sigxtool = varargin{1}; % Get stored structure. %---------------------- Hdls_UIC1 = wfigmngr('getValue',win_sigxtool,'Hdls_UIC1'); Hdls_UIC2 = wfigmngr('getValue',win_sigxtool,'Hdls_UIC2'); Hdls_UIC3 = wfigmngr('getValue',win_sigxtool,'Hdls_UIC3'); Hdls_Axes = wfigmngr('getValue',win_sigxtool,'Hdls_Axes'); % Get UIC Handles. %----------------- [m_load,m_save,m_demo,txt_signal,edi_signal,... txt_mode,pop_mode,pus_extend] = deal(Hdls_UIC1{:}); %#ok<ASGLU> m_exp_sig = wtbxappdata('get',win_sigxtool,'m_exp_sig'); [frm_fra1,txt_length,edi_length,txt_nextpow2,edi_nextpow2, ... txt_prevpow2,edi_prevpow2,txt_deslen,edi_deslen,txt_direct, ... pop_direct] = deal(Hdls_UIC2{:}); %#ok<ASGLU> [frm_fra2,txt_swtdec,pop_swtdec,txt_swtlen,edi_swtlen, ... txt_swtclen,edi_swtclen,txt_swtdir,~] = deal(Hdls_UIC3{:}); %#ok<ASGLU> end % Process control depending on the calling option. %------------------------------------------------- switch option case 'create' %-------------------------------------------------------% % Option: 'CREATE' - Create Figure, Uicontrols and Axes % %-------------------------------------------------------% % Get Globals. %------------- [btn_Height,Def_Btn_Width, ... X_Spacing,Y_Spacing,ediActBkColor,ediInActBkColor, ... Def_FraBkColor,Def_ShadowColor] = ... mextglob('get', ... 'Def_Btn_Height','Def_Btn_Width', ... 'X_Spacing','Y_Spacing', ... 'Def_Edi_ActBkColor','Def_Edi_InActBkColor', ... 'Def_FraBkColor','Def_ShadowColor' ... ); % Window initialization. %----------------------- [win_sigxtool,pos_win,win_units,str_numwin,pos_frame0] = ... wfigmngr('create',getWavMSG('Wavelet:divGUIRF:Nam_SigExt'), ... winAttrb,'ExtFig_Tool_3',{mfilename,'cond'},1,1,0); if nargout>0 , varargout{1} = win_sigxtool; end % Add Help for Tool. %------------------ wfighelp('addHelpTool',win_sigxtool, ... getWavMSG('Wavelet:divGUIRF:HLP_OneDimExt'),'SIGX_GUI'); % Add Help Item. %---------------- wfighelp('addHelpItem',win_sigxtool,... getWavMSG('Wavelet:divGUIRF:HLP_BordDist'),'BORDER_DIST'); % Menu construction for current figure. %-------------------------------------- m_files = wfigmngr('getmenus',win_sigxtool,'file'); m_load = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:LoadSig'),... 'Position',1, ... 'Callback',[mfilename '(''load'',' str_numwin ');'] ... ); m_save = uimenu(m_files,... 'Label',getWavMSG('Wavelet:divGUIRF:Save_TransSig'), ... 'Position',2,'Enable','Off', ... 'Callback',[mfilename '(''save'',' str_numwin ');'] ... ); m_demo = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:divGUIRF:Example_Extension'), ... 'Position',3,'Tag','Examples'); uimenu(m_files,... 'Label',getWavMSG('Wavelet:commongui:Str_ImpSig'), ... 'Position',4,'Separator','On', ... 'Tag','Import', ... 'Callback',[mfilename '(''load'',' str_numwin ',''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 ');']... ); demoSET = {... 'noisbloc' , 'ext' , '{''zpd'' , 1236 , ''both''}' ; ... 'noisbloc' , 'trunc' , '{''nul'', 865 , ''both'' }' ; ... 'cuspamax' , 'ext' , '{''spd'' , 1400 , ''right''}' ; ... 'cuspamax' , 'ext' , '{''spd'' , 1400 , ''left''}' ; ... 'cuspamax' , 'ext' , '{''spd'' , 1400 , ''both''}' ; ... 'noisbump' , 'ext' , '{''sym'' , 1600 , ''both''}' ; ... 'freqbrk' , 'trunc' , '{''nul'', 666 , ''left'' }' ; ... 'freqbrk' , 'ext' , '{''swt'' , 10 , ''right''}' ... }; nbDEM = size(demoSET,1); beg_call_str = [mfilename '(''demo'',' str_numwin ',''']; for k = 1:nbDEM typ = demoSET{k,2}; fil = demoSET{k,1}; par = demoSET{k,3}; libel = getWavMSG(['Wavelet:divGUIRF:SigEXT_Ex' int2str(k)]); action = [beg_call_str fil ''',''' typ ''',' par ');']; uimenu(m_demo,'Label',libel,'Callback',action); end % Borders and double borders. %---------------------------- dx = X_Spacing; dx2 = 2*dx; dy = Y_Spacing; dy2 = 2*dy; % General graphical parameters initialization. %-------------------------------------------- x_frame0 = pos_frame0(1); cmd_width = pos_frame0(3); pus_width = cmd_width-4*dx2; txt_width = 7*Def_Btn_Width/4; edi_width = 3*Def_Btn_Width/4; bdx = 0.08*pos_win(3); bdy = 0.06*pos_win(4); x_graph = bdx; y_graph = 2*btn_Height+dy; h_graph = pos_frame0(4)-y_graph; w_graph = pos_frame0(1); % Command part of the window. %============================ % Position property of objects. %------------------------------ delta_Xleft = wtbutils('extension_PREFS'); ybottomINI = pos_win(4)-dy2; x_left_0 = x_frame0 + dx2 + dx; x_left_1 = x_left_0 + txt_width/2 + delta_Xleft; x_left_2 = x_left_1 + edi_width; y_low = ybottomINI-btn_Height-2*dy2; pos_txt_signal = [x_left_0, y_low, txt_width btn_Height]; pos_edi_signal = [x_left_1, y_low+dy, 2*edi_width , btn_Height]; y_low = y_low-1.5*(btn_Height+2*dy2); pos_txt_length = [x_left_0, y_low, txt_width btn_Height]; pos_edi_length = [x_left_2, y_low+dy, edi_width , btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_nextpow2 = [x_left_0, y_low, txt_width btn_Height]; pos_edi_nextpow2 = [x_left_2, y_low+dy, edi_width , btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_prevpow2 = [x_left_0, y_low, txt_width btn_Height]; pos_edi_prevpow2 = [x_left_2, y_low+dy, edi_width , btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_deslen = [x_left_0, y_low, txt_width btn_Height]; pos_edi_deslen = [x_left_2, y_low+dy, edi_width , btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_direct = [x_left_0, y_low, txt_width, btn_Height]; pos_pop_direct = [x_left_2, y_low+dy, edi_width , btn_Height]; y_low = y_low-dy; pos_fra1 = [x_left_0-dx2, y_low, cmd_width-dx2, ... 5*(btn_Height+2*dy2)+dy]; y_low = y_low-(2*btn_Height+2*dy2); x_left = x_frame0+(cmd_width-txt_width)/2; pos_txt_mode = [x_left, y_low, txt_width, btn_Height]; y_low = y_low-btn_Height; pos_pop_mode = [x_left_0, y_low, pus_width+2*dx2 , btn_Height]; y_low = y_low-2*(btn_Height+2*dy2); pos_pus_extend = [x_left_0+dx2, y_low, pus_width, 1.5*btn_Height]; pos_fra2 = pos_fra1; pos_fra2(4) = 3*(btn_Height+2*dy2)+dy; x_left = x_left_0-dx2; y_low = pos_fra2(2)+pos_fra2(4)+3*dy2; pos_txt_swtdec = [x_left, y_low, 9*txt_width/8, btn_Height]; x_left = x_left + pos_txt_swtdec(3) ; pos_pop_swtdec = [x_left, y_low+dy, edi_width, btn_Height]; y_low = pos_fra2(2)+pos_fra2(4)-(btn_Height+2*dy2); pos_txt_swtlen = [x_left_0, y_low, txt_width, btn_Height]; pos_edi_swtlen = [x_left_2, y_low+dy, edi_width, btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_swtclen = [x_left_0, y_low, txt_width, btn_Height]; pos_edi_swtclen = [x_left_2, y_low+dy, edi_width, btn_Height]; y_low = y_low-(btn_Height+2*dy2); pos_txt_swtdir = [x_left_0, y_low, txt_width, btn_Height]; pos_edi_swtdir = [x_left_2, y_low+dy, edi_width, btn_Height]; % String property of objects. %---------------------------- str_txt_signal = getWavMSG('Wavelet:commongui:Str_Sig'); str_edi_signal = ''; str_txt_length = getWavMSG('Wavelet:commongui:Str_Length'); str_edi_length = ''; str_txt_nextpow2 = getWavMSG('Wavelet:divGUIRF:Str_Nextpow2'); str_edi_nextpow2 = ''; str_txt_prevpow2 = getWavMSG('Wavelet:divGUIRF:Str_Prevpow2'); str_edi_prevpow2 = ''; str_txt_deslen = getWavMSG('Wavelet:divGUIRF:Str_DesLength'); str_edi_deslen = ''; str_txt_direct = getWavMSG('Wavelet:divGUIRF:Str_Dir2Ext'); str_pop_direct = { ... getWavMSG('Wavelet:divGUIRF:Str_dir_Both') ; ... getWavMSG('Wavelet:divGUIRF:Str_dir_Left') ; ... getWavMSG('Wavelet:divGUIRF:Str_dir_Right') ... }; str_txt_mode = getWavMSG('Wavelet:divGUIRF:Str_ExtM'); str_pop_mode = {... getWavMSG('Wavelet:divGUIRF:ExtM_Symmetric_H'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Symmetric_W'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Antisymmetric_H'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Antisymmetric_W'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Periodic'), ... getWavMSG('Wavelet:divGUIRF:ExtM_ZPD'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Continuous'), ... getWavMSG('Wavelet:divGUIRF:ExtM_Smooth'), ... getWavMSG('Wavelet:divGUIRF:ExtM_For_SWT') ... }; usr_pop_mode = {... 'Symmetric_H','Symmetric_W', ... 'Antisymmetric_H','Antisymmetric_W',... 'Periodic','ZPD','Continuous','Smooth','For_SWT' ... }; str_pus_extend = getWavMSG('Wavelet:divGUIRF:Str_Extend'); str_txt_swtdec = getWavMSG('Wavelet:divGUIRF:SWT_DecLev'); str_pop_swtdec = num2str((1:10)'); str_txt_swtlen = getWavMSG('Wavelet:commongui:Str_Length'); str_edi_swtlen = ''; str_txt_swtclen = getWavMSG('Wavelet:divGUIRF:Computed_Length'); str_edi_swtclen = ''; str_txt_swtdir = getWavMSG('Wavelet:divGUIRF:Str_Dir2Ext'); str_edi_swtdir = getWavMSG('Wavelet:divGUIRF:Str_dir_Right'); str_tip_swtclen = getWavMSG('Wavelet:divGUIRF:Tip_SWTLen'); % Construction of uicontrols. %---------------------------- commonProp = {'Parent',win_sigxtool,'Units',win_units,'Visible','off'}; comFraProp = [commonProp, ... 'BackgroundColor',Def_FraBkColor, ... 'ForegroundColor',Def_ShadowColor, ... 'Style','frame' ... ]; comPusProp = [commonProp,'Style','pushbutton']; comPopProp = [commonProp,'Style','Popupmenu']; comTxtProp = [commonProp, ... 'ForegroundColor','k', ... 'BackgroundColor',Def_FraBkColor, ... 'HorizontalAlignment','left', ... 'Style','Text' ... ]; comEdiProp = [commonProp, ... 'ForegroundColor','k', ... 'HorizontalAlignment','center', ... 'Style','Edit' ... ]; txt_signal = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_signal, ... 'String',str_txt_signal ... ); edi_signal = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_signal, ... 'String',str_edi_signal, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); frm_fra1 = uicontrol( ... comFraProp{:}, ... 'Position',pos_fra1 ... ); txt_length = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_length, ... 'String',str_txt_length ... ); edi_length = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_length, ... 'String',str_edi_length, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); txt_nextpow2 = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_nextpow2, ... 'String',str_txt_nextpow2 ... ); edi_nextpow2 = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_nextpow2, ... 'String',str_edi_nextpow2, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); txt_prevpow2 = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_prevpow2, ... 'String',str_txt_prevpow2 ... ); edi_prevpow2 = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_prevpow2, ... 'String',str_edi_prevpow2, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); txt_deslen = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_deslen, ... 'String',str_txt_deslen ... ); edi_deslen = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_deslen, ... 'String',str_edi_deslen, ... 'Tag','edi_deslen', ... 'BackgroundColor',ediActBkColor ... ); txt_direct = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_direct, ... 'String',str_txt_direct ... ); pop_direct = uicontrol( ... comPopProp{:}, ... 'Position',pos_pop_direct, ... 'Tag','pop_direct', ... 'String',str_pop_direct ... ); txt_mode = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_mode, ... 'HorizontalAlignment','center', ... 'String',str_txt_mode ... ); pop_mode = uicontrol( ... comPopProp{:}, ... 'Position',pos_pop_mode, ... 'Tag','pop_mode', ... 'String',str_pop_mode , ... 'UserData',usr_pop_mode ... ); pus_extend = uicontrol( ... comPusProp{:}, ... 'Position',pos_pus_extend, ... 'String',str_pus_extend, ... 'Tag','Extend', ... 'Interruptible','On' ... ); frm_fra2 = uicontrol( ... comFraProp{:}, ... 'Position',pos_fra2 ... ); txt_swtdec = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_swtdec, ... 'String',str_txt_swtdec ... ); pop_swtdec = uicontrol( ... comPopProp{:}, ... 'Position',pos_pop_swtdec, ... 'String',str_pop_swtdec ... ); txt_swtlen = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_swtlen, ... 'String',str_txt_swtlen ... ); edi_swtlen = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_swtlen, ... 'String',str_edi_swtlen, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); txt_swtclen = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_swtclen, ... 'TooltipString',str_tip_swtclen, ... 'String',str_txt_swtclen ... ); edi_swtclen = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_swtclen, ... 'String',str_edi_swtclen, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); txt_swtdir = uicontrol( ... comTxtProp{:}, ... 'Position',pos_txt_swtdir, ... 'String',str_txt_swtdir ... ); edi_swtdir = uicontrol( ... comEdiProp{:}, ... 'Position',pos_edi_swtdir, ... 'String',str_edi_swtdir, ... 'BackgroundColor',ediInActBkColor, ... 'Enable','Inactive' ... ); % Callback property of objects. %------------------------------ str_win_sext = num2mstr(win_sigxtool); cba_edi_deslen = [mfilename '(''update_deslen'',' str_win_sext ');']; cba_pop_swtdec = [mfilename '(''update_swtdec'',' str_win_sext ');']; cba_pop_direct = [mfilename '(''clear_GRAPHICS'',' str_win_sext ');']; cba_pop_mode = [mfilename '(''mode'',' str_win_sext ');']; cba_pus_extend = [mfilename '(''extend_truncate'',' str_win_sext ');']; set(edi_deslen,'Callback',cba_edi_deslen); set(pop_swtdec,'Callback',cba_pop_swtdec); set(pop_direct,'Callback',cba_pop_direct); set(pop_mode,'Callback',cba_pop_mode); set(pus_extend,'Callback',cba_pus_extend,'UserData','extend'); % Graphic part of the window. %============================ % Axes Construction. %------------------- commonProp = {... 'Parent',win_sigxtool, ... 'Visible','off', ... 'Units','pixels', ... 'XTickLabelMode','manual', ... 'YTickLabelMode','manual', ... 'XTicklabel',[],'YTickLabel',[], ... 'XTick',[],'YTick',[], ... 'Box','On' ... }; % Signal Axes construction. %-------------------------- x_left = x_graph; x_wide = w_graph-2*x_left; y_low = y_graph+h_graph/10+2*bdy; y_height = 9*h_graph/10-y_low-bdy; Pos_Axe_Sig = [x_left, y_low, x_wide, y_height]; Axe_Sig = axes(commonProp{:},'Position',Pos_Axe_Sig); % Legend Axes construction. %-------------------------- X_Leg = Pos_Axe_Sig(1); Y_Leg = Pos_Axe_Sig(2) + 11*Pos_Axe_Sig(4)/10; W_Leg = (Pos_Axe_Sig(3) - Pos_Axe_Sig(1)) / 2.5; H_Leg = (Pos_Axe_Sig(4) - Pos_Axe_Sig(2)) / 2; Pos_Axe_Leg = [X_Leg Y_Leg W_Leg H_Leg]; ud.dynvzaxe.enable = 'Off'; Axe_Leg = axes(commonProp{:}, ... 'Position',Pos_Axe_Leg, ... 'XLim',[0 180], ... 'YLim',[0 20], ... 'UserData',ud ... ); line( ... 'Parent',Axe_Leg, ... 'XData',11:30, ... 'YData',ones(1,20)*14, ... 'LineWidth',3, ... 'Visible','off', ... 'Color',[0.9 0.9 0] ... ); line( ... 'Parent',Axe_Leg, ... 'XData',11:30, ... 'YData',ones(1,20)*7, ... 'LineWidth',3, ... 'Visible','off', ... 'Color','red' ... ); text(40,14,getWavMSG('Wavelet:divGUIRF:TransformedSig'), ... 'Parent',Axe_Leg, ... 'FontWeight','normal', ... 'Visible','off' ... ); text(40,7,getWavMSG('Wavelet:commongui:OriSig'), ... 'Parent',Axe_Leg, ... 'FontWeight','normal', ... 'Visible','off' ... ); % Setting units to normalized. %----------------------------- wfigmngr('normalize',win_sigxtool); % Store values. %-------------- Hdls_UIC1 = { ... m_load,m_save,m_demo, ... txt_signal,edi_signal, ... txt_mode,pop_mode,pus_extend ... }; Hdls_UIC2 = { ... frm_fra1,txt_length,edi_length, ... txt_nextpow2,edi_nextpow2, ... txt_prevpow2,edi_prevpow2, ... txt_deslen,edi_deslen, ... txt_direct,pop_direct ... }; Hdls_UIC3 = { ... frm_fra2,txt_swtdec,pop_swtdec, ... txt_swtlen,edi_swtlen, ... txt_swtclen,edi_swtclen, ... txt_swtdir,edi_swtdir ... }; Hdls_Axes = struct('Axe_Sig',Axe_Sig,'Axe_Leg',Axe_Leg); % Add Context Sensitive Help (CSHelp). %------------------------------------- hdl_BORDER_DIST = [txt_mode,pop_mode]; wfighelp('add_ContextMenu',win_sigxtool,... hdl_BORDER_DIST,'BORDER_DIST'); %------------------------------------- % Store handles. %--------------- wfigmngr('storeValue',win_sigxtool,'Hdls_UIC1',Hdls_UIC1); wfigmngr('storeValue',win_sigxtool,'Hdls_UIC2',Hdls_UIC2); wfigmngr('storeValue',win_sigxtool,'Hdls_UIC3',Hdls_UIC3); wfigmngr('storeValue',win_sigxtool,'Hdls_Axes',Hdls_Axes); wtbxappdata('set',win_sigxtool,'m_exp_sig',m_exp_sig); % Set Figure Visible 'On' %------------------------ set(win_sigxtool,'Visible','On'); case 'load' %-------------------------------------------% % Option: 'LOAD' - Load the original signal % %-------------------------------------------% % Loading file. %------------- if length(varargin)<2 % LOAD Option [sigInfos,Signal_Anal,ok] = ... utguidiv('load_sig',win_sigxtool,'*.mat', ... getWavMSG('Wavelet:commongui:LoadSig')); elseif isequal(varargin{2},'wrks') % LOAD from WORKSPACE [sigInfos,Signal_Anal,ok] = wtbximport('1d'); else % DEMO Option Signal_Name = deblank(varargin{2}); filename = [Signal_Name '.mat']; pathname = utguidiv('WTB_DemoPath',filename); [sigInfos,Signal_Anal,ok] = ... utguidiv('load_dem1D',win_sigxtool,pathname,filename); end if ~ok, return; end % Begin waiting. %--------------- wwaiting('msg',win_sigxtool,getWavMSG('Wavelet:commongui:WaitLoad')); % Cleaning. %---------- sigxtool('clear_GRAPHICS',win_sigxtool,'load'); % Compute UIC values. %-------------------- Signal_Length = length(Signal_Anal); pow = fix(log(Signal_Length)/log(2)); Next_Pow2 = 2^(pow+1); if isequal(2^pow,Signal_Length) Prev_Pow2 = 2^(pow-1); swtpow = pow; else Prev_Pow2 = 2^pow; swtpow = pow+1; end % Compute the default level for SWT. %----------------------------------- def_pow = 1; if ~rem(Signal_Length,2) while ~rem(Signal_Length,2^def_pow), def_pow = def_pow + 1; end def_level = def_pow-1; else def_level = def_pow; end % Compute the extended length for SWT. %------------------------------------- C_Length = Signal_Length; while rem(C_Length,2^def_level), C_Length = C_Length + 1; end % Set UIC values. %---------------- set(edi_signal,'String',sigInfos.name); set(edi_length,'String',sprintf('%.0f',Signal_Length)); set(edi_nextpow2,'String',sprintf('%.0f',Next_Pow2)); set(edi_prevpow2,'String',sprintf('%.0f',Prev_Pow2)); set(edi_deslen,'String',sprintf('%.0f',Next_Pow2)); set(pop_direct,'Value',1); set(pop_mode,'Value',1); set(pus_extend,'String',getWavMSG('Wavelet:divGUIRF:Str_Extend')); set(pus_extend,'Enable','On'); set(pop_swtdec,'Value',1); set(pop_swtdec,'String',int2str((1:swtpow)'),'Value',def_level); set(edi_swtclen,'String',sprintf('%.0f',C_Length)); set(edi_swtlen,'String',sprintf('%.0f',Signal_Length)); % Set UIC visibility. %-------------------- set(cat(1,Hdls_UIC2{:}),'Visible','on') set(cat(1,Hdls_UIC3{:}),'Visible','off') set(cat(1,Hdls_UIC1{4:end}),'Visible','on') % Get Axes Handles. %------------------ Axe_Sig = Hdls_Axes.Axe_Sig; % Drawing. %--------- Line_Sig = line( ... 'Parent',Axe_Sig, ... 'XData',1:Signal_Length, ... 'YData',Signal_Anal, ... 'Color','green' ... ); Max_Sig = max(Signal_Anal); Min_Sig = min(Signal_Anal); Amp_Sig = Max_Sig - Min_Sig; Ylim_Min_Sig_Anal = Min_Sig-Amp_Sig/100; Ylim_Max_Sig_Anal = Max_Sig-Amp_Sig/100; set(Axe_Sig, ... 'XLim',[1,Signal_Length], ... 'YLim',[Ylim_Min_Sig_Anal,Ylim_Max_Sig_Anal], ... 'Visible','on' ... ); set(get(Axe_Sig,'title'),'String',getWavMSG('Wavelet:commongui:OriSig')); % Store values. %-------------- wfigmngr('storeValue',win_sigxtool,'Signal_Anal',Signal_Anal); wfigmngr('storeValue',win_sigxtool,'Line_Sig',Line_Sig); % Update File_Save_Flag. %----------------------- File_Save_Flag = 0; wfigmngr('storeValue',win_sigxtool,'File_Save_Flag',File_Save_Flag); % Dynvtool Attachment. %--------------------- dynvtool('init',win_sigxtool,[],Axe_Sig,[],[1 0],'','',''); % End waiting. %------------- wwaiting('off',win_sigxtool); case 'demo' sigxtool('load',varargin{:}); ext_OR_trunc = varargin{3}; if length(varargin)>3 && ~isempty(varargin{4}) par_Demo = varargin{4}; else return; end extMode = par_Demo{1}; lenSIG = par_Demo{2}; direction = lower(par_Demo{3}); if ~isequal(extMode,'swt') set(edi_deslen,'String',sprintf('%.0f',lenSIG)); sigxtool('update_deslen',win_sigxtool,'noClear'); else set(pop_swtdec,'Value',lenSIG) sigxtool('update_swtdec',win_sigxtool) end switch direction case 'both' , direct = 1; case 'left' , direct = 2; case 'right' , direct = 3; end set(pop_direct,'Value',direct); switch ext_OR_trunc case 'ext' switch extMode case 'sym' , extVal = 1; case 'ppd' , extVal = 5; case 'zpd' , extVal = 6; case 'sp0' , extVal = 7; case {'sp1','spd'} , extVal = 8; case 'swt' , extVal = 9; end set(pop_mode,'Value',extVal); sigxtool('mode',win_sigxtool,'noClear') case 'trunc' end sigxtool('extend_truncate',win_sigxtool); case 'update_swtdec' %----------------------------------------------------------------------% % Option: 'UPDATE_SWTDEC' - Update values when using popup in SWT case % %----------------------------------------------------------------------% % Get stored structure. %---------------------- Signal_Anal = wfigmngr('getValue',win_sigxtool,'Signal_Anal'); % Update the computed length. %---------------------------- Signal_Length = length(Signal_Anal); Level = get(pop_swtdec,'Value'); remLen = rem(Signal_Length,2^Level); if remLen>0 Computed_Length = Signal_Length + 2^Level-remLen; else Computed_Length = Signal_Length; end set(edi_swtclen,'String',sprintf('%.0f',Computed_Length)); % Enabling Extend button. %------------------------ set(pus_extend, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Extend'),'Enable','on'); case 'update_deslen' %--------------------------------------------------------------------------% % Option: 'UPDATE_DESLEN' - Update values when changing the Desired Length % %--------------------------------------------------------------------------% % Cleaning. %---------- if nargin<3 , sigxtool('clear_GRAPHICS',win_sigxtool); end % Update UIC values. %------------------- Signal_Length = wstr2num(get(edi_length,'String')); Desired_Length = wstr2num(get(edi_deslen,'String')); uic_mode = [txt_mode;pop_mode]; if isequal(Signal_Length,Desired_Length) set(uic_mode,'Enable','off'); set(pus_extend,'Enable','off'); elseif isempty(Desired_Length) || Desired_Length < 2 set(edi_deslen,'String',get(edi_nextpow2,'String')); set(txt_direct, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Dir2Ext')); set(uic_mode,'Enable','on'); set(pus_extend, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Extend'), ... 'Enable','on'); elseif Signal_Length < Desired_Length set(txt_direct, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Dir2Ext')); set(uic_mode,'Visible','On','Enable','on'); set(pus_extend, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Extend'), ... 'Enable','on','UserData','extend'); elseif Signal_Length > Desired_Length set(txt_direct, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Dir2Trunc')); set(uic_mode,'Visible','off','Enable','on'); set(pus_extend, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Truncate'), ... 'Enable','on','UserData','truncate'); end case 'mode' %------------------------------------------------------------------------% % Option: 'MODE' - Update the command part when changing Extension Mode % %------------------------------------------------------------------------% % Cleaning. %---------- if nargin<3 , sigxtool('clear_GRAPHICS',win_sigxtool); end % Checking the SWT case for visibility settings. %---------------------------------------------- % Mode_str = get(pop_mode,'String'); Mode_val = get(pop_mode,'Value'); Mode_str = get(pop_mode,'UserData'); if strcmp(Mode_str(Mode_val),'For_SWT') set(cat(1,Hdls_UIC2{:}),'Visible','off'); set(cat(1,Hdls_UIC3{:}),'Visible','on'); Signal_Length = wstr2num(get(edi_swtlen,'String')); Computed_Length = wstr2num(get(edi_swtclen,'String')); if isequal(Signal_Length,2^nextpow2(Signal_Length)) set(pus_extend,'Enable','off'); msg = getWavMSG('Wavelet:divGUIRF:Warn_SWTLen',Signal_Length); wwarndlg(msg,getWavMSG('Wavelet:divGUIRF:SWT_ExtMode'),'block'); elseif Signal_Length < Computed_Length set(pus_extend, ... 'String',getWavMSG('Wavelet:divGUIRF:Str_Extend'), ... 'UserData','extend','Enable','on'); end else set(pus_extend,'Enable','on'); set(cat(1,Hdls_UIC2{:}),'Visible','on'); set(cat(1,Hdls_UIC3{:}),'Visible','off'); end set(cat(1,Hdls_UIC1{4:end}),'Visible','on'); case 'extend_truncate' %--------------------------------------------------------------------------% % Option: 'EXTEND_TRUNCATE' - Compute the new Extended or Truncated signal % %--------------------------------------------------------------------------% % Begin waiting. %--------------- wwaiting('msg',win_sigxtool,getWavMSG('Wavelet:commongui:WaitCompute')); % Get stored structure. %---------------------- Signal_Anal = wfigmngr('getValue',win_sigxtool,'Signal_Anal'); % Get UIC values. %---------------- Signal_Length = wstr2num(get(edi_length,'String')); Str_pop_mode = get(pop_mode,'String'); last_Mode = length(Str_pop_mode); Val_pop_mode = get(pop_mode,'Value'); if isequal(Val_pop_mode,last_Mode) Val_pop_direct = 3; Desired_Length = wstr2num(get(edi_swtclen,'String')); else Val_pop_direct = get(pop_direct,'Value'); Desired_Length = wstr2num(get(edi_deslen,'String')); end % Extension mode conversion. %--------------------------- Mode_Values = {'sym';'symw';'asym';'asymw';'ppd';'zpd';'sp0';'spd';'ppd'}; Mode = Mode_Values{Val_pop_mode}; % Get action to do. %------------------ action = get(pus_extend,'UserData'); switch action case 'truncate' switch Val_pop_direct case 2 % 'Left' % Computing new signal. %---------------------- New_Signal = wkeep1(Signal_Anal,Desired_Length,'r'); % Drawing. %--------- Deb_O_S = 1; Fin_O_S = Signal_Length; Deb_N_S = 1 + Signal_Length - Desired_Length; Fin_N_S = Signal_Length; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,Signal_Anal, ... Signal_Lims,action); case 3 % 'Right' % Computing new signal. %---------------------- New_Signal = wkeep1(Signal_Anal,Desired_Length,'l'); % Drawing. %--------- Deb_O_S = 1; Fin_O_S = Signal_Length; Deb_N_S = 1; Fin_N_S = Desired_Length; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,Signal_Anal, ... Signal_Lims,action); case 1 % 'Both' % Computing new signal. %---------------------- New_Signal = wkeep1(Signal_Anal,Desired_Length,'c'); % Drawing. %--------- Deb_O_S = 1; Fin_O_S = Signal_Length; Deb_N_S = fix((Signal_Length - Desired_Length)/2)+1; Fin_N_S = Deb_N_S + Desired_Length - 1; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,Signal_Anal, ... Signal_Lims,action); otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end case 'extend' switch Val_pop_direct case 2 % 'Left' % Computing new signal. %---------------------- New_Signal = wextend(1,Mode,Signal_Anal, ... Desired_Length-Signal_Length,'l'); % Drawing. %--------- Deb_O_S = Desired_Length - Signal_Length + 1; Fin_O_S = Deb_O_S + Signal_Length - 1; Deb_N_S = 1; Fin_N_S = Desired_Length; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,New_Signal, ... Signal_Lims,action); case 3 % 'Right' % Computing new signal. %---------------------- New_Signal = wextend(1,Mode,Signal_Anal, ... Desired_Length-Signal_Length,'r'); % Drawing. %--------- Deb_O_S = 1; Fin_O_S = Signal_Length; Deb_N_S = 1; Fin_N_S = Desired_Length; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,New_Signal, ... Signal_Lims,action); case 1 % 'Both' % Computing new signal. %---------------------- Diff_Length = Desired_Length-Signal_Length; Ext_Length = ceil(Diff_Length / 2); New_Signal = wextend(1,Mode,Signal_Anal,Ext_Length,'b'); if rem(Diff_Length,2) New_Signal = wkeep1(New_Signal,Desired_Length,'c',1); end % Drawing. %--------- Deb_O_S = fix(Diff_Length / 2) + 1; Fin_O_S = Deb_O_S + Signal_Length-1; Deb_N_S = 1; Fin_N_S = Desired_Length; Signal_Lims = [Deb_O_S Fin_O_S Deb_N_S Fin_N_S]; sigxtool('draw',win_sigxtool,New_Signal, ... Signal_Lims,action); otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end otherwise errargt(mfilename, ... getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end % Saving the new signal. %----------------------- wfigmngr('storeValue',win_sigxtool,'New_Signal',New_Signal); % End waiting. %------------- wwaiting('off',win_sigxtool); case 'draw' %-----------------------------------------------------% % Option: 'DRAW' - Plot both new and original signals % %-----------------------------------------------------% % Get arguments. %--------------- Signal = varargin{2}; Signal_Lims = varargin{3}; action = varargin{4}; Deb_O_S = Signal_Lims(1); Fin_O_S = Signal_Lims(2); Deb_N_S = Signal_Lims(3); Fin_N_S = Signal_Lims(4); % Begin waiting. %--------------- wwaiting('msg',win_sigxtool,getWavMSG('Wavelet:commongui:WaitDraw')); % Get stored structure. %---------------------- Line_Sig = wfigmngr('getValue',win_sigxtool,'Line_Sig'); Box_Old_Sig = wfigmngr('getValue',win_sigxtool,'Box_Old_Sig'); Box_New_Sig = wfigmngr('getValue',win_sigxtool,'Box_New_Sig'); % Get Axes Handles. %------------------ Axe_Sig = Hdls_Axes.Axe_Sig; Axe_Leg = Hdls_Axes.Axe_Leg; % Clean signals axes. %-------------------- if ~isempty(Box_Old_Sig), delete(Box_Old_Sig); end if ~isempty(Box_New_Sig), delete(Box_New_Sig); end % Compute Ylim for the Signal. %----------------------------- Len_Signal = length(Signal); Max_Signal = max(Signal); Min_Signal = min(Signal); Off_Signal = (Max_Signal - Min_Signal) / 100; Ylim_Min = Min_Signal - 10 * Off_Signal; Ylim_Max = Max_Signal + 10 * Off_Signal; % Update axes properties. %------------------------ set(Axe_Sig, ... 'Box','on', ... 'XLim',[1,Len_Signal], ... 'YLim',[Ylim_Min,Ylim_Max], ... 'Visible','on' ... ); set(get(Axe_Sig,'title'),'String',''); % Draw signal. %------------- X = 1:Len_Signal; Y = Signal; set(Line_Sig,'XData',X,'YData',Y,'Parent',Axe_Sig); switch action case 'extend' % Constant coefs. for box design. %-------------------------------- C1 = 7; C2 = 3; S1 = 3; S2 = 3; % Draw Box around old signal. %---------------------------- Y_base = [Ylim_Min Ylim_Max Ylim_Max Ylim_Min Ylim_Min]; X = [Deb_O_S Deb_O_S Fin_O_S Fin_O_S Deb_O_S]; Y = Y_base + [C1 -C1 -C1 C1 C1]*Off_Signal; Box_Old_Sig = line(X,Y, ... 'Parent',Axe_Sig, ... 'Color','red', ... 'LineWidth',S1 ... ); % Draw Box around new signal. %---------------------------- X = [Deb_N_S Deb_N_S Fin_N_S Fin_N_S Deb_N_S]; Y = Y_base + [C2 -C2 -C2 C2 C2]*Off_Signal; Box_New_Sig = line(X,Y, ... 'Parent',Axe_Sig, ... 'Color',[0.9 0.9 0], ... 'LineWidth',S2 ... ); case 'truncate' % Constant coefs. for box design. %-------------------------------- C1 = 3; C2 = 7; S1 = 3; S2 = 3; % Draw Box around old signal. %---------------------------- Y_base = [Ylim_Min Ylim_Max Ylim_Max Ylim_Min Ylim_Min]; X = [Deb_O_S Deb_O_S Fin_O_S Fin_O_S Deb_O_S]; Y = Y_base + [C1 -C1 -C1 C1 C1] * Off_Signal; Box_Old_Sig = line(X,Y, ... 'Parent',Axe_Sig, ... 'Color','red', ... 'LineWidth',S1 ... ); % Draw Box around new signal. %---------------------------- X = [Deb_N_S Deb_N_S Fin_N_S Fin_N_S Deb_N_S]; Y = Y_base + [C2 -C2 -C2 C2 C2] * Off_Signal; Box_New_Sig = line(X,Y, ... 'Parent',Axe_Sig, ... 'Color',[0.9 0.9 0], ... 'LineWidth',S2 ... ); end % Display Legend. %---------------- set(Axe_Leg,'Visible','on'); set(get(Axe_Leg,'Children'),'Visible','on'); % Dynvtool Attachment. %---------------------- dynvtool('init',win_sigxtool,[],Axe_Sig,[],[1 0],'','',''); % Update File_Save_Flag. %----------------------- File_Save_Flag = 0; wfigmngr('storeValue',win_sigxtool,'File_Save_Flag',File_Save_Flag); % Enable save menu On. %--------------------- set([m_save,m_exp_sig],'Enable','on'); % Store values. %-------------- wfigmngr('storeValue',win_sigxtool,'Box_Old_Sig',Box_Old_Sig); wfigmngr('storeValue',win_sigxtool,'Box_New_Sig',Box_New_Sig); % End waiting. %------------- wwaiting('off',win_sigxtool); case 'save' %------------------------------------------% % Option: 'SAVE' - Save transformed signal % %------------------------------------------% % Begin waiting. %-------------- wwaiting('msg',win_sigxtool,getWavMSG('Wavelet:commongui:WaitSave')); % Restore the new signal. %------------------------ x = wfigmngr('getValue',win_sigxtool,'New_Signal'); %#ok<NASGU> % Testing file. %-------------- [filename,pathname,ok] = utguidiv('test_save',win_sigxtool, ... '*.mat',getWavMSG('Wavelet:divGUIRF:Save_TransSig')); if ~ok, return; end % Saving transformed Signal. %--------------------------- [name,ext] = strtok(filename,'.'); if isempty(ext) || isequal(ext,'.') ext = '.mat'; filename = [name ext]; end try eval([name ' = x ;']); catch %#ok<*CTCH> name = 'x'; end saveStr = name; try save([pathname filename],saveStr); catch errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg'); end % Update File_Save_Flag. %----------------------- File_Save_Flag = 1; wfigmngr('storeValue',win_sigxtool,'File_Save_Flag',File_Save_Flag); % Enable save menu On. %--------------------- set([m_save,m_exp_sig],'Enable','off'); % End waiting. %------------- wwaiting('off',win_sigxtool); case 'exp_wrks' wwaiting('msg',win_sigxtool,getWavMSG('Wavelet:commongui:WaitExport')); x = wfigmngr('getValue',win_sigxtool,'New_Signal'); wtbxexport(x,'name','sig_1D','title', ... getWavMSG('Wavelet:divGUIRF:Extended_Sig')); wwaiting('off',win_sigxtool); case 'clear_GRAPHICS' %----------------------------------------------------------------------% % Option: 'CLEAR_GRAPHICS' - Clear graphics and redraw original signal % %----------------------------------------------------------------------% % Get arguments. %--------------- if length(varargin) > 1 , Draw_flag = 0; else Draw_flag = 1; end % Get stored structure. %---------------------- Signal_Anal = wfigmngr('getValue',win_sigxtool,'Signal_Anal'); Line_Sig = wfigmngr('getValue',win_sigxtool,'Line_Sig'); % Get Axes Handles. %------------------ Axe_Sig = Hdls_Axes.Axe_Sig; Axe_Leg = Hdls_Axes.Axe_Leg; % Set graphics part visible off and redraw original signal if needed. %-------------------------------------------------------------------- set(Axe_Leg,'Visible','off'); set(get(Axe_Leg,'Children'),'Visible','off'); if Draw_flag set(findobj(Axe_Sig,'Type','line'),'Visible','Off'); Signal_Length = length(Signal_Anal); Max_Sig = max(Signal_Anal); Min_Sig = min(Signal_Anal); Amp_Sig = Max_Sig - Min_Sig; Ylim_Min_Sig_Anal = Min_Sig-Amp_Sig/100; Ylim_Max_Sig_Anal = Max_Sig-Amp_Sig/100; set(Axe_Sig, ... 'XLim',[1,Signal_Length], ... 'YLim',[Ylim_Min_Sig_Anal,Ylim_Max_Sig_Anal], ... 'Visible','on' ... ); set(get(Axe_Sig,'title'),'String',getWavMSG('Wavelet:commongui:OriSig')); set(Line_Sig, ... 'Parent',Axe_Sig, ... 'XData',1:Signal_Length, ... 'YData',Signal_Anal, ... 'Color','green', ... 'Visible','on' ... ); dynvtool('init',win_sigxtool,[],Axe_Sig,[],[1 0],'','',''); else set(Axe_Sig,'Visible','off'); set(get(Axe_Sig,'Children'),'Visible','off'); end % Enable save menu off. %---------------------- set([m_save,m_exp_sig],'Enable','off'); % Reset the new signal. %---------------------- wfigmngr('storeValue',win_sigxtool,'New_Signal',[]); case 'close' %---------------------------------------% % Option: 'CLOSE' - Close current figure% %---------------------------------------% % Retrieve File_Save_Flag. %------------------------- File_Save_Flag = wfigmngr('getValue',win_sigxtool,'File_Save_Flag'); % Retrieve signal values. %------------------------ New_Signal = wfigmngr('getValue',win_sigxtool,'New_Signal'); Signal_Anal = wfigmngr('getValue',win_sigxtool,'Signal_Anal'); % Test for saving the new signal. %-------------------------------- status = 0; if ~isempty(New_Signal) && length(New_Signal)~=length(Signal_Anal) ... && ~File_Save_Flag status = wwaitans(win_sigxtool,... getWavMSG('Wavelet:divGUIRF:Quest_Save_TransSig'),2,'cond'); end switch status case 1 , sigxtool('save',win_sigxtool) case 0 , end varargout{1} = status; otherwise %-----------------% % Option: UNKNOWN % %-----------------% errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_Input')); end