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

波变换

开发平台:

Matlab

  1. function x = wprcoef(Ts,Ds,node)
  2. %WPRCOEF Reconstruct wavelet packet coefficients.
  3. %   X = WPRCOEF(T,D,N) computes reconstructed coefficients
  4. %   of the node N. T is the tree structure and D
  5. %   the data structure (see MAKETREE).
  6. %
  7. %   X = WPRCOEF(T,D) is equivalent to X = WPRCOEF(T,D,0).
  8. %
  9. %   See also WPDEC, WPDEC2, WPREC, WPREC2.
  10. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  11. %   Last Revision: 06-May-2003.
  12. %   Copyright 1995-2004 The MathWorks, Inc.
  13. % $Revision: 1.13.4.2 $
  14. % Check arguments.
  15. if errargn(mfilename,nargin,[2 3],nargout,[0:1]), error('*'); end
  16. if nargin==2, node = 0; end
  17. if find(isnode(Ts,node)==0)
  18.     errargt(mfilename,'invalid node value','msg'); error('*');
  19. end
  20. % Get DWT_Mode
  21. dwtATTR = dwtmode('get');
  22. order = treeord(Ts);
  23. asc   = nodeasc(Ts,node,'depo');
  24. asc   = rem(asc(:,2),order);
  25. nb_up = size(asc,1)-1;
  26. x      = wpcoef(Ts,Ds,node);
  27. filter = wdatamgr('read_wave',Ds);
  28. [Lo_R,Hi_R] = wfilters(filter,'r');
  29. sizes  = wdatamgr('rsizes',Ds);
  30. lf = length(Lo_R);
  31. f  = zeros(nb_up,lf);
  32. switch order
  33.     case 2
  34.         dwtEXTM  = dwtATTR.extMode;
  35.         dwtSHIFT = dwtATTR.shift1D;
  36.         K      = find(asc==0);
  37.         f(K,:) = Lo_R(ones(size(K)),:);
  38.         K      = find(asc==1);
  39.         f(K,:) = Hi_R(ones(size(K)),:);
  40.         for k=1:nb_up
  41.             s = sizes(nb_up-k+1);
  42.             x = upsconv1(x,f(k,:),s,dwtEXTM,dwtSHIFT);
  43.         end
  44.     case 4
  45.         g = f;
  46.         K = find(asc==0);
  47.         f(K,:) = Lo_R(ones(size(K)),:);
  48.         g(K,:) = Lo_R(ones(size(K)),:);
  49.         K = find(asc==1);
  50.         f(K,:) = Hi_R(ones(size(K)),:);
  51.         g(K,:) = Lo_R(ones(size(K)),:);
  52.         K = find(asc==2);
  53.         f(K,:) = Lo_R(ones(size(K)),:);
  54.         g(K,:) = Hi_R(ones(size(K)),:);
  55.         K = find(asc==3);
  56.         f(K,:) = Hi_R(ones(size(K)),:);
  57.         g(K,:) = Hi_R(ones(size(K)),:);
  58.         for k=1:nb_up
  59.             s = sizes(:,nb_up-k+1)';
  60.             x = upsconv2(x,{f(k,:),g(k,:)},s,dwtATTR);
  61.         end
  62. end