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

波变换

开发平台:

Matlab

  1. function y = dyaddown(x,IN2,IN3)
  2. %DYADDOWN Dyadic downsampling.
  3. %   Y = DYADDOWN(X,EVENODD) where X is a vector, and returns
  4. %   a version of X that has been downsampled by 2.
  5. %   Whether Y contains the even- or odd-indexed samples
  6. %   of X depends on the value of positive integer EVENODD:
  7. %   If EVENODD is even, then Y(k) = X(2k).
  8. %   If EVENODD is odd,  then Y(k) = X(2k-1).
  9. %
  10. %   Y = DYADDOWN(X) is equivalent to Y = DYADDOWN(X,0)
  11. %
  12. %   Y = DYADDOWN(X,EVENODD,'type') or 
  13. %   Y = DYADDOWN(X,'type',EVENODD) where X is a matrix,
  14. %   return a version of X obtained by suppressing columns
  15. %   (or rows or both) if 'type' = 'c' (or 'r' or 'm'
  16. %   respectively), according to the parameter EVENODD, which
  17. %   is as above.
  18. %
  19. %   Y = DYADDOWN(X) is equivalent to
  20. %   Y = DYADDOWN(X,0,'c').
  21. %   Y = DYADDOWN(X,'type') is equivalent to
  22. %   Y = DYADDOWN(X,0,'type').
  23. %   Y = DYADDOWN(X,EVENODD) is equivalent to
  24. %   Y = DYADDOWN(X,EVENODD,'c').
  25. %
  26. %                  |1 2 3 4|                       |2 4|
  27. %   Examples : X = |2 4 6 8|  ,  DYADDOWN(X,'c') = |4 8|
  28. %                  |3 6 9 0|                       |6 0|
  29. %
  30. %                       |1 2 3 4|                        |1 3|
  31. %   DYADDOWN(X,'r',1) = |3 6 9 0|  , DYADDOWN(X,'m',1) = |3 9|
  32. %
  33. %   See also DYADUP.
  34. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  35. %   Last Revision: 14-May-2003.
  36. %   Copyright 1995-2004 The MathWorks, Inc.
  37. % $Revision: 1.13.4.2 $
  38. % Check arguments.
  39. def_evenodd = 0;
  40. nbin  = nargin-1;
  41. [r,c] = size(x);
  42. if min(r,c)<=1
  43.     dim = 1;
  44.     switch nbin
  45.       case 1 , if ischar(IN2) , dim = 2; end
  46.       case 2 , if ischar(IN2) | ischar(IN3) , dim = 2; end
  47.     end
  48. else
  49.     dim = 2;
  50. end
  51. if dim==1
  52.     switch nbin
  53.       case 0 ,    p = def_evenodd;
  54.       case 1 ,    p = IN2;
  55.       otherwise , error('Too many input arguments.');
  56.     end
  57.     y = x(2-rem(p,2):2:end);
  58. else
  59.     switch nbin
  60.         case 0
  61.             o = 'c'; p = def_evenodd;
  62.         case 1 
  63.             if ischar(IN2)
  64.                 p = def_evenodd; o = lower(IN2(1));
  65.             else
  66.                 p = IN2; o = 'c';
  67.             end
  68.         otherwise
  69.             if ischar(IN2)
  70.                 p = IN3; o = lower(IN2(1));
  71.             else
  72.                 p = IN2; o = lower(IN3(1));
  73.             end
  74.     end
  75.     first = 2-rem(p,2);
  76.     switch o
  77.       case 'c'  , y = x(:,first:2:c);
  78.       case 'r'  , y = x(first:2:r,:);
  79.       case 'm'  , y = x(first:2:r,first:2:c);
  80.       otherwise , error('Invalid argument value.');
  81.     end
  82. end