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

波变换

开发平台:

Matlab

  1. function LS = biorlift(wname)
  2. %BIORLIFT Biorthogonal spline lifting schemes.
  3. %   LS = BIORLIFT(WNAME) returns the lifting scheme specified 
  4. %   by WNAME. The valid values for WNAME are:
  5. %       'bior1.1', 'bior1.3' , 'bior1.5', ...
  6. %       'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8'
  7. %       'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7' 
  8. %       'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8' 
  9. %
  10. %   A lifting scheme LS is a N x 3 cell array such that:
  11. %     for k = 1:N-1
  12. %       | LS{k,1} is the lifting "type" 'p' (primal) or 'd' (dual).
  13. %       | LS{k,2} is the corresponding lifting filter.
  14. %       | LS{k,3} is the higher degree of the Laurent polynomial
  15. %       |         corresponding to the previous filter LS{k,2}.
  16. %     LS{N,1} is the primal normalization.
  17. %     LS{N,2} is the dual normalization.
  18. %     LS{N,3} is not used.
  19. %
  20. %   For more information about lifting schemes type: lsinfo.
  21. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 28-May-2001.
  22. %   Last Revision: 16-Jul-2003.
  23. %   Copyright 1995-2004 The MathWorks, Inc.
  24. %   $Revision: 1.1.6.2 $ $Date: 2004/03/15 22:39:40 $ 
  25. kdot = find(wname=='.');
  26. if length(kdot)~=1 , error('*'); end
  27. lw = length(wname);
  28. Nd = wstr2num(wname(kdot+1:lw));
  29. wname = wname(1:kdot-1);
  30. lw = length(wname);
  31. ab = abs(wname);
  32. ii = lw+1;
  33. while (ii>1) & (47<ab(ii-1)) & (ab(ii-1)<58), ii = ii-1; end
  34. Nr = wstr2num(wname(ii:lw));
  35. if isempty(find(Nr == [1:6])) 
  36.     error('Invalid wavelet number.')
  37. end
  38. errNAME = false;
  39. switch Nr
  40.   case 1 , if isempty(find(Nd == [1:2:5])) , errNAME = true; end
  41.   case 2 , if isempty(find(Nd == [2:2:8])) , errNAME = true; end
  42.   case 3 , if isempty(find(Nd == [1:2:9])) , errNAME = true; end
  43.   case 4 , if Nd ~= 4 , errNAME = true; end
  44.   case 5 , if Nd ~= 5 , errNAME = true; end
  45.   case 6 , if Nd ~= 8 , errNAME = true; end      
  46. end
  47. if errNAME
  48.     error('Invalid wavelet number.')
  49. end
  50. switch Nr
  51.   case 1
  52.     if isempty(find(Nd == [1:2:5]))
  53.         error('Invalid wavelet number.')
  54.     end
  55.     LS = {'d',[-1],0};
  56.     switch Nd
  57.       case 1 , LS(2,:) = {'p',[1/2],0};
  58.       case 3 , LS(2,:) = {'p',[-1 8 1]/16,1};
  59.       case 5 , LS(2,:) = {'p',[3 -22 128 22 -3]/256,2};
  60.     end
  61.     LS(3,:) = {sqrt(2),sqrt(2)/2,[]};   
  62.   case 2
  63.     if isempty(find(Nd == [2:2:8]))
  64.         error('Invalid wavelet number.')
  65.     end
  66.     LS = {'d',[-1 -1]/2,1};
  67.     switch Nd
  68.       case 2 , LS(2,:) = {'p',[1 1]/4,0};
  69.       case 4 , LS(2,:) = {'p',[-3 19 19 -3]/64,1};
  70.       case 6 , LS(2,:) = {'p',[5 -39 162 162 -39 5]/512,2};
  71.       case 8 , LS(2,:) = {'p',[-35  335  -1563  5359  5359  -1563  335  -35]/16384 ,3}; 
  72.     end
  73.     LS(3,:) = {sqrt(2),sqrt(2)/2,[]};
  74.   case 3
  75.     if isempty(find(Nd == [1:2:9]))
  76.         error('Invalid wavelet number.')
  77.     end
  78.     LS = {'p',[-1/3],-1;'d',[-3 -9]/8,1};
  79.     switch Nd
  80.       case 1 , LS(3,:) = {'p',[4/9],0};
  81.       case 3 , LS(3,:) = {'p',[-3 16 3]/36,1};
  82.       case 5 , LS(3,:) = {'p',[5 -34 128 34 -5]/288,2};
  83.       case 7 , LS(3,:) = {'d'  [-35/9216  25/768  -421/3072  -4/9  421/3072  -25/768  35/9216]  [4]}; 
  84.       case 9 , LS(3,:) = {'d'  [7/8192  -185/20729  547/12288  -938/6295  -4/9  938/6295  -547/12288  185/20729  -7/8192]  [5]};
  85.     end
  86.     LS(4,:) = {3*sqrt(2)/2,sqrt(2)/3,[]};
  87.   case 4
  88. %--------------------  Num LS = 11  ----------------------% 
  89. % Pow MAX = 1 - diff POW = 0
  90. %---+----+----+----+----+---%
  91. LS = {...                                                                
  92. 'd'                     [ -1.5861343420693648 -1.5861343420693648]  [1]  
  93. 'p'                     [  1.0796367753628087 -0.0529801185718856]  [0]  
  94. 'd'                     [ -0.8829110755411875 -0.8829110755411875]  [0]  
  95. 'p'                     [  0.4435068520511142  1.5761237461483639]  [2]  
  96. [ -1.1496043988602418]  [ -0.8698644516247808]                      []   
  97. };                                                                       
  98.   case 5
  99. LS = {...                                                                 
  100. 'd'                     [  4.9932745216378791  4.9932745216378791]  [1]   
  101. 'p'                     [ -0.1833932736462213 -0.0043674455906250]  [0]   
  102. 'd'                     [  5.5857862011365809  5.5857862011365809]  [0]   
  103. 'p'                     [ -3.0949380770116637  0.1732056148062267]  [2]   
  104. 'd'                     [  0.2900930732401870  0.2900930732401881]  [-2]  
  105. 'p'                     [ -3.4471695202783086]                      [3]   
  106. [  0.9249619350590361]  [  1.0811255707902991]                      []    
  107. };                                                                        
  108.     
  109.    case 6
  110. %--------------------  Num LS = 1  ----------------------% 
  111. % Pow MAX = 1 - diff POW = 0
  112. %---+----+----+----+----+---%
  113. LS = {...                                                                                                         
  114. 'p'                     [ -2.6589963611977199  0.9971506910514433]                                          [0]   
  115. 'd'                     [  0.2735119746851613  0.2735119746851613]                                          [0]   
  116. 'p'                     [  3.8778221455598287 -3.2686866117960300]                                          [2]   
  117. 'd'                     [ -0.2865032579680539 -0.2865032579680544]                                          [-2]  
  118. 'p'                     [ -0.5485941682554034  2.9417675368512870]                                          [4]   
  119. 'd'                     [  0.0998232169757517 -0.3438132627628235 -0.3438132627531770  0.0998232170102641]  [-2]  
  120. [  0.8685786973079247]  [  1.1513061546402219]                                                              []    
  121. };
  122.     %---------------------------------------
  123. % LS = {...                                                                                                         
  124. % 'd'                     [ -0.9971506910514433  2.6589963611977199]                                          [1]   
  125. % 'p'                     [ -0.2735119746851613 -0.2735119746851613]                                          [1]   
  126. % 'd'                     [  3.2686866117960300 -3.8778221455598287]                                          [-1]  
  127. % 'p'                     [  0.2865032579680544  0.2865032579680539]                                          [3]   
  128. % 'd'                     [ -2.9417675368512870  0.5485941682554034]                                          [-3]  
  129. % 'p'                     [ -0.0998232170102641  0.3438132627531770  0.3438132627628235 -0.0998232169757517]  [5]   
  130. % [  1.1513061546402219]  [  0.8685786973079247]                                                              []    
  131. % };                                                                                                                
  132.     %---------------------------------------
  133.     
  134. end