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

波变换

开发平台:

Matlab

  1. function m = wrmcoef(o,c,l,varargin)
  2. %WRMCOEF Reconstruct row matrix of single branches 
  3. %   from 1-D wavelet coefficients.
  4. %   M = WRMCOEF(O,C,L,W,N) computes the matrix of
  5. %   reconstructed coefficients, based on the wavelet
  6. %   decomposition structure [C,L], of levels given 
  7. %   in vector N.
  8. %   W is a string containing the wavelet name.
  9. %   If O = 'a', approximation coefficients are reconstructed
  10. %   and value 0 for level is allowed, else detail coefficients 
  11. %   are reconstructed and only strictly positive values for
  12. %   level are allowed.
  13. %   Vector N must contains positive integers <= length(L)-2. 
  14. %
  15. %   M is the output matrix of reconstructed coefficients 
  16. %   vectors stored row-wise.
  17. %   
  18. %   For M = WRMCOEF(O,C,L,Lo,Hi,N) 
  19. %   Lo is the reconstruction low-pass filter and
  20. %   Hi is the reconstruction high-pass filter.
  21. %
  22. %   M = WRMCOEF(O,C,L,W) or M = WRMCOEF(O,C,L,Lo,Hi) reconstructs 
  23. %   coefficients of all possible levels.
  24. %
  25. %   See also APPCOEF, DETCOEF, WRCOEF, WAVEDEC.
  26. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  27. %   Last Revision: 14-May-2003.
  28. %   Copyright 1995-2004 The MathWorks, Inc.
  29. %   $Revision: 1.15.4.2 $
  30. % Check arguments.
  31. nbIn = nargin;
  32. if nbIn < 4
  33.   error('Not enough input arguments.');
  34. elseif nbIn > 6
  35.   error('Too many input arguments.');
  36. end
  37. o = lower(o(1));
  38. rmax = length(l); nmax = rmax-2;
  39. if o=='a', nmin = 0; else , nmin = 1; end
  40. if ischar(varargin{1})
  41.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  42. else
  43.     Lo_R = varargin{1}; Hi_R = varargin{2};  next = 3;
  44. end
  45. if nargin>=(3+next), n = varargin{next}; else, n = [nmin:nmax]; end
  46. if find((n<nmin) | (n>nmax) | (n~=fix(n)))
  47.     error('Invalid level(s) value(s).');
  48. end
  49. % Initialization
  50. if size(l,1)>1 , c = c'; l = l'; end
  51. m = zeros(length(n),l(rmax));
  52. % Get DWT_Mode
  53. dwtATTR = dwtmode('get');
  54. switch o
  55.     case 'a'
  56.         for p = nmax:-1:0
  57.             [c,l,a] = upwlev(c,l,Lo_R,Hi_R);
  58.             j = find(p==n);
  59.             if ~isempty(j)
  60.                 % Approximation reconstruction.
  61.                 imin   = length(l)-p;
  62.                 nbrows = length(j);
  63.                 m(j,:) = ReconsCoefs(a,Lo_R,Lo_R,l,imin,p,nbrows,dwtATTR);
  64.             end
  65.         end
  66.     case 'd'
  67.         for p = 1:nmax
  68.             j = find(p==n);
  69.             if ~isempty(j)
  70.                 % Extract detail coefficients.
  71.                 d = detcoef(c,l,p);
  72.                 % Detail reconstruction.
  73.                 imin   = rmax-p;
  74.                 nbrows = length(j);
  75.                 m(j,:) = ReconsCoefs(d,Hi_R,Lo_R,l,imin,p,nbrows,dwtATTR);
  76.             end
  77.         end
  78.     otherwise
  79.         error('Invalid argument value.');
  80. end
  81. %--------------------------------------------------------%
  82. % Internal Function(s)
  83. %--------------------------------------------------------%
  84. function x = ReconsCoefs(x,f1,f2,l,i,p,n,dwtATTR)
  85. if p>0
  86.     x  = upsconv1(x,f1,l(i+1),dwtATTR);
  87.     for k=2:p , x = upsconv1(x,f2,l(i+k),dwtATTR); end
  88. end
  89. x = x(ones(n,1),:);