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

波变换

开发平台:

Matlab

  1. function varargout = dcmdcw1d(varargin)
  2. %DCMDCW1D Demonstrates continuous 1-D wavelet tools in the Wavelet Toolbox.
  3. %
  4. % This is a slideshow file for use with wshowdrv.m
  5. % To see it run, type 'wshowdrv dcmdcw1d', 
  6. %
  7. % See also DETCOEF, CWT, WAVEDEC, WCODEMAT. 
  8. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  9. %   Last Revision: 07-May-2003.
  10. %   Copyright 1995-2004 The MathWorks, Inc.
  11. % $Revision: 1.14.4.2 $
  12. % Initialization and Local functions if necessary.
  13. if nargin>0
  14. action = varargin{1};
  15. switch action
  16.       case 'addHelp'
  17. % Add Help Item.
  18. %---------------
  19.         hdlFig = varargin{2};
  20. wfighelp('addHelpItem',hdlFig,'Continuous Transform','CW_TRANSFORM');
  21. wfighelp('addHelpItem',hdlFig,'Continuous Versus Discrete (1)','CW_CONTDISC1');
  22. wfighelp('addHelpItem',hdlFig,'Continuous Versus Discrete (2)','CW_CONTDISC2');
  23.         
  24.   case 'auto'    , wshowdrv('#autoMode',mfilename,'close');
  25.   case 'gr_auto' , wshowdrv('#gr_autoMode',mfilename,'close');
  26.   case 'getFigParam'
  27. figName  = 'Continuous Wavelet Transform 1-D';
  28. showType = 'mix6';
  29. varargout = {figName,showType};
  30.   case 'localPROC_1'
  31. [x,sigCOL] = deal(varargin{2:end}); 
  32.     ax = subplot(3,1,1);
  33.     plot(x,sigCOL); title('Analyzed signal.');
  34.     set(ax,'Xlim',[0 length(x)])
  35.   
  36.   case 'localPROC_2'
  37. [x,lev,wname,nbcol] = deal(varargin{2:end});
  38. [c,l] = wavedec(x,lev,wname);
  39. len = length(x);
  40. cfd = zeros(lev,len);
  41. for k = 1:lev
  42. d = detcoef(c,l,k);
  43. d = d(:)';
  44. d = d(ones(1,2^k),:);
  45. cfd(k,:) = wkeep1(d(:)',len);
  46. end
  47. cfd =  cfd(:);
  48. I = find(abs(cfd)<sqrt(eps));
  49. cfd(I) = zeros(size(I));
  50. cfd    = reshape(cfd,lev,len);
  51. cfd = wcodemat(cfd,nbcol,'row');
  52. colormap(pink(nbcol));
  53. ax  = subplot(3,1,2); image(cfd);
  54. tics = 1:lev; labs = int2str([1:lev]');
  55. set(ax,...
  56. 'YTicklabelMode','manual','Ydir','normal', ...
  57. 'Box','On','Ytick',tics,'YTickLabel',labs ...
  58. );
  59. title('Discrete Transform, absolute coefficients.');
  60. ylabel('level');
  61.   case 'localPROC_3'
  62. [x,scales,wname,map] = deal(varargin{2:end});
  63.     ax = subplot(3,1,3); axes(ax);
  64.     coefs = cwt(x,scales,wname,'plot');
  65.     colormap(map);
  66.     tt = get(ax,'Yticklabel');
  67.     [r,c] = size(tt);
  68.     yl = setstr(32*ones(r,c));
  69.     for k = 1:3:r , yl(k,:) = tt(k,:); end
  70.     set(ax,'Yticklabel',yl);
  71. end
  72. return
  73. end
  74. if nargout<1,
  75.   wshowdrv(mfilename)
  76. else
  77.   idx = 0;
  78.   %========== Slide 1 ==========
  79.   idx = idx+1;
  80.   slide(idx).code = {
  81.   'figHandle = gcf;',
  82.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow;',   
  83.   '' };
  84.   slide(idx).text = {
  85.   '',
  86.   ' Press the "Start" button to see a demonstration of',
  87.   ' continuous wavelet tools in the Wavelet Toolbox',
  88.   '',
  89.   ' This demo uses Wavelet Toolbox functions.',
  90.   ''};
  91.   %========== Slide 2 ==========
  92.   idx = idx+1;
  93.   slide(idx).code = {
  94.   'lev = 5; wname = ''sym2''; nbcol = 64;',   
  95.   'load vonkoch; lv = 510; vonkoch = vonkoch(1:lv);',
  96.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  97.   'if idxPREV<idxSlide',
  98.   [   mfilename ,'(''localPROC_1'',vonkoch,''r'');'],
  99.   '   xtick = get(subplot(3,1,1),''XTick'');',
  100.   '   xtickLab = get(subplot(3,1,1),''XTickLabel'');',
  101.   'end',
  102.   '' };
  103.   slide(idx).text = {
  104.   ' % Load original fractal signal.',
  105.   ' ',
  106.   '        load vonkoch; lv = 510;',
  107.   '        vonkoch = vonkoch(1:lv);',
  108.   ''};
  109.   %========== Slide 3 ==========
  110.   idx = idx+1;
  111.   slide(idx).code = {
  112.   '' };
  113.   slide(idx).text = {
  114.   ' % This example aims to demonstrate the difference between',
  115.   ' % discrete and continuous wavelet transforms.',
  116.   ' % Perform discrete wavelet transform at level 5 by sym2.',
  117.   ' % Levels 1 to 5 correspond to scales 2, 4, 8, 16 and 32.',
  118.   ' ',
  119.   '        [c,l] = wavedec(vonkoch,5,''sym2'');'
  120.   ''};
  121.   slide(idx).info = 'wavedec';
  122.   %========== Slide 4 ==========
  123.   idx = idx+1;
  124.   slide(idx).code = {
  125.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  126.   'if idxPREV>idxSlide',
  127.   '   delete(subplot(3,1,2));',
  128.   '   set(subplot(3,1,1),''Xtick'',xtick,''XTickLabel'',xtickLab);',
  129.   'end',
  130.   '' };
  131.   slide(idx).text = {
  132.   ' % Expand discrete wavelet coefficients for plot.',
  133.   ' % Levels 1 to 5 correspond to scales 2, 4, 8, 16 and 32.',
  134.   ' ',
  135.   ' % cfs_Exp (expanded coefficients) is a (5 x length(signal)) matrix,',
  136.   ' % computed using the function DETCOEF.'
  137.   ''};
  138.   slide(idx).info = 'detcoef';
  139.   %========== Slide 5 ==========
  140.   idx = idx+1;
  141.   slide(idx).code = {
  142.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  143.   'if idxPREV>idxSlide',
  144.   '    delete(subplot(3,1,3));',
  145.   '    set(subplot(3,1,2),''Xtick'',xtick,''XTickLabel'',xtickLab);',
  146.   'else',
  147.   '    set(subplot(3,1,1),''Xtick'',[]);',
  148.   [    mfilename ,'(''localPROC_2'',vonkoch,lev,wname,nbcol);'],
  149.   'end',
  150.   '' };
  151.   slide(idx).text = {
  152.   ' % Expand discrete wavelet coefficients for plot.',
  153.   ' % Levels 1 to 5 correspond to scales 2, 4, 8, 16 and 32.',
  154.   ' % Plot discrete coefficients.',
  155.   ' ',
  156.   '        colormap(pink(64));',
  157.   '        img = image(wcodemat(cfs_Exp,64,''row''));' ,
  158.   ''};
  159.   slide(idx).info = 'wcodemat';
  160.   %========== Slide 6 ==========
  161.   idx = idx+1;
  162.   slide(idx).code = {
  163.   'lev = 5; wname = ''sym2''; nbcol = 64; scales = [1:32];',
  164.   'signal = vonkoch; map = pink(nbcol);',
  165.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  166.   'if idxPREV>idxSlide',
  167.   '   ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow;',
  168.       [mfilename ,'(''localPROC_1'',signal,''r'');'],
  169.   '   set(subplot(3,1,1),''Xtick'',[]);',
  170.   [   mfilename ,'(''localPROC_2'',signal,lev,wname,nbcol);'],
  171.   'end',
  172.   'set(subplot(3,1,2),''Xtick'',[]);',
  173.   [mfilename ,'(''localPROC_3'',signal,scales,wname,map);'],
  174.   '' };
  175.   slide(idx).text = {
  176. ' % Compute coefficients.',
  177. ' ', 
  178. '        coefs = cwt(vonkoch,1:32,''sym2'',''plot'');',
  179. '        colormap(pink(64));'
  180. ''};
  181.   slide(idx).info = 'cwt';
  182.   
  183.   
  184.   %========== Slide 7 ==========
  185.   idx = idx+1;
  186.   slide(idx).code = {
  187.   'lev = 5; wname = ''db1''; nbcol = 64; scales = [1:32];',
  188.   'load freqbrk; signal = freqbrk; clear freqbrk;',
  189.   'map = cool(128);',
  190.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow;',
  191.   [mfilename ,'(''localPROC_1'',signal,''r'');'],
  192.   'set(subplot(3,1,1),''Xtick'',[]);',
  193.   [mfilename ,'(''localPROC_2'',signal,lev,wname,nbcol);'],
  194.   'set(subplot(3,1,2),''Xtick'',[]);',
  195.   [mfilename ,'(''localPROC_3'',signal,scales,wname,map);'],
  196.   '' };
  197.   slide(idx).text = {
  198.   ' % Another example.',
  199.   ' ',
  200.   '        wname   = ''db1'';', 
  201.   '        scales  = [1:32];', 
  202.   '        load freqbrk' 
  203.   ''};
  204.   
  205.   slide(idx).info = 'cwt';
  206.   varargout{1} = slide;
  207. end