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

波变换

开发平台:

Matlab

  1. function [t,X] = cfs2wpt(wname,size_of_DATA,tn_of_TREE,order,CFS)
  2. %CFS2WPT Wavelet packet tree construction from coefficients.
  3. %   CFS2WPT builds a wavelet packet tree and the related 
  4. %   analyzed signal or image.
  5. %
  6. %   [T,X] = CFS2WPT(WNAME,SIZE_OF_DATA,TN_OF_TREE,ORDER,CFS) returns
  7. %   a wavelet packet tree T and the related analyzed signal or image X.
  8. %
  9. %     WNAME is the name of the wavelet used for the analyze.
  10. %     SIZE_OF_DATA is the size of the analyzed signal or image.
  11. %     TN_OF_TREE is the vector containing the terminal node 
  12. %     indices of the tree.
  13. %     ORDER is 2 for a signal and 4 for an image.
  14. %     CFS is a vector, which contains the coefficients used to
  15. %     reconstruct the original signal or image.
  16. %
  17. %   CFS is optional. When CFS2WPT is used without the CFS input 
  18. %   parameter, the wavelet packet tree structure (T) is generated but
  19. %   all the tree coefficients are null (this implies that X is null). 
  20. %
  21. %   Example:
  22. %     load detail
  23. %     t = wpdec2(X,2,'sym4');
  24. %     cfs = read(t,'allcfs');
  25. %     noisyCfs = cfs + 40*rand(size(cfs));
  26. %     noisyT = cfs2wpt('sym4',size(X),tnodes(t),4,noisyCfs);
  27. %     plot(noisyT)
  28. %
  29. %     t = cfs2wpt('sym4',[1 1024],[3 9 10 2]',2);
  30. %     sN = read(t,'sizes',[3,9]);
  31. %     sN3 = sN(1,:); sN9 = sN(2,:);
  32. %     cfsN3 = ones(sN3);
  33. %     cfsN9 = randn(sN9);
  34. %     t = write(t,'cfs',3,cfsN3,'cfs',9,cfsN9);
  35. %     plot(t)
  36. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Aug-2001.
  37. %   Last Revision: 19-Dec-2001.
  38. %   Copyright 1995-2002 The MathWorks, Inc.
  39. %   $Revision: 1.4 $
  40. % Computing dummy data and tree depth.
  41. %-------------------------------------
  42. if length(size_of_DATA)==1
  43.     size_of_DATA = [1 size_of_DATA];
  44. end
  45. dummy_DATA = zeros(size_of_DATA);
  46. [d,p] = ind2depo(order,tn_of_TREE);
  47. depth_of_TREE = max(d);
  48. % Building the tree.
  49. %-------------------
  50. switch order
  51.     case 2 ,t  = wpdec(dummy_DATA,1,wname);    
  52.     case 4 ,t  = wpdec2(dummy_DATA,1,wname);
  53. end
  54. tn = leaves(t);
  55. nodes_to_SPLIT = setdiff(tn,tn_of_TREE);
  56. while ~isempty(nodes_to_SPLIT)
  57.     for k = 1:length(nodes_to_SPLIT)
  58.         t = wpsplt(t,nodes_to_SPLIT(k));
  59.     end
  60. tn = leaves(t);
  61. nodes_to_SPLIT = setdiff(tn,tn_of_TREE);    
  62. end   
  63. % Restoring the coefficients.
  64. %----------------------------
  65. if nargin>4
  66.     dummy_CFS = read(t,'data');
  67.     if isequal(size(dummy_CFS),size(CFS))
  68.         t = write(t,'data',CFS);
  69.     else
  70.         
  71.     end
  72. end
  73. if nargout<2 , return; end
  74. % Computing the original data.
  75. %-----------------------------
  76. switch order
  77.     case 2 , X = wprec(t);    
  78.     case 4 , X = wprec2(t);
  79. end