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

波变换

开发平台:

Matlab

  1. function [a,d] = dwt(x,varargin)
  2. %DWT Single-level discrete 1-D wavelet transform.
  3. %   DWT performs a single-level 1-D wavelet decomposition
  4. %   with respect to either a particular wavelet ('wname',
  5. %   see WFILTERS for more information) or particular wavelet filters
  6. %   (Lo_D and Hi_D) that you specify.
  7. %
  8. %   [CA,CD] = DWT(X,'wname') computes the approximation
  9. %   coefficients vector CA and detail coefficients vector CD,
  10. %   obtained by a wavelet decomposition of the vector X.
  11. %   'wname' is a string containing the wavelet name.
  12. %
  13. %   [CA,CD] = DWT(X,Lo_D,Hi_D) computes the wavelet decomposition
  14. %   as above given these filters as input:
  15. %   Lo_D is the decomposition low-pass filter.
  16. %   Hi_D is the decomposition high-pass filter.
  17. %   Lo_D and Hi_D must be the same length.
  18. %
  19. %   Let LX = length(X) and LF = the length of filters; then
  20. %   length(CA) = length(CD) = LA where LA = CEIL(LX/2),
  21. %   if the DWT extension mode is set to periodization.
  22. %   LA = FLOOR((LX+LF-1)/2) for the other extension modes.  
  23. %   For the different signal extension modes, see DWTMODE. 
  24. %
  25. %   [CA,CD] = DWT(...,'mode',MODE) computes the wavelet 
  26. %   decomposition with the extension mode MODE you specify.
  27. %   MODE is a string containing the extension mode.
  28. %   Example: 
  29. %     [ca,cd] = dwt(x,'db1','mode','sym');
  30. %
  31. %   See also DWTMODE, IDWT, WAVEDEC, WAVEINFO.
  32. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  33. %   Last Revision: 19-May-2003.
  34. %   Copyright 1995-2004 The MathWorks, Inc.
  35. %   $Revision: 1.15.4.2 $
  36. % Check arguments.
  37. nbIn = nargin;
  38. if nbIn < 2
  39.   error('Not enough input arguments.');
  40. elseif nbIn > 7
  41.   error('Too many input arguments.');
  42. end
  43. if ischar(varargin{1})
  44.     [Lo_D,Hi_D] = wfilters(varargin{1},'d'); next = 2;
  45. else
  46.     Lo_D = varargin{1}; Hi_D = varargin{2};  next = 3;
  47. end
  48. % Check arguments for Extension and Shift.
  49. global DWT_Attribute
  50. if isempty(DWT_Attribute)
  51.     DWT_Attribute = dwtmode('get');
  52. end
  53. dwtEXTM = DWT_Attribute.extMode; % Default: Extension.
  54. shift   = DWT_Attribute.shift1D; % Default: Shift.
  55. for k = next:2:nbIn-1
  56.     switch varargin{k}
  57.       case 'mode'  , dwtEXTM = varargin{k+1};
  58.       case 'shift' , shift   = mod(varargin{k+1},2);
  59.     end
  60. end
  61. % Compute sizes and shape.
  62. lf = length(Lo_D);
  63. lx = length(x);
  64. % Extend, Decompose &  Extract coefficients.
  65. first = 2-shift;
  66. flagPer = isequal(dwtEXTM,'per');
  67. if ~flagPer
  68.     lenEXT = lf-1; last = lx+lf-1;
  69. else
  70.     lenEXT = lf/2; last = 2*ceil(lx/2);
  71. end
  72. y = wextend('1D',dwtEXTM,x,lenEXT);
  73. % Compute coefficients of approximation.
  74. z = wconv1(y,Lo_D,'valid'); 
  75. a = z(first:2:last);
  76. % Compute coefficients of detail.
  77. z = wconv1(y,Hi_D,'valid'); 
  78. d = z(first:2:last);