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

波变换

开发平台:

Matlab

  1. function [Ha,Ga,Hs,Gs] = wlift(Ha,Ga,Hs,Gs,IN5,IN6,IN7)
  2. %WLIFT Make elementary lifting step.
  3. %   [HaN,GaN,HsN,GsN] = WLIFT(Ha,Ga,Hs,Gs,ELS) returns 
  4. %   the four Laurent polynomials HaN, GaN, HsN and GsN 
  5. %   obtained by an "elementary lifting step" (ELS) starting  
  6. %   from the four Laurent polynomials Ha, Ga, Hs and Gs.
  7. %   ELS is a structure such that:
  8. %     - TYPE = ELS.type gives the "type" of the elementary   
  9. %       lifting step. The valid values for TYPE are: 
  10. %          'p' (primal) or 'd' (dual).
  11. %     - VALUE = ELS.value gives the Laurent polynomial T
  12. %       associated to the elementary lifting step. If VALUE
  13. %       is a vector, the Laurent polynomial T is equal to 
  14. %       laurpoly(VALUE,0).
  15. %
  16. %   A SPECIAL CASE of ELS is a "scaling step". In that case,
  17. %   TYPE is equal to 's' (scaling) and VALUE is a scalar 
  18. %   different from zero. A "scaling step" is equivalent to a 
  19. %   sequence of four other steps ('d','p','d','p') or
  20. %   ('p','d','p','d') with constant Laurent polynomials.
  21. %
  22. %   [...] = WLIFT(...,TYPE,VALUE) gives the same results.
  23. %
  24. %   If TYPE = 'p' , Ga and Hs are not changed and
  25. %      GsN(z) = Gs(z) + Hs(z) * T(z^2) 
  26. %      HaN(z) = Ha(z) - Ga(z) * T(1/z^2)   
  27. %
  28. %   If TYPE = 'd' , Ha and Gs are not changed and
  29. %      HsN(z) = Hs(z) + Gs(z) * T(z^2)  
  30. %      GaN(z) = Ga(z) - Ha(z) * T(1/z^2)
  31. %
  32. %   If TYPE = 's' , Ha, Ga, Hs and Gs are changed and
  33. %      Hs(z) = Hs(z) * VALUE ;  Gs(z) = Gs(z) / VALUE
  34. %      Ha(z) = Ha(z) / VALUE;   Ga(z) = Ga(z) * VALUE
  35. %
  36. %   If ELS is an array of elementary lifting steps,
  37. %   WLIFT(...,ELS) performs each step successively.
  38. %
  39. %   WLIFT(...,flagPLOT) plots the successive "biorthogonal"
  40. %   pairs: ("scale function" , "wavelet"). 
  41. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 27-May-2003.
  42. %   Last Revision: 07-Jul-2003.
  43. %   Copyright 1995-2004 The MathWorks, Inc.
  44. %   $Revision: 1.1.6.2 $  $Date: 2004/04/13 00:39:29 $
  45. % Check arguments.
  46. nbIn = nargin;
  47. if nbIn < 4
  48.   error('Not enough input arguments.');
  49. elseif nbIn > 7
  50.   error('Too many input arguments.');
  51. end
  52. if isstruct(IN5)
  53.     ELS = IN5;
  54.     nextARG = 6;
  55. else
  56.     ELS = struct('type',IN5,'value',IN6);
  57.     nextARG = 7;
  58. end
  59. if nargin < nextARG , flagPLOT = false; else , flagPLOT = true; end
  60. if flagPLOT
  61.     [LoD,HiD,LoR,HiR] = lp2filters(Ha,Ga,Hs,Gs);
  62.     bswfun(LoD,HiD,LoR,HiR,'plot');
  63. end
  64. for k = 1:length(ELS)
  65.     type = ELS(k).type;
  66.     switch type
  67.         case {'p','d'}
  68.             P = ELS(k).value;
  69.             if isnumeric(P) , P = laurpoly(P); end
  70.             P = dyadup(P);
  71.             switch type
  72.                 case 'p'  % 'primal'
  73.                     Gs = Gs + Hs * P; Ha = Ha - Ga * reflect(P);
  74.                 case 'd'  % 'dual'
  75.                     Hs = Hs + Gs * P; Ga = Ga - Ha * reflect(P);
  76.             end
  77.             
  78.         case 's'
  79.             cfsNOR = ELS(k).value;
  80.             Hs = cfsNOR*Hs; Gs = Gs/cfsNOR;
  81.             Ha = Ha/cfsNOR; Ga = cfsNOR*Ga;
  82.     end
  83.     if flagPLOT
  84.         [LoD,HiD,LoR,HiR] = lp2filters(Ha,Ga,Hs,Gs);
  85.         bswfun(LoD,HiD,LoR,HiR,'plot');
  86.     end
  87. end