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

波变换

开发平台:

Matlab

  1. function x = idwtper(a,d,varargin)
  2. %IDWTPER Single-level inverse discrete 1-D wavelet transform (periodized).
  3. %   X = IDWTPER(CA,CD,'wname') returns the single-level
  4. %   reconstructed approximation coefficients vector X
  5. %   based on approximation and detail vectors CA and CD
  6. %   at a given level, using the periodized inverse wavelet
  7. %   transform.
  8. %   'wname' is a string containing the wavelet name (see WFILTERS).
  9. %
  10. %   Instead of giving the wavelet name, you can give the filters.
  11. %   For X = IDWTPER(CA,CD,Lo_R,Hi_R),
  12. %   Lo_R is the reconstruction low-pass filter and
  13. %   Hi_R is the reconstruction high-pass filter
  14. %
  15. %   If la = length(CA) = length(CD) then length(X) = 2*la.
  16. %
  17. %   For X = IDWTPER(CA,CD,'wname',L) or 
  18. %   X = IDWTPER(CA,CD,Lo_R,Hi_R,L), L is the length of
  19. %   the result.
  20. %
  21. %   See also DWTPER.
  22. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  23. %   Last Revision: 07-May-2003.
  24. %   Copyright 1995-2004 The MathWorks, Inc.
  25. % $Revision: 1.13.4.2 $
  26. % Check arguments.
  27. if errargn(mfilename,nargin,[3:5],nargout,[0:1]), error('*'), end
  28. la = length(a);
  29. if ischar(varargin{1})
  30.     [Lo_R,Hi_R] = wfilters(varargin{1},'r');
  31.     if nargin==4 , lx = varargin{2}; else , lx = 2*la; end
  32. else
  33.     Lo_R = varargin{1}; Hi_R = varargin{2};
  34.     if nargin==5 , lx = varargin{3}; else , lx = 2*la; end
  35. end
  36. % Reconstruction.
  37. lf = length(Lo_R);
  38. lm = floor((lf-1)/2)/2;
  39. I  = [la-floor(lm)+1:la , 1:la , 1:ceil(lm)];
  40. if lf>2*la
  41.     I  = mod(I,la);
  42.     I(I==0) = la;
  43. end
  44. a = a(I);
  45. d = d(I);
  46. x = conv(dyadup(a),Lo_R)+conv(dyadup(d),Hi_R);
  47. x = wkeep1(x,lx);