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

波变换

开发平台:

Matlab

  1. function x = wrcoef(o,c,l,varargin)
  2. %WRCOEF Reconstruct single branch from 1-D wavelet coefficients.
  3. %   WRCOEF reconstructs the coefficients of a 1-D signal,
  4. %   given a wavelet decomposition structure (C and L) and
  5. %   either a specified wavelet ('wname', see WFILTERS for more information) 
  6. %   or specified reconstruction filters (Lo_R and Hi_R).
  7. %
  8. %   X = WRCOEF('type',C,L,'wname',N) computes the vector of
  9. %   reconstructed coefficients, based on the wavelet
  10. %   decomposition structure [C,L] (see WAVEDEC for more information),
  11. %   at level N. 'wname' is a string containing the name of the wavelet.
  12. %   Argument 'type' determines whether approximation
  13. %   ('type' = 'a') or detail ('type' = 'd') coefficients are
  14. %   reconstructed.
  15. %   When 'type' = 'a', N is allowed to be 0; otherwise, 
  16. %   a strictly positive number N is required.
  17. %   Level N must be an integer such that N <= length(L)-2. 
  18. %
  19. %   X = WRCOEF('type',C,L,Lo_R,Hi_R,N) computes coefficient
  20. %   as above, given the reconstruction you specify.
  21. %
  22. %   X = WRCOEF('type',C,L,'wname') and
  23. %   X = WRCOEF('type',C,L,Lo_R,Hi_R) reconstruct coefficients
  24. %   of maximum level N = length(L)-2.
  25. %
  26. %   See also APPCOEF, DETCOEF, WAVEDEC.
  27. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  28. %   Last Revision: 14-May-2003.
  29. %   Copyright 1995-2004 The MathWorks, Inc.
  30. % $Revision: 1.14.4.2 $
  31. % Check arguments.
  32. nbIn = nargin;
  33. if nbIn < 4
  34.   error('Not enough input arguments.');
  35. elseif nbIn > 6
  36.   error('Too many input arguments.');
  37. end
  38. o = lower(o(1));
  39. rmax = length(l); nmax = rmax-2;
  40. if o=='a', nmin = 0; else , nmin = 1; end
  41. if ischar(varargin{1})
  42.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  43. else
  44.     Lo_R = varargin{1};  Hi_R = varargin{2}; next = 3;
  45. end
  46. if nargin>=(3+next) , n = varargin{next}; else, n = nmax; end
  47. if (n<nmin) | (n>nmax) | (n~=fix(n))
  48.     error('Invalid argument value.');
  49. end
  50. % Get DWT_Mode
  51. dwtATTR = dwtmode('get');
  52. switch o
  53.   case 'a'
  54.     % Extract approximation.
  55.     x = appcoef(c,l,Lo_R,Hi_R,n);
  56.     if n==0, return; end
  57.     F1 = Lo_R;
  58.   case 'd'
  59.     % Extract detail coefficients.
  60.     x = detcoef(c,l,n);
  61.     F1 = Hi_R;
  62.   otherwise
  63.     error('Invalid argument value.');
  64. end
  65. imin = rmax-n;
  66. x  = upsconv1(x,F1,l(imin+1),dwtATTR);
  67. for k=2:n , x = upsconv1(x,Lo_R,l(imin+k),dwtATTR); end