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

波变换

开发平台:

Matlab

  1. function varargout = ls2filters(LS,OPTION)
  2. %LS2FILTERS Lifting scheme to filters.
  3. %   VARARGOUT = LS2FILTERS(LS,OPTION) returns numerical 
  4. %   filters or Laurent Polynomial filters associated to
  5. %   the Lifting Scheme LS. The type and the number of
  6. %   outputs depend on OPTION.
  7. %   The valid choices for OPTION are: 
  8. %       'a'
  9. %       'a_num' , 'd_num' , 'p_num'
  10. %       'a_lp'  , 'd_lp'  , 'p_lp'
  11. %    where: 
  12. %      - 'a' , 'd' ans 'p' abbreviate "all", "dual" and "primal"
  13. %        respectively.
  14. %      - 'num' abbreviates "numerically".
  15. %      - 'lp'  abbreviates "Laurent Polynomial".
  16. %
  17. %   LS2FILTERS(LS) is equivalent to LS2FILTERS(LS,'d_num').
  18. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 10-Jan-2003.
  19. %   Last Revision: 08-Jul-2003.
  20. %   Copyright 1995-2004 The MathWorks, Inc.
  21. %   $Revision: 1.1.6.3 $  $Date: 2004/04/13 00:39:51 $
  22. if nargin<2 , OPTION = 'd_num'; end 
  23. OPTION = lower(OPTION);
  24. begOPT = OPTION(1);
  25. if (begOPT=='a') || (begOPT=='d') 
  26.     [d_Hs,d_Gs,d_Ha,d_Ga] = ls2lp(LS,'d');
  27.     [d_Lo_R,d_Hi_R,d_Lo_D,d_Hi_D] = getNum_Filters(d_Hs,d_Gs,d_Ha,d_Ga);
  28. end
  29. if (begOPT=='a') || (begOPT=='p')
  30.     [p_Hs,p_Gs,p_Ha,p_Ga] = ls2lp(LS,'p');
  31.     [p_Lo_R,p_Hi_R,p_Lo_D,p_Hi_D] = getNum_Filters(p_Hs,p_Gs,p_Ha,p_Ga);
  32. end
  33. switch OPTION
  34.     case 'a'
  35.         varargout = {...
  36.                 d_Lo_D,d_Hi_D,d_Lo_R,d_Hi_R, ...
  37.                 p_Lo_D,p_Hi_D,p_Lo_R,p_Hi_R, ...
  38.                 d_Ha,d_Ga,d_Hs,d_Gs, ...
  39.                 p_Ha,p_Ga,p_Hs,p_Gs,  ...
  40.             };
  41.         
  42.     case 'a_lp'
  43.         varargout = {...
  44.                 d_Ha,d_Ga,d_Hs,d_Gs, ...
  45.                 p_Ha,p_Ga,p_Hs,p_Gs};
  46.                     
  47.     case 'a_num'
  48.         varargout = {...
  49.                 d_Lo_D,d_Hi_D,d_Lo_R,d_Hi_R, ...
  50.                 p_Lo_D,p_Hi_D,p_Lo_R,p_Hi_R};
  51.         
  52.     case 'd_lp'  , varargout = {d_Ha,d_Ga,d_Hs,d_Gs};
  53.     case 'd_num' , varargout = {d_Lo_D,d_Hi_D,d_Lo_R,d_Hi_R};
  54.     case 'p_lp'  , varargout = {p_Ha,p_Ga,p_Hs,p_Gs};
  55.     case 'p_num' , varargout = {p_Lo_D,p_Hi_D,p_Lo_R,p_Hi_R};
  56. end
  57. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%
  58. function [Lo_R,Hi_R,Lo_D,Hi_D] = getNum_Filters(Hs,Gs,Ha,Ga)
  59. [cfsHs,degHs] = get(Hs,'coefs','maxDEG');
  60. [cfsHa,degHa] = get(Ha,'coefs','maxDEG');
  61. [cfsGs,degGs] = get(Gs,'coefs','maxDEG');
  62. [cfsGa,degGa] = get(Ga,'coefs','maxDEG');
  63. POW_Hi_R = mod(1-degHs,2);
  64. POW_Hi_D = mod(1-degHa + length(cfsHa),2);
  65. Lo_R = cfsHs;
  66. Lo_D = wrev(cfsHa);
  67. Hi_R = (-1)^POW_Hi_R * cfsGs;
  68. Hi_D = (-1)^POW_Hi_D * wrev(cfsGa);
  69. % Lo_R = get(Hs,'coefs');
  70. % Hi_R = get(Gs,'coefs');
  71. % Lo_D = get(reflect(Ha),'coefs');
  72. % Hi_D = get(reflect(Ga),'coefs');
  73. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%