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

波变换

开发平台:

Matlab

  1. function y = wkeep1(x,len,varargin)
  2. %WKEEP1  Keep part of a vector.
  3. %
  4. %   Y = WKEEP1(X,L,OPT) extracts the vector Y 
  5. %   from the vector X. The length of Y is L.
  6. %   If OPT = 'c' ('l' , 'r', respectively), Y is the central
  7. %   (left, right, respectively) part of X.
  8. %   Y = WKEEP1(X,L,FIRST) returns the vector X(FIRST:FIRST+L-1).
  9. %
  10. %   Y = WKEEP1(X,L) is equivalent to Y = WKEEP1(X,L,'c').
  11. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 07-May-2003.
  12. %   Last Revision: 22-May-2003.
  13. %   Copyright 1995-2004 The MathWorks, Inc.
  14. % $Revision: 1.1.6.2 $
  15. % Check arguments.
  16. nbIn = nargin;
  17. if nbIn < 2
  18.   error('Not enough input arguments.');
  19. elseif nbIn > 4
  20.   error('Too many input arguments.');
  21. end
  22. if (len ~= fix(len))
  23.     error('Arg2: invalid argument value');
  24. end
  25. y = x;
  26. sx = length(x);
  27. ok = (len >= 0) && (len < sx);
  28. if ~ok , return; end
  29. if nbIn<3 , OPT = 'c'; else , OPT = lower(varargin{1}); end
  30. if ischar(OPT)
  31.     switch OPT
  32.         case 'c'
  33.             if nbIn<4 , side = 0; else , side = varargin{2}; end
  34.             d = (sx-len)/2;
  35.             switch side
  36.                 case {'u','l','0',0} , 
  37.                     first = 1+floor(d); last = sx-ceil(d);
  38.                 case {'d','r','1',1} , 
  39.                     first = 1+ceil(d);  last = sx-floor(d);
  40.             end
  41.         case {'l','u'} , first = 1;        last = len;
  42.         case {'r','d'} , first = sx-len+1; last = sx;
  43.     end
  44. else
  45.     first = OPT; last = first+len-1;
  46.     if (first ~= fix(first)) || (first<1) || (last>sx)
  47.         error('Invalid argument value.');
  48.     end
  49. end
  50. y = y(first:last);