nwavtool.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:47k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = nwavtool(varargin)
  2. %NWAVTOOL New wavelet for continuous analysis tool.
  3. %   VARARGOUT = NWAVTOOL(VARARGIN)
  4. % NWAVTOOL M-file for nwavtool.fig
  5. %      NWAVTOOL, by itself, creates a new NWAVTOOL or raises the existing
  6. %      singleton*.
  7. %
  8. %      H = NWAVTOOL returns the handle to a new NWAVTOOL or the handle to
  9. %      the existing singleton*.
  10. %
  11. %      NWAVTOOL('Property','Value',...) creates a new NWAVTOOL using the
  12. %      given property value pairs. Unrecognized properties are passed via
  13. %      varargin to nwavtool_OpeningFcn.  This calling syntax produces a
  14. %      warning when there is an existing singleton*.
  15. %
  16. %      NWAVTOOL('CALLBACK') and NWAVTOOL('CALLBACK',hObject,...) call the
  17. %      local function named CALLBACK in NWAVTOOL.M with the given input
  18. %      arguments.
  19. %
  20. %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
  21. %      instance to run (singleton)".
  22. %
  23. % See also: GUIDE, GUIDATA, GUIHANDLES
  24. % Last Modified by GUIDE v2.5 15-Jun-2003 17:49:17
  25. %
  26. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Feb-2003.
  27. %   Last Revision: 25-Feb-2004.
  28. %   Copyright 1995-2004 The MathWorks, Inc.
  29. %   $Revision: 1.1.6.2 $ $Date: 2004/03/15 22:41:28 $ 
  30. %*************************************************************************%
  31. %                BEGIN initialization code - DO NOT EDIT                  %
  32. %                ----------------------------------------                 %
  33. %*************************************************************************%
  34. gui_Singleton = 0;
  35. gui_State = struct('gui_Name',       mfilename, ...
  36.                    'gui_Singleton',  gui_Singleton, ...
  37.                    'gui_OpeningFcn', @nwavtool_OpeningFcn, ...
  38.                    'gui_OutputFcn',  @nwavtool_OutputFcn, ...
  39.                    'gui_LayoutFcn',  [], ...
  40.                    'gui_Callback',   []);
  41. if nargin & isstr(varargin{1})
  42.     gui_State.gui_Callback = str2func(varargin{1});
  43. end
  44. if nargout
  45.     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  46. else
  47.     gui_mainfcn(gui_State, varargin{:});
  48. end
  49. %*************************************************************************%
  50. %                END initialization code - DO NOT EDIT                    %
  51. %*************************************************************************%
  52. %*************************************************************************%
  53. %                BEGIN Opening Function                                   %
  54. %                ----------------------                                   %
  55. % --- Executes just before nwavtool is made visible.                      %
  56. %*************************************************************************%
  57. function nwavtool_OpeningFcn(hObject, eventdata, handles, varargin)
  58. % This function has no output args, see OutputFcn.
  59. % hObject    handle to figure
  60. % eventdata  reserved - to be defined in a future version of MATLAB
  61. % handles    structure with handles and user data (see GUIDATA)
  62. % varargin   unrecognized PropertyName/PropertyValue pairs from the
  63. %            command line (see VARARGIN)
  64. % Choose default command line output for nwavtool
  65. handles.output = hObject;
  66. % Update handles structure
  67. guidata(hObject, handles);
  68. % UIWAIT makes nwavtool wait for user response (see UIRESUME)
  69. % uiwait(handles.Fig_Pat2Cwt);
  70. %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
  71. % TOOL INITIALISATION Introduced manualy in the automatic generated code  %
  72. %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
  73. Init_Tool(hObject,eventdata,handles);
  74. %*************************************************************************%
  75. %                END Opening Function                                     %
  76. %*************************************************************************%
  77. %*************************************************************************%
  78. %                BEGIN Output Function                                    %
  79. %                ---------------------                                    %
  80. % --- Outputs from this function are returned to the command line.        %
  81. %*************************************************************************%
  82. function varargout = nwavtool_OutputFcn(hObject, eventdata, handles)
  83. % varargout  cell array for returning output args (see VARARGOUT);
  84. % hObject    handle to figure
  85. % eventdata  reserved - to be defined in a future version of MATLAB
  86. % handles    structure with handles and user data (see GUIDATA)
  87. % Get default command line output from handles structure
  88. varargout{1} = handles.output;
  89. %*************************************************************************%
  90. %                END Output Function                                      %
  91. %*************************************************************************%
  92. %=========================================================================%
  93. %                BEGIN Create Functions                                   %
  94. %                ----------------------                                   %
  95. % --- Executes during object creation, after setting all properties.      %
  96. %=========================================================================%
  97. function EdiPop_CreateFcn(hObject,eventdata,handles)
  98. % hObject    handle to Edi_Object or Pop_Object (see GCBO)
  99. % eventdata  reserved - to be defined in a future version of MATLAB
  100. % handles    empty - handles not created until after all CreateFcns called
  101. % Hint: edit controls usually have a white background on Windows.
  102. % Hint: popupmenu controls usually have a white background on Windows.
  103. % See ISPC and COMPUTER.
  104. if ispc
  105.     % set(hObject,'BackgroundColor','white');
  106.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  107. else
  108.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  109. end
  110. %--------------------------------------------------------------------------
  111. %=========================================================================%
  112. %                END Create Functions                                     %
  113. %=========================================================================%
  114. %=========================================================================%
  115. %                BEGIN Callback Functions                                 %
  116. %                ------------------------                                 %
  117. %=========================================================================%
  118. % --- Executes on selection change in Pop_ApproxMeth.
  119. function Pop_ApproxMeth_Callback(hObject, eventdata, handles)
  120. % hObject    handle to Pop_ApproxMeth (see GCBO)
  121. % eventdata  reserved - to be defined in a future version of MATLAB
  122. % handles    structure with handles and user data (see GUIDATA)
  123. hPolDefFra  = [handles.Fra_PolDegree handles.Pop_PolDegree handles.Txt_PolDegree];
  124. ApproxMeth  = getApproxMeth(hObject);
  125. switch ApproxMeth
  126.     case 'Polynomial' 
  127.         set(hPolDefFra,'Visible','on');
  128.         BoundCondStr = {'None';'Continuous';'Differentiable'};
  129.     case 'OrthConst'
  130.         set(hPolDefFra,'Visible','off');
  131.         BoundCondStr = {'None';'Continuous'};
  132. end
  133. set(handles.Pop_BoundCond,'String',BoundCondStr);
  134. set(handles.Pop_BoundCond,'Value',2);
  135. Pop_PolDegree = get(handles.Pop_PolDegree,'Value');
  136. set(handles.Pop_PolDegree,'Value',max([3,Pop_PolDegree]));
  137. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  138. hRunSig     = tool_PARAMS.hRunSig;
  139. set(hRunSig,'Enable','Off');
  140. %--------------------------------------------------------------------------
  141. function Edi_LowBound_Callback(hObject, eventdata, handles)
  142. % hObject    handle to Edi_LowBound (see GCBO)
  143. % eventdata  reserved - to be defined in a future version of MATLAB
  144. % handles    structure with handles and user data (see GUIDATA)
  145. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  146. LowInter = tool_PARAMS.LowInter;
  147. LowBound = str2double(get(hObject,'String'));
  148. if LowBound > LowInter | isnan(LowBound)
  149.     set(hObject,'String',sprintf('%0.4g',LowInter));
  150. end
  151. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  152. hRunSig     = tool_PARAMS.hRunSig;
  153. set(hRunSig,'Enable','Off');
  154. %--------------------------------------------------------------------------
  155. function Edi_UppBound_Callback(hObject, eventdata, handles)
  156. % hObject    handle to Edi_UppBound (see GCBO)
  157. % eventdata  reserved - to be defined in a future version of MATLAB
  158. % handles    structure with handles and user data (see GUIDATA)
  159. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  160. UppInter = tool_PARAMS.UppInter;
  161. UppBound = str2double(get(hObject,'String'));
  162. if UppBound < UppInter  | isnan(UppBound)
  163.     set(hObject,'String',sprintf('%0.4g',UppInter));
  164. end 
  165. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  166. hRunSig     = tool_PARAMS.hRunSig;
  167. set(hRunSig,'Enable','Off');
  168. %--------------------------------------------------------------------------
  169. % --- Executes on selection change in Pop_PolDegree.
  170. function Pop_PolDegree_Callback(hObject, eventdata, handles)
  171. % hObject    handle to Pop_PolDegree (see GCBO)
  172. % eventdata  reserved - to be defined in a future version of MATLAB
  173. % handles    structure with handles and user data (see GUIDATA)
  174. ApproxMeth = getApproxMeth(handles.Pop_ApproxMeth);
  175. switch ApproxMeth
  176.     case 'Polynomial'
  177.         Regularity = getRegularity(handles.Pop_BoundCond);
  178.         PolDegree  = get(hObject,'Value');
  179.         NBConstraint = 1 + 2*(Regularity + 1);
  180.         freeDegree = PolDegree - NBConstraint;
  181.         if freeDegree<0
  182.             Regularity = floor((PolDegree-3)/2);
  183.         end
  184.         set(handles.Pop_BoundCond,'Value',Regularity+2);
  185.         
  186.     case 'OrthConst',
  187. end
  188. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  189. hRunSig     = tool_PARAMS.hRunSig;
  190. set(hRunSig,'Enable','Off');
  191. %--------------------------------------------------------------------------
  192. % --- Executes on selection change in Pop_BoundCond.
  193. function Pop_BoundCond_Callback(hObject, eventdata, handles)
  194. % hObject    handle to Pop_BoundCond (see GCBO)
  195. % eventdata  reserved - to be defined in a future version of MATLAB
  196. % handles    structure with handles and user data (see GUIDATA)
  197. ApproxMeth = getApproxMeth(handles.Pop_ApproxMeth);
  198. switch ApproxMeth
  199.     case 'Polynomial'
  200.         Regularity = getRegularity(hObject);
  201.         PolDegree  = get(handles.Pop_PolDegree,'Value');
  202.         NBConstraint = 1 + 2*(Regularity + 1);
  203.         freeDegree = PolDegree - NBConstraint;
  204.         if freeDegree<0
  205.             Regularity = floor((PolDegree-3)/2);
  206.         end
  207.         set(handles.Pop_PolDegree,'Value',NBConstraint);
  208.     case 'OrthConst',
  209. end
  210. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  211. hRunSig     = tool_PARAMS.hRunSig;
  212. set(hRunSig,'Enable','Off');
  213. %--------------------------------------------------------------------------
  214. % --- Executes on button press in Rad_Trans.
  215. function Rad_Trans_Callback(hObject, eventdata, handles)
  216. % hObject    handle to Rad_Trans (see GCBO)
  217. % eventdata  reserved - to be defined in a future version of MATLAB
  218. % handles    structure with handles and user data (see GUIDATA)
  219. set(hObject,'Value',1);
  220. set(handles.Rad_Super,'Value',0);
  221. %--------------------------------------------------------------------------
  222. % --- Executes on button press in Rad_Super.
  223. function Rad_Super_Callback(hObject, eventdata, handles)
  224. % hObject    handle to Rad_Super (see GCBO)
  225. % eventdata  reserved - to be defined in a future version of MATLAB
  226. % handles    structure with handles and user data (see GUIDATA)
  227. set(hObject,'Value',1);
  228. set(handles.Rad_Trans,'Value',0);
  229. %--------------------------------------------------------------------------
  230. % --- Executes on button press in Chk_Noise.
  231. function Chk_Noise_Callback(hObject, eventdata, handles)
  232. % hObject    handle to Chk_Noise (see GCBO)
  233. % eventdata  reserved - to be defined in a future version of MATLAB
  234. % handles    structure with handles and user data (see GUIDATA)
  235. %--------------------------------------------------------------------------
  236. % --- Executes on button press in Chk_Triangle.
  237. function Chk_Triangle_Callback(hObject, eventdata, handles)
  238. % hObject    handle to Chk_Triangle (see GCBO)
  239. % eventdata  reserved - to be defined in a future version of MATLAB
  240. % handles    structure with handles and user data (see GUIDATA)
  241. %--------------------------------------------------------------------------
  242. % --- Executes on button press in Pus_Approximate.
  243. function Pus_Approximate_Callback(hObject, eventdata, handles)
  244. % hObject    handle to Pus_Approximate (see GCBO)
  245. % eventdata  reserved - to be defined in a future version of MATLAB
  246. % handles    structure with handles and user data (see GUIDATA)
  247. % Get figure handle.
  248. %-------------------
  249. hFig = handles.output;
  250. % Cleaning.
  251. %-----------
  252. wwaiting('msg',hFig,'Wait ... cleaning');
  253. cleanTOOL([handles.Axe_PatWav handles.Axe_RunSig handles.Axe_Detect]);
  254. ColorBarVisibility(handles.Axe_ColBar,'Off');
  255. % Computing.
  256. %-----------
  257. wwaiting('msg',hFig,'Wait ... computing');
  258. % Get parameter values.
  259. %----------------------
  260. tool_PARAMS     = wtbxappdata('get',hObject,'tool_PARAMS');
  261. X               = tool_PARAMS.X;
  262. Y               = tool_PARAMS.Y;
  263. hRunSig         = tool_PARAMS.hRunSig;
  264. ApproxMeth      = getApproxMeth(handles.Pop_ApproxMeth);
  265. LowBound        = str2double(get(handles.Edi_LowBound,'String'));
  266. UppBound        = str2double(get(handles.Edi_UppBound,'String'));
  267. PolDegreeStr    = get(handles.Pop_PolDegree,'String');
  268. PolDegreeVal    = get(handles.Pop_PolDegree,'Value');
  269. PolDegree       = str2double(PolDegreeStr{PolDegreeVal});
  270. BoundCondStr    = get(handles.Pop_BoundCond,'String');
  271. BoundCondVal    = get(handles.Pop_BoundCond,'Value');
  272. BoundCond       = BoundCondStr{BoundCondVal};
  273. switch ApproxMeth
  274.     case 'Polynomial'
  275.         switch BoundCond
  276.             case 'Continuous' ,   , Regularity =  0;
  277.             case 'Differentiable' , Regularity =  1;
  278.             otherwise ,             Regularity = -1;
  279.         end
  280.     case 'OrthConst'
  281.         switch BoundCond
  282.             case 'none'           , Regularity = -1; PolDegree = 0;
  283.             case 'Continuous' ,   , Regularity =  0; PolDegree = 2;
  284.             otherwise ,             Regularity = -1; PolDegree = 0;
  285.         end
  286. end
  287. % Compute approximation.
  288. %-----------------------
  289. [PSI,X_PSI,NC_PSI] = pat2cwav(Y,ApproxMeth,PolDegree,Regularity);
  290. PSI_pat = NC_PSI*PSI;     % Approximation of the original pattern.
  291. deltaX   = 0.05;
  292. XVAL_PSI = [LowBound-deltaX,LowBound,min(X_PSI)-eps, ...
  293.             NaN,X_PSI,NaN,max(X_PSI)+eps,UppBound,UppBound+deltaX];
  294. XVAL_FUN = [LowBound-deltaX,LowBound,NaN,X,NaN,UppBound,UppBound+deltaX];
  295. YVAL_PSI = [0,0,0,NaN,PSI_pat,NaN,0,0,0];
  296. YVAL_FUN = [NaN,NaN,NaN,Y,NaN,NaN,NaN];
  297. % Store PSI.
  298. %-----------
  299. tool_PARAMS        = wtbxappdata('get',hObject,'tool_PARAMS');
  300. tool_PARAMS.PSI    = PSI;
  301. tool_PARAMS.NC_PSI = NC_PSI;
  302. wtbxappdata('set',hObject,'tool_PARAMS',tool_PARAMS);
  303. % Pattern and wavelet axes display.
  304. %----------------------------------
  305. lw = 1;
  306. axes(handles.Axe_PatWav);
  307. line(XVAL_FUN,YVAL_FUN,'color','r','linewidth',max(lw,2));
  308. line(XVAL_PSI,YVAL_PSI,'color','g','linewidth',max(lw,2));
  309. Xlim = [LowBound-deltaX UppBound+deltaX];
  310. Ymin = min(min(PSI_pat),min(Y));
  311. Ymax = max(max(PSI_pat),max(Y));
  312. ext = abs(Ymax - Ymin) / 100;
  313. Ylim = [Ymin-ext Ymax+ext];
  314. set(handles.Axe_PatWav,'Xlim',Xlim,'Ylim',Ylim);
  315. % Init DynVTool.
  316. %---------------
  317. axe_IND = [...
  318.             handles.Axe_Pattern ,   ...
  319.             handles.Axe_PatWav      ...
  320.             ];
  321. axe_CMD = [...
  322.             handles.Axe_RunSig ,    ...
  323.             handles.Axe_Detect      ...
  324.             ];
  325. axe_ACT = [];
  326. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','');
  327. % Set the axes visible.
  328. %----------------------
  329. set(handles.Axe_PatWav,'Visible','on');
  330. % Set visible and enabled uicontrols.
  331. %------------------------------------
  332. set(hRunSig,'Visible','on','Enable','On');
  333. % get Menu Handles.
  334. %------------------
  335. hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
  336. % Enable the Save Synthetisized signal Menu item.
  337. %------------------------------------------------
  338. set(hdl_Menus.m_save,'enable','on');
  339. % End waiting.
  340. %-------------
  341. wwaiting('off',hFig);
  342. %--------------------------------------------------------------------------
  343. % --- Executes on button press in Pus_Run.
  344. function Pus_Run_Callback(hObject, eventdata, handles)
  345. % hObject    handle to Pus_Run (see GCBO)
  346. % eventdata  reserved - to be defined in a future version of MATLAB
  347. % handles    structure with handles and user data (see GUIDATA)
  348. % Get figure handle.
  349. %-------------------
  350. hFig = handles.output;
  351. % Cleaning.
  352. %-----------
  353. wwaiting('msg',hFig,'Wait ... cleaning');
  354. cleanTOOL([handles.Axe_RunSig handles.Axe_Detect]);
  355. % ColorBarVisibility(handles.Axe_ColBar,'On');
  356. % Computing.
  357. %-----------
  358. wwaiting('msg',hFig,'Wait ... computing');
  359. % Get parameter values.
  360. %----------------------
  361. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  362. X           = tool_PARAMS.X;
  363. Y           = tool_PARAMS.Y;
  364. PSI         = tool_PARAMS.PSI;
  365. RadTrans    = get(handles.Rad_Trans,'Value');
  366. RadSuper    = get(handles.Rad_Super,'Value');
  367. ChkNoise    = get(handles.Chk_Noise,'Value');
  368. ChkTriangle = get(handles.Chk_Triangle,'Value');
  369. % Running signal construction.
  370. %-----------------------------
  371. titleSTR{1} = 'Running Signal';
  372. if RadTrans
  373.     nbFormeBASE = 8; scaleBASE = 8; rapport = 2; PONDERATIONS =  [1,1];
  374.     signalBASE = getSignal('translate',Y,rapport,PONDERATIONS,nbFormeBASE);
  375.     lenSIG  = length(signalBASE);
  376.     scaleMIN = 1;
  377.     scaleMAX = 2*scaleBASE;
  378.     NoiseLevel = 1.25;
  379.     titleSTR{2} = 'F((t-20)/8) + sqrt(2)timesF((t-40)/4)';
  380. else
  381.     nbFormeBASE = 3; scaleBASE = 32; rapport = 4; PONDERATIONS =  [1,1];
  382.     signalBASE = getSignal('superpose',Y,rapport,PONDERATIONS,nbFormeBASE);
  383.     lenSIG  = length(signalBASE);
  384.     scaleMIN = 1;
  385.     scaleMAX = 2*scaleBASE;
  386.     NoiseLevel = 0.75;
  387.     titleSTR{2} = 'F((t-40)/32) + 2timesF((t-40)/8)';
  388. end
  389. signal = signalBASE;
  390. if ChkNoise
  391.     NoiseLevel = NoiseLevel*std(signal);
  392.     Noise = NoiseLevel*randn(1,lenSIG);
  393.     signal = signal + Noise;
  394.     titleSTR{2} = [titleSTR{2} ' + N'];
  395. end
  396. if ChkTriangle
  397.     L = lenSIG/2;
  398.     Triangle = [1:floor(L) , ceil(L):-1:1]/ceil(L);
  399.     signal = signal + Triangle;
  400.     titleSTR{2} = [titleSTR{2} ' + T'];
  401. end
  402. intervalleSIG = [0,nbFormeBASE*scaleBASE];
  403. stepSIG = (intervalleSIG(2)-intervalleSIG(1))/(lenSIG-1);
  404. xvalSIG = linspace(intervalleSIG(1),intervalleSIG(2),lenSIG);
  405. stepScales = 1;
  406. scales  = [scaleMIN:stepScales:scaleMAX];
  407. % Running signal axes display.
  408. %-----------------------------
  409. lw = 1;
  410. axes(handles.Axe_RunSig);
  411. line(xvalSIG,signal,'color','b','linewidth',lw);
  412. Xlim = intervalleSIG;
  413. ext = abs(max(signal) - min(signal)) / 100;
  414. Ylim = [min(signal)-ext max(signal)+ext];
  415. set(handles.Axe_RunSig,'Xlim',Xlim,'Ylim',Ylim);
  416. setAxesTitle(handles.Axe_RunSig,titleSTR);
  417. % Set the axes visible.
  418. %----------------------
  419. set(handles.Axe_RunSig,'Visible','on');
  420. % Compute the cwt.
  421. %-----------------
  422. C_psi = cwt({signal,stepSIG},scales,PSI);
  423. % Find the coordinates of max coefs.
  424. %-----------------------------------
  425. [ROW_psi,COL_psi] = maxCoefs(C_psi);
  426. % Plot contours and local grid lines.
  427. %------------------------------------
  428. plotCONTOUR(C_psi,scales,xvalSIG,handles.Axe_Detect,handles.Axe_ColBar);
  429. LocalGrid(handles.Axe_Detect,RadTrans)
  430. % Set the axes visible.
  431. %----------------------
  432. set(handles.Axe_Detect,'Visible','on');
  433. % Set Colorbar visible.
  434. %----------------------
  435. ColorBarVisibility(handles.Axe_ColBar,'On');
  436. % Init DynVTool.
  437. %---------------
  438. axe_IND = [...
  439.         handles.Axe_Pattern , ...
  440.         handles.Axe_PatWav ...
  441.         ];
  442. axe_CMD = [...
  443.         handles.Axe_RunSig , ...
  444.         handles.Axe_Detect ...
  445.         ];
  446. axe_ACT = [];
  447. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','');
  448. % End waiting.
  449. %-------------
  450. wwaiting('off',hFig);
  451. %--------------------------------------------------------------------------
  452. % --- Executes on button press in Pus_Compare.
  453. function Pus_Compare_Callback(hObject, eventdata, handles)
  454. % hObject    handle to Pus_Compare (see GCBO)
  455. % eventdata  reserved - to be defined in a future version of MATLAB
  456. % handles    structure with handles and user data (see GUIDATA)
  457. % Get figure handle.
  458. %-------------------
  459. hFig = handles.output;
  460. % get Tool Parameters.
  461. %---------------------
  462. Nwavetool_PARAMS             = wtbxappdata('get',hFig,'tool_PARAMS');
  463. Nwavetool_PARAMS.RadTrans    = get(handles.Rad_Trans,'Value');
  464. Nwavetool_PARAMS.RadSuper    = get(handles.Rad_Super,'Value');
  465. Nwavetool_PARAMS.ChkNoise    = get(handles.Chk_Noise,'Value');
  466. Nwavetool_PARAMS.ChkTriangle = get(handles.Chk_Triangle,'Value');
  467. Nwavetool_PARAMS.Pus_Compare = handles.Pus_Compare;
  468. % Call the compwav figure and pass the tool_PARAMS structure.
  469. %------------------------------------------------------------
  470. % compwav('NwavtoolCall_Callback',gcbo,[],guidata(gcbo),Nwavetool_PARAMS)
  471. compwav('NwavtoolCall_Callback',hFig,[],handles,Nwavetool_PARAMS);
  472. %--------------------------------------------------------------------------
  473. % --- Executes on button press in Pus_CloseWin.
  474. function Pus_CloseWin_Callback(hObject, eventdata, handles)
  475. % hObject    handle to Pus_CloseWin (see GCBO)
  476. % eventdata  reserved - to be defined in a future version of MATLAB
  477. % handles    structure with handles and user data (see GUIDATA)
  478. hdl_Menus = wtbxappdata('get',hObject,'hdl_Menus');
  479. m_save = hdl_Menus.m_save;
  480. ena_Save = get(m_save,'Enable');
  481. hFig = get(hObject,'Parent');
  482. if isequal(lower(ena_Save),'on')
  483.     status = wwaitans({hFig,'Save Adapted Wavelet'},...
  484.         'Save the adapted wavelet ?',2,'Cancel');
  485.     switch status
  486.         case -1 , return;
  487.         case  1
  488.             Men_SaveWave_Callback(m_save, eventdata, handles)
  489.         otherwise
  490.     end
  491. end
  492. delete(handles.Axe_ColBar); % BUG AXES
  493. close(hFig) 
  494. %--------------------------------------------------------------------------
  495. %=========================================================================%
  496. %                END Callback Functions                                   %
  497. %=========================================================================%
  498. %=========================================================================%
  499. %                BEGIN Callback Menus                                     %
  500. %                --------------------                                     %
  501. %=========================================================================%
  502. % --- Executes on menu item press in File ---> Load Pattern.
  503. function Men_LoadPat_Callback(hObject, eventdata, handles, pathname, filename)
  504. % hObject    handle to Men_LoadPat (see GCBO)
  505. % eventdata  reserved - to be defined in a future version of MATLAB
  506. % handles    structure with handles and user data (see GUIDATA)
  507. % Get figure handle.
  508. %-------------------
  509. hFig = handles.output;
  510. % Testing file.
  511. %--------------
  512. if nargin<4
  513.     [sigInfos,sig_Anal,ok] = ...
  514.         utguidiv('load_sig',hFig,'*.mat','Load Pattern');
  515.     if ok
  516.         pathname = sigInfos.pathname;         
  517.         filename = sigInfos.filename;
  518.     end
  519. else
  520.     ok = 1;
  521.     try
  522.         load(filename)
  523.     catch
  524.         ok = 0;
  525.     end
  526. end
  527. if ~ok, return; end
  528. % Cleaning.
  529. %-----------
  530. wwaiting('msg',hFig,'Wait ... cleaning');
  531. hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
  532. set(hdl_Menus.m_save,'Enable','Off');
  533. cleanTOOL([ handles.Axe_Pattern handles.Axe_PatWav ...
  534.             handles.Axe_RunSig handles.Axe_Detect]);
  535. ColorBarVisibility(handles.Axe_ColBar,'Off');
  536. % Reinitialization of the GUI default values.
  537. %--------------------------------------------
  538. hPolDefFra  = [handles.Fra_PolDegree handles.Pop_PolDegree handles.Txt_PolDegree];
  539. set(hPolDefFra,'Visible','on');
  540. BoundCondStr = {'None';'Continuous';'Differentiable'};
  541. set(handles.Pop_BoundCond,'String',BoundCondStr);
  542. set(handles.Pop_BoundCond,'Value',2);
  543. set(handles.Pop_ApproxMeth,'Value',1);
  544. set(handles.Pop_PolDegree,'Value',3);
  545. set(handles.Rad_Super,'Value',0);
  546. set(handles.Rad_Trans,'Value',1);
  547. set(handles.Chk_Noise,'Value',0);
  548. set(handles.Chk_Triangle,'Value',0);
  549. % Loading file.
  550. %--------------
  551. [name,ext] = strtok(filename,'.');
  552. if isempty(ext) | isequal(ext,'.')
  553.     ext = '.mat'; filename = [name ext];
  554. end
  555. try
  556.     fullName = [pathname filename];
  557.     % fileStruct = whos('-file',fullName);
  558.     TMP = load(fullName);
  559.     DUM = fieldnames(TMP);
  560.     idxY = find(strcmp(DUM,'Y'));
  561.     if ~isempty(idxY)
  562.         Y = TMP.(DUM{idxY});
  563.     else
  564.         Y = TMP.(DUM{1});
  565.     end
  566.     clear TMP DUM idxY
  567. catch          
  568.     errargt(mfilename,'Load FAILED !','msg');
  569.     wwaiting('off',hFig);
  570.     return;
  571. end
  572. % Get variable values.
  573. %---------------------
  574. X = linspace(0,1,length(Y));
  575. if size(X)~=size(Y) , Y = Y'; end
  576. LowInter = X(1);
  577. UppInter = X(end);
  578. Interval = sprintf('[%0.4g , %0.4g]',LowInter,UppInter);
  579. % Store variable values.
  580. %-----------------------
  581. tool_PARAMS = wtbxappdata('get',hObject,'tool_PARAMS');
  582. tool_PARAMS.LowInter = LowInter;
  583. tool_PARAMS.UppInter = UppInter;
  584. tool_PARAMS.X = X;
  585. tool_PARAMS.Y = Y;
  586. wtbxappdata('set',hObject,'tool_PARAMS',tool_PARAMS);
  587. % Update uicontrols on the command part.
  588. %---------------------------------------
  589. set(handles.Edi_Pattern,'String',name);
  590. set(handles.Edi_Interval,'String',Interval);
  591. set(handles.Edi_LowBound,'String',sprintf('%0.4g',LowInter));
  592. set(handles.Edi_UppBound,'String',sprintf('%0.4g',UppInter));
  593. set(handles.Pus_Approximate,'Enable','on');
  594. % Axe_Pattern axes display.
  595. %--------------------------
  596. lw = 1;
  597. axes(handles.Axe_Pattern);
  598. line(X,Y,'color','r','linewidth',lw);
  599. ext     = abs(max(Y) - min(Y)) / 100;
  600. Ylim    = [min(Y)-ext max(Y)+ext];
  601. Xlim    = [min(X) max(X)];
  602. set(handles.Axe_Pattern,'Xlim',Xlim,'Ylim',Ylim);
  603. % Set Title in the pattern axes.
  604. %-------------------------------
  605. IntegVAL = 0.5*sum((Y(1:end-1)+Y(2:end)).*diff(X));
  606. titleSTR{1} = ['Pattern F'];
  607. titleSTR{2} = ['(Integral = ' num2str(IntegVAL,4) ')'];
  608. setAxesTitle(handles.Axe_Pattern,titleSTR);
  609. % Set the axes visible.
  610. %----------------------
  611. set(handles.Axe_Pattern,'Visible','on');
  612. % Set unvisible the running signal block of uicontrols.
  613. %----------------------------------------------------
  614. set(tool_PARAMS.hRunSig,'Enable','Off');
  615. % Init DynVTool.
  616. %---------------
  617. axe_IND = [...
  618.         handles.Axe_Pattern , ...
  619.         handles.Axe_PatWav ...
  620.         ];
  621. axe_CMD = [...
  622.         handles.Axe_RunSig , ...
  623.         handles.Axe_Detect ...
  624.         ];
  625. axe_ACT = [];
  626. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','');
  627. % End waiting.
  628. %-------------
  629. wwaiting('off',hFig);
  630. %--------------------------------------------------------------------------
  631. % --- Executes on menu item press in File ---> Save Adapted Wavelet.
  632. function Men_SaveWave_Callback(hObject, eventdata, handles)
  633. % hObject    handle to Men_SaveWave (see GCBO)
  634. % eventdata  reserved - to be defined in a future version of MATLAB
  635. % handles    structure with handles and user data (see GUIDATA)
  636. % Get figure handle.
  637. %-------------------
  638. hFig = handles.output;
  639. % Begin waiting.
  640. %---------------
  641. wwaiting('msg',hFig,'Wait ... saving');
  642. % Get PSI values.
  643. %----------------
  644. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  645. Y = tool_PARAMS.PSI;
  646. LowInter = tool_PARAMS.LowInter;
  647. UppInter = tool_PARAMS.UppInter;
  648. X = linspace(LowInter,UppInter,length(Y));
  649. % Testing file.
  650. %--------------
  651. [filename,pathname,ok] = utguidiv('test_save',hFig, ...
  652.     '*.mat','Save Adapted Wavelet');
  653. if ~ok,
  654.     wwaiting('off',hFig);   % End waiting.
  655.     return; 
  656. end
  657. % Saving file.
  658. %-------------
  659. [name,ext] = strtok(filename,'.');
  660. if isempty(ext) | isequal(ext,'.')
  661.     ext = '.mat'; filename = [name ext];
  662. end
  663. try
  664.     save([pathname filename],'X','Y','-mat');
  665. catch          
  666.     errargt(mfilename,'Save FAILED !','msg');
  667. end
  668. % End waiting.
  669. %-------------
  670. wwaiting('off',hFig);
  671. %--------------------------------------------------------------------------
  672. function demo_FUN(hObject,eventdata,handles,numDEM)
  673. % Default Demo Parameters.
  674. %-------------------------
  675. LowInter = 0; UppInter =  1;
  676. TransVAL =  1; NoiseVAL =  0; TrianVAL = 0;
  677. switch numDEM
  678.     case 1 , 
  679.         filename = 'ptpssin1';
  680.         methode  = 'Polynomial'; PolDegree  = 3; Regularity = -1;
  681.     case 2 , 
  682.         filename = 'ptpssin1';
  683.         methode  = 'Polynomial'; PolDegree  = 3; Regularity =  0;
  684.     case 3 ,
  685.         filename = 'ptpssin1';
  686.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = -1;
  687.         TransVAL = 0;
  688.     case 4 ,
  689.         filename = 'ptpssin1';
  690.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  691.         TransVAL = 0;
  692.     case 5 , 
  693.         filename = 'ptpssin2';
  694.         methode  = 'Polynomial'; PolDegree  = 3; Regularity = 0;
  695.     case 6 , 
  696.         filename = 'ptpssin2';
  697.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  698.     case 7 , 
  699.         filename = 'ptsine';
  700.         methode  = 'Polynomial'; PolDegree  = 3; Regularity = 0;
  701.         NoiseVAL =  1; TrianVAL = 1;        
  702.     case 8 , 
  703.         filename = 'ptsine';
  704.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  705.         NoiseVAL =  1; TrianVAL = 1;
  706.     case 9 , 
  707.         filename = 'ptsumsin';
  708.         methode  = 'Polynomial'; PolDegree  = 3; Regularity = 0;
  709.     case 10 , 
  710.         filename = 'ptsumsin';
  711.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  712.     case 11 , 
  713.         filename = 'ptsinpol';
  714.         methode  = 'Polynomial'; PolDegree  = 6; Regularity = 0;
  715.         NoiseVAL = 1;
  716.     case 12 , 
  717.         filename = 'ptsinpol';
  718.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  719.         NoiseVAL = 1;
  720.     case 13 , 
  721.         filename = 'ptodtri';
  722.         methode  = 'Polynomial'; PolDegree  = 5; Regularity = 0;
  723.     case 14 , 
  724.         filename = 'ptodtri';
  725.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  726.     case 15 , 
  727.         filename = 'pat8_256';
  728.         methode  = 'Polynomial'; PolDegree  = 3; Regularity = 0;
  729.     case 16 , 
  730.         filename = 'pthaar';
  731.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  732.     case 17 , 
  733.         filename = 'pthaar';
  734.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = -1;
  735.     case 18 , 
  736.         filename = 'ptodlin';
  737.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  738.     case 19 , 
  739.         filename = 'ptodpoly';
  740.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  741.         TransVAL = 0;
  742.     case 20 , 
  743.         filename = 'ptbumps';
  744.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  745.     case 21 , 
  746.         filename = 'ptbumps';
  747.         methode  = 'OrthConst';   PolDegree  = 3; Regularity = 0;
  748.         TransVAL = 0;
  749. end
  750. % Get figure handle.
  751. %-------------------
  752. hFig = handles.output;
  753. % Testing and loading file.
  754. %--------------------------
  755. filename = [filename '.mat'];
  756. pathname = utguidiv('WTB_DemoPath',filename);
  757. hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
  758. m_load = hdl_Menus.m_load;
  759. Men_LoadPat_Callback(m_load,eventdata,handles,pathname,filename);
  760. % Setting Method, PolDegree, Regularity.
  761. %---------------------------------------
  762. popHDL = handles.Pop_ApproxMeth;
  763. switch methode
  764.     case 'Polynomial' , popVAL = 1;
  765.     case 'OrthConst'  , popVAL = 2;
  766. end
  767. set(popHDL,'Value',popVAL);
  768. Pop_ApproxMeth_Callback(popHDL, eventdata, handles);
  769. popHDL = handles.Pop_PolDegree;
  770. set(popHDL,'Value',PolDegree);
  771. popHDL = handles.Pop_BoundCond;
  772. popVAL = Regularity + 2;
  773. set(popHDL,'Value',popVAL);
  774. set(handles.Edi_LowBound,'String',sprintf('%0.4g',LowInter));
  775. set(handles.Edi_UppBound,'String',sprintf('%0.4g',UppInter));
  776. % Setting Run Parameters.
  777. %------------------------
  778. set(handles.Rad_Trans,'Value',TransVAL);
  779. set(handles.Rad_Super,'Value',1-TransVAL);
  780. set(handles.Chk_Noise,'Value',NoiseVAL);
  781. set(handles.Chk_Triangle,'Value',TrianVAL);
  782. % Approximation and Run.
  783. %-----------------------
  784. Pus_Approximate_Callback(handles.Pus_Approximate, eventdata, handles)
  785. Pus_Run_Callback(handles.Pus_Run, eventdata, handles)
  786. %--------------------------------------------------------------------------
  787. function close_FUN(hObject,eventdata,handles)
  788. Pus_CloseWin = handles.Pus_CloseWin;
  789. Pus_CloseWin_Callback(Pus_CloseWin,eventdata,handles);
  790. %--------------------------------------------------------------------------
  791. %=========================================================================%
  792. %                END Callback Menus                                       %
  793. %=========================================================================%
  794. %=========================================================================%
  795. %                BEGIN Tool Initialization                                %
  796. %                -------------------------                                %
  797. %=========================================================================%
  798. function Init_Tool(hObject, eventdata, handles)
  799. % WTBX -- Install DynVTool.
  800. %--------------------------
  801. dynvtool('Install_V3',hObject,handles);
  802. % WTBX -- Install MENUS.
  803. %-----------------------
  804. wfigmngr('extfig',hObject,'ExtFig_GUIDE');
  805. wfigmngr('attach_close',hObject);
  806. set(hObject,'HandleVisibility','On');
  807. hdl_Menus = Install_MENUS(hObject);
  808. wtbxappdata('set',hObject,'hdl_Menus',hdl_Menus);
  809. % Set Title in the pattern axes.
  810. %-------------------------------
  811. titleSTR = 'Original Pattern';
  812. setAxesTitle(handles.Axe_Pattern,titleSTR);
  813. % Set Title in the pattern and adapted wavelet axes.
  814. %---------------------------------------------------
  815. titleSTR = 'Pattern and Adapted Wavelet';
  816. setAxesTitle(handles.Axe_PatWav,titleSTR);
  817. % Set Title in the running signal axes.
  818. %--------------------------------------
  819. titleSTR = 'F((x-20) / 8 + (x-48) / 4) + T + N';
  820. setAxesTitle(handles.Axe_RunSig,titleSTR);
  821. % Set Title in the pattern detection axes.
  822. %-----------------------------------------
  823. titleSTR = 'Pattern Detection using Adapted Wavelet';
  824. setAxesTitle(handles.Axe_Detect,titleSTR);
  825. % Initialize colorbar.
  826. %---------------------
  827. cmap = get(hObject,'Colormap');
  828. axes(handles.Axe_ColBar);
  829. image([1:size(cmap,1)])
  830. set(handles.Axe_ColBar,...
  831.     'Xtick',[],'Xticklabel',[],'Ytick',[],'Yticklabel',[] ...    
  832.     );
  833. dynvzaxe('exclude',hObject,handles.Axe_ColBar)
  834. ColorBarVisibility(handles.Axe_ColBar,'Off');
  835. % Save Tool Parameters.
  836. %----------------------
  837. hRunSig  =   [                                                  ...
  838.                 handles.Fra_RunSignal, handles.Txt_RunSignal,   ...
  839.                 handles.Txt_TwoPatterns, handles.Txt_With,      ...
  840.                 handles.Rad_Trans, handles.Rad_Super,           ...
  841.                 handles.Chk_Noise, handles.Chk_Triangle,        ...
  842.                 handles.Pus_Run, handles.Pus_Compare            ...
  843.             ];
  844. tool_PARAMS.hRunSig = hRunSig;
  845. wtbxappdata('set',hObject,'tool_PARAMS',tool_PARAMS);
  846. % End Of initialization.
  847. %-----------------------
  848. redimfig('On',hObject);
  849. set(hObject,'HandleVisibility','Callback');
  850. %=========================================================================%
  851. %                END Tool Initialization                                  %
  852. %=========================================================================%
  853. %=========================================================================%
  854. %                BEGIN CleanTOOL function                                 %
  855. %                ------------------------                                 %
  856. %=========================================================================%
  857. function cleanTOOL(handles)
  858. hLINES  = findobj(handles,'type','line');
  859. hPATCH  = findobj(handles,'type','patch');
  860. hIMAGES  = findobj(handles,'type','image');
  861. delete(hLINES,hPATCH,hIMAGES);
  862. set(handles,'Visible','off');
  863. %--------------------------------------------------------------------------
  864. function ColorBarVisibility(Axe_ColBar,status)
  865. hIMAGES = wfindobj(Axe_ColBar,'type','image');
  866. set(Axe_ColBar,'Visible',status);
  867. set(hIMAGES,'Visible',status);
  868. %-------------------------------------------------------------------------
  869. %=========================================================================%
  870. %                END CleanTOOL function                                   %
  871. %=========================================================================%
  872. %=========================================================================%
  873. %                BEGIN Internal Functions                                 %
  874. %                ------------------------                                 %
  875. %=========================================================================%
  876. function ApproxMeth = getApproxMeth(Pop_ApproxMeth)
  877. ApproxMethVal = get(Pop_ApproxMeth,'Value');
  878. switch ApproxMethVal
  879.     case 1 , ApproxMeth = 'Polynomial';
  880.     case 2 , ApproxMeth = 'OrthConst';
  881. end
  882. %-------------------------------------------------------------------------
  883. function Regularity = getRegularity(Pop_BoundCond)
  884. Regularity = get(Pop_BoundCond,'Value')-2;
  885. %-------------------------------------------------------------------------
  886. function hdl_Menus = Install_MENUS(hFig)
  887. % Add UIMENUS.
  888. %-------------
  889. m_files     = wfigmngr('getmenus',hFig,'file');
  890. m_close = wfigmngr('getmenus',hFig,'close');
  891. cb_close = [mfilename '(''close_FUN'',gcbo,[],guidata(gcbo));'];
  892. set(m_close,'Callback',cb_close);
  893. str_numwin  = sprintf('%20.15f',hFig);
  894. m_load  = uimenu(m_files,                   ...
  895.     'Label','&Load Pattern',                 ...
  896.     'Position',1,                           ...
  897.     'Enable','On',                          ...
  898.     'Callback',                             ...
  899.     [mfilename '(''Men_LoadPat_Callback'',gcbo,[],guidata(gcbo));']  ...
  900.     );
  901. m_save  = uimenu(m_files,                   ...
  902.     'Label','&Save Adapted Wavelet',        ...
  903.     'Position',2,                           ...
  904.     'Enable','Off',                          ...
  905.     'Callback',                             ...
  906.     [mfilename '(''Men_SaveWave_Callback'',gcbo,[],guidata(gcbo));']  ...
  907.     );
  908. m_demo  = uimenu(m_files,'Label','&Example ','Position',3,'Separator','On');
  909. tab = setstr(9);
  910. demoSET = {...
  911.         ['Pattern 1' tab '- Not-Continuous Polynomial Approximation of d