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

波变换

开发平台:

Matlab

  1. function [a,d] = dwtper(x,varargin)
  2. %DWTPER Single-level discrete 1-D wavelet transform (periodized).
  3. %   [CA,CD] = DWTPER(X,'wname') computes the approximation
  4. %   coefficients vector CA and detail coefficients vector CD,
  5. %   obtained by periodized wavelet decomposition of the 
  6. %   vector X.
  7. %   'wname' is a string containing the wavelet name
  8. %   (see WFILTERS).
  9. %
  10. %   Instead of giving the wavelet name, you can give
  11. %   the filters. When used with three arguments: 
  12. %   [CA,CD] = DWTPER(X,Lo_D,Hi_D),
  13. %   Lo_D is the decomposition low-pass filter and
  14. %   Hi_D is the decomposition high-pass filter.
  15. %
  16. %   If lx = length(X) then
  17. %       length(CA) = length(CD) = CEIL(lx/2).
  18. %
  19. %   See also DWT, IDWTPER.
  20. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  21. %   Last Revision: 07-May-2003.
  22. %   Copyright 1995-2004 The MathWorks, Inc.
  23. %   $Revision: 1.12.4.2 $
  24. % Check arguments.
  25. if errargn(mfilename,nargin,[2:3],nargout,[0:2]), error('*'), end
  26. if nargin == 2
  27.     [Lo_D,Hi_D] = wfilters(varargin{1},'d');
  28. else
  29.     Lo_D = varargin{1}; Hi_D = varargin{2};
  30. end
  31. % Periodization.
  32. lx = length(x);
  33. lf = length(Lo_D);
  34. if rem(lx,2) , x(lx+1) = x(lx); lx = lx+1; end
  35. I = [lx-lf+1:lx , 1:lx , 1:lf];
  36. if lx<lf
  37.     I = mod(I,lx);
  38.     I(I==0) = lx;
  39. end
  40. x = x(I);
  41. % Decomposition.
  42. lp = ceil(lx/2);
  43. a  = wkeep1(dyaddown(conv(x,Lo_D)),lp);
  44. d  = wkeep1(dyaddown(conv(x,Hi_D)),lp);