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

波变换

开发平台:

Matlab

  1. function LSN = addlift(LS,ELS,loc)
  2. %ADDLIFT Add primal or dual lifting steps.
  3. %   LSN = ADDLIFT(LS,ELS) returns the new lifting
  4. %   scheme LSN obtained by appending the elementary
  5. %   lifting step ELS to the lifting scheme LS.
  6. %   
  7. %   LSN = ADDLIFT(LS,ELS,'begin') prepends the specified 
  8. %   elementary lifting step.
  9. %  ELS is either a cell array (see LSINFO) wich format is: 
  10. %        {TYPEVAL, COEFS, MAX_DEG}  
  11. %  or a structure (see LIFTFILT) which format is:
  12. %         struct('type',TYPEVAL,'value',LPVAL) 
  13. %  with LPVAL = laurpoly(COEFS, MAX_DEG)
  14. %
  15. %   ADDLIFT(LS,ELS,'end') is equivalent to ADDLIFT(LS,ELS).
  16. %
  17. %  If ELS is a sequence of elementary lifting steps, stored 
  18. %  in a cell array or an array of structures, then each of
  19. %  the elementary lifting steps is added to LS.
  20. %
  21. %   For more information about lifting schemes type: lsinfo.
  22. %   
  23. %   Examples:
  24. %      LS = liftwave('db1')
  25. %      els = { 'p', [-1 2 -1]/4 , [1] };
  26. %      LSend = addlift(LS,els)
  27. %      LSbeg = addlift(LS,els,'begin')
  28. %      displs(LSend)
  29. %      displs(LSbeg)
  30. %      twoels(1) = struct('type','p','value',lp([1 -1]/8,0));
  31. %      twoels(2) = struct('type','p','value',lp([1 -1]/8,1));
  32. %      LStwo = addlift(LS,twoels)
  33. %      displs(LStwo)
  34. %
  35. %   See also LIFTFILT.
  36. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 28-May-2001.
  37. %   Last Revision: 14-Jul-2003.
  38. %   Copyright 1995-2004 The MathWorks, Inc.
  39. %   $Revision: 1.1.6.3 $  $Date: 2004/04/13 00:39:31 $
  40. if nargin<3 ,loc = 'end'; end
  41. loc = lower(loc(1:3));
  42. structMODE = isstruct(ELS);
  43. if structMODE
  44.     switch loc
  45.         case 'end' ,
  46.             LSN =  LS(1:end-1,:);
  47.             for k = 1:length(ELS)
  48.                 [C,D] = get(ELS(k).value,'coefs','maxDEG');
  49.                 one_els = {ELS(k).type,C,D};
  50.                 LSN = [LSN ; one_els];
  51.             end
  52.             LSN = [ LSN ; LS(end,:) ];
  53.             
  54.         case 'beg' ,
  55.             LSN =  LS;
  56.             for k = 1:length(ELS)
  57.                 [C,D] = get(ELS(k).value,'coefs','maxDEG');
  58.                 one_els = {ELS(k).type,C,D};
  59.                 LSN = [one_els ; LSN];
  60.             end
  61.     end
  62.     return
  63. end
  64. cellMODE = ~(isequal(ELS{1,1},'p') || isequal(ELS{1,1},'d'));
  65. if ~cellMODE
  66.     switch loc
  67.         case 'end' ,  
  68.             LSN = [ LS(1:end-1,:) ; ELS ; LS(end,:) ];
  69.         case 'beg' ,  
  70.             LSN = [ ELS ; LS ];         
  71.     end    
  72. else
  73.     switch loc
  74.         case 'end' ,
  75.             LSN =  LS(1:end-1,:);
  76.             for k = 1:length(ELS)
  77.                 LSN = [ LSN ; ELS{k}];
  78.             end
  79.             LSN = [ LSN ; LS(end,:) ];
  80.             
  81.         case 'beg' ,
  82.             LSN =  LS;
  83.             for k = 1:length(ELS)
  84.                 LSN = [ ELS{k} ; LSN ];
  85.             end
  86.     end
  87. end