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

波变换

开发平台:

Matlab

  1. function [Hs,Gs,Ha,Ga,PRCond,AACond] = wave2lp(wname,PmaxHS,AddPOW)
  2. %WAVE2LP Laurent polynomials associated to a wavelet.
  3. %   [Hs,Gs,Ha,Ga] = WAVE2LP(W) returns the four Laurent polynomials
  4. %   associated to the wavelet which name is W (see LIFTWAVE). 
  5. %   The pairs (Hs,Gs) and (Ha,Ga) are the synthesis and the analysis
  6. %   pair respectively.
  7. %   The H-polynomials (G-polynomials) are "low pass" ("high pass")
  8. %   polynomials. 
  9. %   For an orthogonal wavelet, Hs = Ha and Gs = Ga.
  10. %
  11. %   See also LP.
  12. %   In addition, [...,PRCond,AACond] = WAVE2LP(W) computes the
  13. %   perfect reconstruction (PRCond) and the anti-aliasing (AACond)
  14. %   conditions (see PRAACOND).
  15. %
  16. %   [...] = WAVE2LP(W,PmaxHS) lets specify the maximum power of 
  17. %   Hs. PmaxHS must be an integer. The default value is zero.
  18. %
  19. %   [...] = WAVE2LP(...,AddPOW) lets change the default maximum
  20. %   power of Gs: PmaxGS = PmaxHS + length(Gs) - 2, adding the
  21. %   integer AddPOW. The default value for AddPOW is zero.
  22. %   AddPOW must be an even integer to preserve the perfect 
  23. %   condition reconstruction.
  24. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 03-Jun-2003.
  25. %   Last Revision: 12-Nov-2003.
  26. %   Copyright 1995-2004 The MathWorks, Inc.
  27. %   $Revision: 1.1.6.3 $  $Date: 2004/04/13 00:40:07 $
  28. switch nargin
  29.     case 0 , error('Not enough input arguments.');
  30.     case 1 , AddPOW = 0; PmaxHS = 0;
  31.     case 2 , AddPOW = 0;
  32. end
  33. tw = wavetype(wname);
  34. if ~isequal(lower(tw),'unknown')
  35.     wn = wname(1:2);
  36.     switch wn
  37.         case {'co','db','sy'} , mode = 'orthfilt';  % orthogonal wavelet.
  38.         case {'bi','rb'}      , mode = 'biorfilt';  % biorthogonal wavelet.
  39.         otherwise , mode = 'liftscheme';
  40.     end
  41. else
  42.     mode = 'unknown';
  43. end
  44. switch mode
  45.     case 'liftscheme'  % lazy wavelet and others ...
  46.         LS = liftwave(wname);
  47.         [Hs,Gs,Ha,Ga] = ls2lp(LS);
  48.         
  49.     case 'orthfilt' ,  % orthogonal wavelet.
  50.         LoR = wfilters(wname,'r');
  51.         [Ha,Ga,Hs,Gs] = filters2lp('orth',LoR,PmaxHS,AddPOW);
  52.         
  53.     case 'biorfilt'    % biorthogonal wavelet.
  54.         first = wname(1);
  55.         switch first
  56.             case 'b' , [Rf,Df] = biorwavf(wname);
  57.             case 'r' , [Rf,Df] = rbiowavf(wname);
  58.         end
  59.         %------------------------------------------------------
  60.         % === Comment if Modification of biorwavf (July 2003) ===
  61.         if isequal(wname,'bior6.8') || isequal(wname,'rbio6.8')
  62.             Df = -Df;  
  63.         end
  64.         %------------------------------------------------------
  65.         % Special case for bior3.X and rbio3.X.
  66.         if nargin<3 && wname(5)=='3' , AddPOW = 1; end
  67.         %------------------------------------------------------
  68.         LoR = sqrt(2)*Rf;
  69.         LoD = sqrt(2)*Df;
  70.         [Ha,Ga,Hs,Gs] = filters2lp('bior',LoR,LoD,PmaxHS,AddPOW);
  71.       
  72.     otherwise
  73.         error(['Invalid wavelet name: ' wname '.'])
  74. end
  75. if nargout>4
  76.     [PRCond,AACond] = praacond(Hs,Gs,Ha,Ga);
  77. end