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

波变换

开发平台:

Matlab

  1. function y = upcoef(o,x,varargin)
  2. %UPCOEF Direct reconstruction from 1-D wavelet coefficients.
  3. %   Y = UPCOEF(O,X,'wname',N) computes the N-step 
  4. %   reconstructed coefficients of vector X. 'wname' is a
  5. %   string containing the wavelet name.
  6. %   N must be a strictly positive integer.
  7. %   If O = 'a', approximation coefficients are reconstructed.
  8. %   If O = 'd', detail coefficients are reconstructed.
  9. %
  10. %   Y = UPCOEF(O,X,'wname',N,L) computes the N-step 
  11. %   reconstructed coefficients of vector X and takes the 
  12. %   length-L central portion of the result.
  13. %
  14. %   Instead of giving the wavelet name, you can give the
  15. %   filters.
  16. %   For Y = UPCOEF(O,X,Lo_R,Hi_R,N) or 
  17. %   Y = UPCOEF(O,X,Lo_R,Hi_R,N,L),
  18. %   Lo_R is the reconstruction low-pass filter and
  19. %   Hi_R is the reconstruction high-pass filter.
  20. %
  21. %   Y = UPCOEF(O,X,'wname') is equivalent to 
  22. %   Y = UPCOEF(O,X,'wname',1).
  23. %
  24. %   Y = UPCOEF(O,X,Lo_R,Hi_R) is equivalent to 
  25. %   Y = UPCOEF(O,X,Lo_R,Hi_R,1).
  26. %
  27. %   See also IDWT.
  28. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  29. %   Last Revision: 14-May-2003.
  30. %   Copyright 1995-2004 The MathWorks, Inc.
  31. % $Revision: 1.14.4.2 $
  32. % Check arguments.
  33. nbIn = nargin;
  34. if nbIn < 3
  35.   error('Not enough input arguments.');
  36. elseif nbIn > 6
  37.   error('Too many input arguments.');
  38. end
  39. if isempty(x) , y = x; return; end
  40. o = lower(o(1));
  41. y = x; n = 1; l = 0;
  42. if ischar(varargin{1})
  43.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  44. else
  45.     Lo_R = varargin{1}; Hi_R = varargin{2};  next = 3;
  46. end
  47. if nargin>=(2+next)
  48.     n = varargin{next}; 
  49.     if nargin>=(3+next), l = varargin{next+1}; end
  50. end
  51. if (n<0) | (n~=fix(n)) | (l<0) | (l~=fix(l))
  52.     error('Invalid argument value.');
  53. end
  54. if n==0 , return; end
  55. switch o
  56.     case 'a' ,  F1 = Lo_R;  % Approximation reconstruction.
  57.     case 'd' ,  F1 = Hi_R;  % Detail reconstruction.
  58.     otherwise , error('Invalid argument value.');
  59. end
  60. lf = length(Lo_R);
  61. ly = 2*length(y)+lf-2;
  62. y  = upsconv1(y,F1,ly);
  63. for k=2:n
  64.     ly = 2*length(y)+lf-2;
  65.     y  = upsconv1(y,Lo_R,ly);
  66. end
  67. if l , y = wkeep1(y,l); end