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

波变换

开发平台:

Matlab

  1. function varargout = wfbmstat(varargin)
  2. %WFBMSTAT Fractional Brownian motion statistics tool.
  3. %   VARARGOUT = WFBMSTAT(VARARGIN)
  4. % WFBMSTAT M-file for wfbmstat.fig
  5. %      WFBMSTAT, by itself, creates a new WFBMSTAT or raises the existing
  6. %      singleton*.
  7. %
  8. %      H = WFBMSTAT returns the handle to a new WFBMSTAT or the handle to
  9. %      the existing singleton*.
  10. %
  11. %      WFBMSTAT('Property','Value',...) creates a new WFBMSTAT using the
  12. %      given property value pairs. Unrecognized properties are passed via
  13. %      varargin to wfbmstat_OpeningFcn.  This calling syntax produces a
  14. %      warning when there is an existing singleton*.
  15. %
  16. %      WFBMSTAT('CALLBACK') and WFBMSTAT('CALLBACK',hObject,...) call the
  17. %      local function named CALLBACK in WFBMSTAT.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 10-Sep-2003 15:54:48
  25. %
  26. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 03-Mar-2003.
  27. %   Last Revision: 10-Sep-2003.
  28. %   Copyright 1995-2004 The MathWorks, Inc.
  29. %   $Revision: 1.1.6.2 $  $Date: 2004/03/15 22:42:45 $ 
  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', @wfbmstat_OpeningFcn, ...
  38.     'gui_OutputFcn',  @wfbmstat_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 wfbmstat is made visible.                      %
  56. %*************************************************************************%
  57. function wfbmstat_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 wfbmstat
  65. handles.output = hObject;
  66. % Update handles structure
  67. guidata(hObject, handles);
  68. % UIWAIT makes wfbmstat wait for user response (see UIRESUME)
  69. % uiwait(handles.wfbmStat_Win);
  70. %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
  71. % TOOL INITIALISATION Intoduced 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. % --- Outputs from this function are returned to the command line.
  83. function varargout = wfbmstat_OutputFcn(hObject, eventdata, handles)
  84. % varargout  cell array for returning output args (see VARARGOUT);
  85. % hObject    handle to figure
  86. % eventdata  reserved - to be defined in a future version of MATLAB
  87. % handles    structure with handles and user data (see GUIDATA)
  88. % Get default command line output from handles structure
  89. varargout{1} = handles.output;
  90. %*************************************************************************%
  91. %                END Output Function                                      %
  92. %*************************************************************************%
  93. %=========================================================================%
  94. %                BEGIN Create Functions                                   %
  95. %                ----------------------                                   %
  96. % --- Executes during object creation, after setting all properties.      %
  97. %=========================================================================%
  98. function EdiPop_CreateFcn(hObject,eventdata,handles)
  99. % hObject    handle to Edi_Object or Pop_Object (see GCBO)
  100. % eventdata  reserved - to be defined in a future version of MATLAB
  101. % handles    empty - handles not created until after all CreateFcns called
  102. % Hint: edit controls usually have a white background on Windows.
  103. % Hint: popupmenu controls usually have a white background on Windows.
  104. % See ISPC and COMPUTER.
  105. if ispc
  106.     % set(hObject,'BackgroundColor','white');
  107.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  108. else
  109.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  110. end
  111. %--------------------------------------------------------------------------
  112. %=========================================================================%
  113. %                END Create Functions                                     %
  114. %=========================================================================%
  115. %=========================================================================%
  116. %                BEGIN Callback Functions                                 %
  117. %                ------------------------                                 %
  118. %=========================================================================%
  119. % --- Executes on button press in Edi_NbBins.
  120. function Edi_NbBins_Callback(hObject, eventdata, handles)
  121. % hObject    handle to Edi_NbBins (see GCBO)
  122. % eventdata  reserved - to be defined in a future version of MATLAB
  123. % handles    structure with handles and user data (see GUIDATA)
  124. FieldDefault ='50';
  125. NbBins = str2double(get(hObject,'String'));
  126. if ~isequal(NbBins,fix(NbBins)) || NbBins <= 0 || isnan(NbBins)
  127.     set(hObject,'String',FieldDefault);
  128. end
  129. %--------------------------------------------------------------------------
  130. % --- Executes on button press in Chk_Hist.
  131. function Chk_Hist_Callback(hObject, eventdata, handles)
  132. % hObject    handle to Chk_Hist (see GCBO)
  133. % eventdata  reserved - to be defined in a future version of MATLAB
  134. % handles    structure with handles and user data (see GUIDATA)
  135. %--------------------------------------------------------------------------
  136. % --- Executes on button press in Chk_Auto.
  137. function Chk_Auto_Callback(hObject, eventdata, handles)
  138. % hObject    handle to Chk_Auto (see GCBO)
  139. % eventdata  reserved - to be defined in a future version of MATLAB
  140. % handles    structure with handles and user data (see GUIDATA)
  141. %--------------------------------------------------------------------------
  142. % --- Executes on button press in Chk_Stats.
  143. function Chk_Stats_Callback(hObject, eventdata, handles)
  144. % hObject    handle to Chk_Stats (see GCBO)
  145. % eventdata  reserved - to be defined in a future version of MATLAB
  146. % handles    structure with handles and user data (see GUIDATA)
  147. %--------------------------------------------------------------------------
  148. % --- Executes on button press in Pus_Statistics.
  149. function Pus_Statistics_Callback(hObject, eventdata, handles)
  150. % hObject    handle to Pus_Statistics (see GCBO)
  151. % eventdata  reserved - to be defined in a future version of MATLAB
  152. % handles    structure with handles and user data (see GUIDATA)
  153. % Get figure handle.
  154. %-------------------
  155. hFig = handles.output;
  156. % Cleaning.
  157. %----------
  158. wwaiting('msg',hFig,'Wait ... cleaning');
  159. cleanTOOL(handles);
  160. % Computing.
  161. %-----------
  162. wwaiting('msg',hFig,'Wait ... computing');
  163. % Parameters initialization.
  164. %---------------------------
  165. default_bins = 50;
  166. curr_color   = wtbutils('colors','res');
  167. % Get FBM_PARAMS parameters.
  168. %---------------------------
  169. FBM_PARAMS = get(hFig,'Userdata');
  170. % Get uicontrol values.
  171. %----------------------
  172. DiffOrder_Str   = get(handles.Pop_DiffOrder,'String');  % Diff. order (string)
  173. DiffOrder_Ind   = get(handles.Pop_DiffOrder,'Value');   % Diff. order (Index)
  174. DiffOrder_Str   = DiffOrder_Str{DiffOrder_Ind,:};       % Diff. order (string)
  175. DiffOrder_Num   = str2double(DiffOrder_Str);            % Diff. order (numeric)
  176. NumBins_Str     = get(handles.Edi_NbBins,'String');     % Bins (string)
  177. NumBins_Num     = str2double(NumBins_Str);              % Bins (numeric)
  178. % Compute values to display.
  179. %---------------------------
  180. if DiffOrder_Num==0
  181.     FBMxDif = FBM_PARAMS.FBM;
  182. else
  183.     FBMxDif = diff(FBM_PARAMS.FBM,DiffOrder_Num);
  184. end
  185. his             = wgethist(FBMxDif(:),NumBins_Num);
  186. [xx,imod]       = max(his(2,:));
  187. mode_val        = (his(1,imod)+his(1,imod+1))/2;
  188. % Get check status.
  189. %------------------
  190. Chk_Hist    = get(handles.Chk_Hist,'value');
  191. Chk_Auto    = get(handles.Chk_Auto,'value');
  192. Chk_Stats   = get(handles.Chk_Stats,'value');
  193. % Displaying axes depending on check status.
  194. %-------------------------------------------
  195. if Chk_Hist & Chk_Auto & Chk_Stats
  196.     axe_xdif    = handles.Axe_xDif;
  197. axe_hist    = handles.Axe_Hist;
  198. axe_cumhist = handles.Axe_CumHist;
  199. axe_corr    = handles.Axe_AutoCorr;
  200. axe_spec    = handles.Axe_FFT;
  201.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  202.     DispHistCumhist(FBMxDif,axe_hist,axe_cumhist,his,curr_color);
  203.     DispCorrSpec(FBMxDif,axe_corr,axe_spec,curr_color);
  204.     DispStats(FBMxDif,handles,mode_val);
  205. elseif ~Chk_Hist & ~Chk_Auto & ~Chk_Stats
  206.     axe_xdif    = handles.Axe_xDif0;
  207.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  208. elseif Chk_Hist & ~Chk_Auto & Chk_Stats
  209.     axe_xdif    = handles.Axe_xDif1;
  210. axe_hist    = handles.Axe_Hist1;
  211. axe_cumhist = handles.Axe_CumHist1;
  212.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  213.     DispHistCumhist(FBMxDif,axe_hist,axe_cumhist,his,curr_color);
  214.     DispStats(FBMxDif,handles,mode_val);
  215. elseif ~Chk_Hist & Chk_Auto & Chk_Stats
  216.     axe_xdif    = handles.Axe_xDif1;
  217. axe_corr    = handles.Axe_AutoCorr1;
  218. axe_spec    = handles.Axe_FFT1;
  219.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  220.     DispCorrSpec(FBMxDif,axe_corr,axe_spec,curr_color);
  221.     DispStats(FBMxDif,handles,mode_val);
  222. elseif Chk_Hist & ~Chk_Auto & ~Chk_Stats
  223.     axe_xdif    = handles.Axe_xDif2;
  224. axe_hist    = handles.Axe_Hist2;
  225. axe_cumhist = handles.Axe_CumHist2;
  226.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  227.     DispHistCumhist(FBMxDif,axe_hist,axe_cumhist,his,curr_color);
  228. elseif ~Chk_Hist & Chk_Auto & ~Chk_Stats
  229.     axe_xdif    = handles.Axe_xDif2;
  230. axe_corr    = handles.Axe_AutoCorr2;
  231. axe_spec    = handles.Axe_FFT2;
  232.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  233.     DispCorrSpec(FBMxDif,axe_corr,axe_spec,curr_color);
  234. elseif ~Chk_Hist & ~Chk_Auto & Chk_Stats
  235.     axe_xdif    = handles.Axe_xDif3;
  236.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  237.     DispStats(FBMxDif,handles,mode_val);
  238. elseif Chk_Hist & Chk_Auto & ~Chk_Stats
  239.     axe_xdif    = handles.Axe_xDif4;
  240. axe_hist    = handles.Axe_Hist4;
  241. axe_cumhist = handles.Axe_CumHist4;
  242. axe_corr    = handles.Axe_AutoCorr4;
  243. axe_spec    = handles.Axe_FFT4;
  244.     DispxDif(FBMxDif,axe_xdif,DiffOrder_Str,curr_color,FBM_PARAMS);
  245.     DispHistCumhist(FBMxDif,axe_hist,axe_cumhist,his,curr_color);
  246.     DispCorrSpec(FBMxDif,axe_corr,axe_spec,curr_color);
  247. end
  248. % Init DynVTool.
  249. %---------------
  250. axe_IND = [...
  251.             handles.Axe_xDif,       ...
  252.             handles.Axe_xDif0,      ...
  253.             handles.Axe_xDif1,      ...
  254.             handles.Axe_xDif2,      ...
  255.             handles.Axe_xDif3,      ...
  256.             handles.Axe_xDif4,      ...
  257.             handles.Axe_AutoCorr,   ...
  258.             handles.Axe_AutoCorr1,  ...
  259.             handles.Axe_AutoCorr2,  ...
  260.             handles.Axe_AutoCorr4,  ...
  261.             handles.Axe_FFT,        ...
  262.             handles.Axe_FFT1,       ...
  263.             handles.Axe_FFT2,       ...
  264.             handles.Axe_FFT4        ...
  265.             ];
  266. axe_CMD = axe_IND;
  267. axe_ACT = [];
  268. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','');
  269. % End waiting.
  270. %-------------
  271. wwaiting('off',hFig);
  272. %--------------------------------------------------------------------------
  273. % --- Executes on button press in Pus_CloseWin.
  274. function Pus_CloseWin_Callback(hObject, eventdata, handles)
  275. % hObject    handle to Pus_CloseWin (see GCBO)
  276. % eventdata  reserved - to be defined in a future version of MATLAB
  277. % handles    structure with handles and user data (see GUIDATA)
  278. close(gcbf)
  279. %--------------------------------------------------------------------------
  280. %=========================================================================%
  281. %                END Callback Functions                                   %
  282. %=========================================================================%
  283. %=========================================================================%
  284. %                BEGIN Special Callback Functions                         %
  285. %                --------------------------------                         %
  286. %=========================================================================%
  287. % --- Executes on button press in Statistics from wfbmtool figure.
  288. function WfbmtoolCall_Callback(hObject, eventdata, handles,FBM_PARAMS)
  289. % hObject    handle to Pus_Statistics (see GCBO)
  290. % eventdata  reserved - to be defined in a future version of MATLAB
  291. % handles    structure with handles and user data (see GUIDATA)
  292. % Save wfbmtool handles in 'Userdata' field of wfbmstat figure.
  293. %--------------------------------------------------------------
  294. if isfield(FBM_PARAMS,'demoMODE')
  295.     F1 = allchild(0);
  296. end
  297. wfbmstat('userdata',FBM_PARAMS);
  298. if isfield(FBM_PARAMS,'demoMODE')
  299.     F2 = allchild(0);
  300.     hFig = setdiff(F2,F1);
  301.     set(hFig,'HandleVisibility','On')
  302. end
  303. %=========================================================================%
  304. %                END Special Callback Functions                           %
  305. %=========================================================================%
  306. %=========================================================================%
  307. %                BEGIN Tool Initialization                                %
  308. %                -------------------------                                %
  309. %=========================================================================%
  310. function Init_Tool(hObject, eventdata, handles)
  311. % WTBX -- Install DynVTool.
  312. %--------------------------
  313. dynvtool('Install_V3',hObject,handles);
  314. % WTBX -- Install MENUS.
  315. %-----------------------
  316. wfigmngr('extfig',hObject,'ExtFig_GUIDE');
  317. wfigmngr('attach_close',hObject);
  318. set(hObject,'HandleVisibility','On');
  319. hdl_Menus = Install_MENUS(hObject);
  320. wtbxappdata('set',hObject,'hdl_Menus',hdl_Menus);
  321. % Set Title in the 1Dif axes (first time).
  322. %-----------------------------------------
  323. title = 'Fractional Brownian Motion Increments of order 1';
  324. setAxesTitle(handles.Axe_xDif,title);
  325. % Resize Figure.
  326. %---------------------
  327. redimfig('On',hObject);
  328. % Save Tool Parameters.
  329. %----------------------
  330. hSTATS  =   [                                                           ...
  331.     handles.Txt_Mean,handles.Txt_Max,handles.Txt_Min,handles.Txt_Range, ...
  332.     handles.Txt_StdDev,handles.Txt_Median,handles.Txt_MedAbsDev,        ...
  333.     handles.Txt_MeanAbsDev,handles.Txt_Mode,                            ...
  334.     handles.Edi_Mean,handles.Edi_Max,handles.Edi_Min,handles.Edi_Range, ...
  335.     handles.Edi_StdDev,handles.Edi_Median,handles.Edi_MedAbsDev,        ...
  336.     handles.Edi_MeanAbsDev,handles.Edi_Mode,                            ...
  337.     handles.Fra_Stats                                                   ...
  338.             ];
  339. tool_PARAMS = struct('hSTATS',hSTATS);
  340. wtbxappdata('set',hObject,'tool_PARAMS',tool_PARAMS);
  341. % First statistics display.
  342. %--------------------------
  343. wfbmstat('Pus_Statistics_Callback',hObject, eventdata, handles);
  344. % End Of initialization.
  345. %-----------------------
  346. set(hObject,'HandleVisibility','Callback');
  347. %=========================================================================%
  348. %                END Tool Initialization                                  %
  349. %=========================================================================%
  350. %=========================================================================%
  351. %                BEGIN CleanTOOL function                                 %
  352. %                ------------------------                                 %
  353. %=========================================================================%
  354. function cleanTOOL(handles)
  355. % Get figure handle.
  356. %-------------------
  357. hFig = handles.output;
  358. % Clean figure.
  359. %--------------
  360. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  361. hAXES   = findobj(hFig,'type','axes');
  362. hLINES  = findobj(hAXES,'type','line');
  363. hPATCH  = findobj(hAXES,'type','patch');
  364. set(hAXES,'Visible','off');
  365. set(tool_PARAMS.hSTATS,'Visible','off');
  366. delete(hLINES,hPATCH);
  367. %--------------------------------------------------------------------------
  368. %=========================================================================%
  369. %                END CleanTOOL function                                   %
  370. %=========================================================================%
  371. %=========================================================================%
  372. %                BEGIN Internal Functions                                 %
  373. %                ------------------------                                 %
  374. %=========================================================================%
  375. function hdl_Menus = Install_MENUS(hFig)
  376. % Add UIMENUS.
  377. %-------------
  378. m_files     = wfigmngr('getmenus',hFig,'file');
  379. str_numwin  = sprintf('%20.15f',hFig);
  380. % Add Help for Tool.
  381. %------------------
  382. % wfighelp('addHelpTool',hFig,'&Continuous Analysis','CW1D_GUI');
  383. % Add Help Item.
  384. %----------------
  385. % wfighelp('addHelpItem',hFig,'Continuous Transform','CW_TRANSFORM');
  386. % Menu handles.
  387. %----------------
  388. hdl_Menus = struct('m_files',m_files);
  389. %-------------------------------------------------------------------------
  390. function DispxDif(FBMxDif,axe_xdif,DiffOrder,curr_color,FBM_PARAMS)
  391. % x order increments axes display.
  392. %---------------------------------
  393. axes(axe_xdif);
  394. line(0:length(FBMxDif)-1,FBMxDif,'Color',curr_color);
  395. Xlim    = [0 length(FBMxDif)];
  396. ext = abs(max(FBMxDif) - min(FBMxDif)) / 100;
  397. Ylim = [min(FBMxDif)-ext max(FBMxDif)+ext];
  398. set(axe_xdif,'Xlim',Xlim,'Ylim',Ylim);
  399. % Get parameter settings.
  400. %------------------------
  401. Wav = FBM_PARAMS.Wav;                   % Wavelet used                           
  402. Val_Length_Num = FBM_PARAMS.Length;     % Signal length (numeric)                           
  403. Val_Index = FBM_PARAMS.H;               % Fractal index (numeric)                                        
  404. if isequal(deblankl(DiffOrder),'0')
  405.     label = [ ...
  406.         'Synthesized Fractional Brownian Motion of length ',    ...
  407.         num2str(Val_Length_Num),' using ',Wav,                  ...
  408.         ' and H = ',num2str(Val_Index)                          ...
  409.             ];
  410. else
  411.     label = ['Fractional Brownian Motion Increments of Order ', ...
  412.               deblankl(DiffOrder)];
  413. end
  414. setAxesTitle(axe_xdif,label)
  415. set(axe_xdif,'Visible','on');
  416. %--------------------------------------------------------------------------
  417. function DispHistCumhist(FBMxDif,axe_hist,axe_cumhist,his,curr_color)
  418. % Displaying histogram.
  419. %----------------------
  420. his(2,:)  = his(2,:)/length(FBMxDif(:));
  421. axes(axe_hist);
  422. wplothis(axe_hist,his,curr_color);
  423. label = 'Histogram';
  424. setAxesTitle(axe_hist,label)
  425. set(axe_hist,'Visible','on');
  426. % Displaying cumulated histogram.
  427. %--------------------------------
  428. for i=6:4:length(his(2,:));
  429.     his(2,i)   = his(2,i)+his(2,i-4);
  430.     his(2,i+1) = his(2,i);
  431. end
  432. axes(axe_cumhist);
  433. wplothis(axe_cumhist,[his(1,:);his(2,:)],curr_color);
  434. label = 'Cumulative Histogram';
  435. setAxesTitle(axe_cumhist,label)
  436. set(axe_cumhist,'Visible','on');
  437. %--------------------------------------------------------------------------
  438. function DispCorrSpec(FBMxDif,axe_corr,axe_spec,curr_color)
  439. % Displaying Autocorrelations.
  440. %-----------------------------       
  441. [corr,lags] = wautocor(FBMxDif);
  442. lenLagsPos  = (length(lags)-1)/2;
  443. lenKeep     = min(200,lenLagsPos);
  444. first       = lenLagsPos+1-lenKeep;
  445. last        = lenLagsPos+1+lenKeep;
  446. Xval        = lags(first:last);
  447. Yval        = corr(first:last);
  448. axes(axe_corr);
  449. hdl_RES = line('Xdata',Xval,'Ydata',Yval,'Color',curr_color);
  450. set(axe_corr,'Xlim',[Xval(1) Xval(end)],...
  451.              'Ylim',[min(0,1.1*min(Yval)) 1]);
  452. label = 'Autocorrelations';
  453. setAxesTitle(axe_corr,label)
  454. set(axe_corr,'Visible','on');
  455. % Displaying Spectrum.
  456. %---------------------
  457. [sp,f]  = wspecfft(FBMxDif);
  458. axes(axe_spec);
  459. hdl_RES = line('Xdata',f,'Ydata',sp,'Color',curr_color);
  460. Xlim    = [min(f) max(f)];
  461. ext     = abs(max(sp) - min(sp)) / 100;
  462. Ylim    = [min(sp)-ext max(sp)+ext];
  463. set(axe_spec,'Xlim',Xlim,'Ylim',Ylim);
  464. label = 'FFT - Energy Spectrum';
  465. setAxesTitle(axe_spec,label)
  466. set(axe_spec,'Visible','on');
  467. %--------------------------------------------------------------------------
  468. function DispStats(FBMxDif,handles,mode_val)
  469. % Computing values for statistics.
  470. %---------------------------------
  471. errtol     = 1.0E-12;
  472. mean_val   = mean(FBMxDif);
  473. max_val    = max(FBMxDif);
  474. min_val    = min(FBMxDif);
  475. range_val  = max_val-min_val;
  476. std_val    = std(FBMxDif);
  477. med_val    = median(FBMxDif);
  478. medDev_val = median(abs(FBMxDif(:)-med_val)); 
  479. if abs(medDev_val)<errtol , medDev_val = 0; end
  480. meanDev_val = mean(abs(FBMxDif(:)-mean_val));      
  481. if abs(meanDev_val)<errtol , meanDev_val = 0; end
  482. % Get figure handle.
  483. %-------------------
  484. hFig = handles.output;
  485. % Displaying Statistics.
  486. %-----------------------
  487. set(handles.Edi_Mean,'string',sprintf('%1.4g',mean_val));
  488. set(handles.Edi_Max,'string',sprintf('%1.4g',max_val));
  489. set(handles.Edi_Min,'string',sprintf('%1.4g',min_val));
  490. set(handles.Edi_Range,'string',sprintf('%1.4g',range_val));
  491. set(handles.Edi_StdDev,'string',sprintf('%1.4g',std_val));
  492. set(handles.Edi_Median,'string',sprintf('%1.4g',med_val));
  493. set(handles.Edi_MedAbsDev,'string',sprintf('%1.4g',medDev_val));
  494. set(handles.Edi_MeanAbsDev,'string',sprintf('%1.4g',meanDev_val));
  495. set(handles.Edi_Mode,'string',sprintf('%1.4g',mode_val));
  496. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  497. set(tool_PARAMS.hSTATS,'Visible','on');
  498. %--------------------------------------------------------------------------
  499. function [sp,f] = wspecfft(signal)
  500. %WSPECFFT FFT spectrum of a signal.
  501. %
  502. % f is the frequency 
  503. % sp is the energy, the square of the FFT transform
  504. % The input signal is empty.
  505. %---------------------------
  506. if isempty(signal)
  507.     sp = [];f =[];return
  508. end
  509. % Compute the spectrum.
  510. %----------------------
  511. n   = length(signal);
  512. XTF = fft(fftshift(signal));
  513. m   = ceil(n/2) + 1;
  514. % Compute the output values.
  515. %---------------------------
  516. f   = linspace(0,0.5,m);
  517. sp  = (abs(XTF(1:m))).^2;
  518. %--------------------------------------------------------------------------
  519. function [c,lags] = wautocor(a,maxlag)
  520. %WAUTOCOR Auto-correlation function estimates.
  521. %   [C,LAGS] = WAUTOCOR(A,MAXLAG) computes the 
  522. %   autocorrelation function c of a one dimensional
  523. %   signal a, for lags = [-maxlag:maxlag]. 
  524. %   The autocorrelation c(maxlag+1) = 1.
  525. %   If nargin==1, by default, maxlag = length(a)-1.
  526. if nargin == 1, maxlag = size(a,2)-1;end
  527. lags = -maxlag:maxlag;
  528. if isempty(a) , c = []; return; end
  529. epsi = sqrt(eps);
  530. a    = a(:);
  531. a    = a - mean(a);
  532. nr   = length(a); 
  533. if std(a)>epsi
  534.     % Test of the variance.
  535.     %----------------------
  536.     mr     = 2 * maxlag + 1;
  537.     nfft   = 2^nextpow2(mr);
  538.     nsects = ceil(2*nr/nfft);
  539.     if nsects>4 & nfft<64
  540.         nfft = min(4096,max(64,2^nextpow2(nr/4)));
  541.     end
  542.     c      = zeros(nfft,1);
  543.     minus1 = (-1).^(0:nfft-1)';
  544.     af_old = zeros(nfft,1);
  545.     n1     = 1;
  546.     nfft2  = nfft/2;
  547.     while (n1<nr)
  548.        n2 = min( n1+nfft2-1, nr );
  549.        af = fft(a(n1:n2,:), nfft);
  550.        c  = c + af.* conj( af + af_old);
  551.        n1 = n1 + nfft2;
  552.        af_old = minus1.*af;
  553.     end
  554.     if n1==nr
  555.         af = ones(nfft,1)*a(nr,:);
  556.     c  = c + af.* conj( af + af_old );
  557.     end
  558.     mxlp1 = maxlag+1;
  559.     c = real(ifft(c));
  560.     c = [ c(mxlp1:-1:2,:); c(1:mxlp1,1) ];
  561.     % Compute the autocorrelation function.
  562.     %-------------------------------------- 
  563.     cdiv = c(mxlp1,1);
  564.     c = c / cdiv;
  565. else
  566.     % If  the variance is too small.
  567.     %-------------------------------
  568.     c = ones(size(lags));
  569. end
  570. %--------------------------------------------------------------------------
  571. %=========================================================================%
  572. %                END Internal Functions                                   %
  573. %=========================================================================%
  574. %=========================================================================%
  575. %                BEGIN General Utilities                                  %
  576. %                -----------------------                                  %
  577. %=========================================================================%
  578. function setAxesTitle(axe,label)
  579. axes(axe); 
  580. t = title(label,'Color','k','FontWeight','demi','Units',...
  581.     'normalized','Fontsize',9);
  582. set(t,'Position',[0.5,1.02]);
  583. %--------------------------------------------------------------------------
  584. function setAxesXlabel(axe,label)
  585. axes(axe); 
  586. xlabel(label,'Color','k','FontWeight','demi','normalized','Fontsize',9);
  587. %--------------------------------------------------------------------------
  588. function setAxesYlabel(axe,label)
  589. axes(axe); 
  590. ylabel(label,'Color','k','FontWeight','demi','normalized','Fontsize',9);
  591. %--------------------------------------------------------------------------
  592. %=========================================================================%
  593. %                END Tool General Utilities                               %
  594. %=========================================================================%