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

波变换

开发平台:

Matlab

  1. function varargout = detcoef(coefs,longs,levels,dummy)
  2. %DETCOEF Extract 1-D detail coefficients.
  3. %   D = DETCOEF(C,L,N) extracts the detail coefficients
  4. %   at level N from the wavelet decomposition structure [C,L].
  5. %   See WAVEDEC for more information on C and L.
  6. %   Level N must be an integer such that 1 <= N <= NMAX
  7. %   where NMAX = length(L)-2.
  8. %
  9. %   D = DETCOEF(C,L) extracts the detail coefficients
  10. %   at last level NMAX.
  11. %
  12. %   If N is a vector of integers such that 1 <= N(j) <= NMAX:
  13. %
  14. %     DCELL = DETCOEF(C,L,N,'cells') returns a cell array where
  15. %     DCELL{j} contains the coefficients of detail N(j).
  16. %
  17. %     If length(N)>1, DCELL = DETCOEF(C,L,N) is equivalent to
  18. %     DCELL = DETCOEF(C,L,N,'cells').
  19. %
  20. %     DCELL = DETCOEF(C,L,'cells') is equivalent to 
  21. %     DCELL = DETCOEF(C,L,[1:NMAX])
  22. %
  23. %     [D1,...,Dp] = DETCOEF(C,L,[N(1),...,N(p)]) extracts the details
  24. %     coefficients at levels [N(1),...,N(p)].
  25. %
  26. %   See also APPCOEF, WAVEDEC.
  27. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  28. %   Last Revision: 22-May-2003.
  29. %   Copyright 1995-2004 The MathWorks, Inc.
  30. %   $Revision: 1.11.4.2 $
  31. % Check arguments.
  32. nmax = length(longs)-2;
  33. cellFLAG = false;
  34. if nargin>2
  35.     if isnumeric(levels)
  36.         if (any(levels < 1)) || (any(levels > nmax) ) || ...
  37.             any(levels ~= fix(levels))
  38.             error('Invalid level(s) value.');
  39.         end
  40.         cellFLAG = (nargin>3);
  41.     else
  42.         cellFLAG = true;
  43.         levels = [1:nmax];
  44.     end   
  45. else
  46.     levels = nmax;
  47. end
  48. first = cumsum(longs)+1;
  49. first = first(end-2:-1:1);
  50. longs = longs(end-1:-1:2);
  51. last  = first+longs-1;
  52. nblev = length(levels);
  53. tmp   = cell(1,nblev);
  54. for j = 1:nblev
  55.     k = levels(j);
  56.     tmp{j} = coefs(first(k):last(k));
  57. end
  58. if nargout>0
  59.    if (nargout==1 && nblev>1) || cellFLAG
  60.        varargout{1} = tmp;
  61.    else
  62.        varargout = tmp;
  63.    end
  64. end