www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/biorlift.m
function LS = biorlift(wname) %BIORLIFT Biorthogonal spline lifting schemes. % LS = BIORLIFT(WNAME) returns the lifting scheme specified % by WNAME. The valid values for WNAME are: % 'bior1.1', 'bior1.3' , 'bior1.5', ... % 'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8' % 'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7' % 'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8' % % A lifting scheme LS is a N x 3 cell array such that: % for k = 1:N-1 % | LS{k,1} is the lifting "type" 'p' (primal) or 'd' (dual). % | LS{k,2} is the corresponding lifting filter. % | LS{k,3} is the higher degree of the Laurent polynomial % | corresponding to the previous filter LS{k,2}. % LS{N,1} is the primal normalization. % LS{N,2} is the dual normalization. % LS{N,3} is not used. % % For more information about lifting schemes type: lsinfo. % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 28-May-2001. % Last Revision: 03-Dec-2012. % Copyright 1995-2012 The MathWorks, Inc. kdot = find(wname=='.'); if length(kdot)~=1 error(message('Wavelet:FunctionArgVal:Invalid_ArgVal')); end lw = length(wname); Nd = wstr2num(wname(kdot+1:lw)); wname = wname(1:kdot-1); lw = length(wname); ab = abs(wname); ii = lw+1; while (ii>1) && (47<ab(ii-1)) && (ab(ii-1)<58), ii = ii-1; end Nr = wstr2num(wname(ii:lw)); if isempty(find(Nr == (1:6),1)) error(message('Wavelet:Lifting:Invalid_WavNum', Nr)); end errNAME = false; switch Nr case 1 , if isempty(find(Nd == (1:2:5),1)) , errNAME = true; end case 2 , if isempty(find(Nd == (2:2:8),1)) , errNAME = true; end case 3 , if isempty(find(Nd == (1:2:9),1)) , errNAME = true; end case 4 , if Nd ~= 4 , errNAME = true; end case 5 , if Nd ~= 5 , errNAME = true; end case 6 , if Nd ~= 8 , errNAME = true; end end if errNAME error(message('Wavelet:Lifting:Invalid_WavNum', Nd)); end switch Nr case 1 if isempty(find(Nd == (1:2:5),1)) error(message('Wavelet:Lifting:Invalid_WavNum', Nd)); end LS = {'d',-1,0}; switch Nd case 1 , LS(2,:) = {'p',1/2,0}; case 3 , LS(2,:) = {'p',[-1 8 1]/16,1}; case 5 , LS(2,:) = {'p',[3 -22 128 22 -3]/256,2}; end LS(3,:) = {sqrt(2),sqrt(2)/2,[]}; case 2 if isempty(find(Nd == (2:2:8),1)) error(message('Wavelet:Lifting:Invalid_WavNum', Nd)); end LS = {'d',[-1 -1]/2,1}; switch Nd case 2 , LS(2,:) = {'p',[1 1]/4,0}; case 4 , LS(2,:) = {'p',[-3 19 19 -3]/64,1}; case 6 , LS(2,:) = {'p',[5 -39 162 162 -39 5]/512,2}; case 8 , LS(2,:) = {'p',[-35 335 -1563 5359 5359 -1563 335 -35]/16384 ,3}; end LS(3,:) = {sqrt(2),sqrt(2)/2,[]}; case 3 if isempty(find(Nd == (1:2:9),1)) error(message('Wavelet:Lifting:Invalid_WavNum', Nd)); end LS = {'p',-1/3,-1;'d',[-3 -9]/8,1}; switch Nd case 1 , LS(3,:) = {'p',4/9,0}; case 3 , LS(3,:) = {'p',[-3 16 3]/36,1}; case 5 , LS(3,:) = {'p',[5 -34 128 34 -5]/288,2}; case 7 , LS(3,:) = {'d' [-35/9216 25/768 -421/3072 -4/9 421/3072 -25/768 35/9216] 4}; case 9 , LS(3,:) = {'d' [7/8192 -185/20729 547/12288 -938/6295 -4/9 938/6295 -547/12288 185/20729 -7/8192] 5}; end LS(4,:) = {3*sqrt(2)/2,sqrt(2)/3,[]}; case 4 %-------------------- Num LS = 11 ----------------------% % Pow MAX = 1 - diff POW = 0 %---+----+----+----+----+---% LS = {... 'd' [ -1.5861343420693648 -1.5861343420693648] 1 'p' [ 1.0796367753628087 -0.0529801185718856] 0 'd' [ -0.8829110755411875 -0.8829110755411875] 0 'p' [ 0.4435068520511142 1.5761237461483639] 2 -1.1496043988602418 -0.8698644516247808 [] }; case 5 LS = {... 'd' [ 4.9932745216378791 4.9932745216378791] 1 'p' [ -0.1833932736462213 -0.0043674455906250] 0 'd' [ 5.5857862011365809 5.5857862011365809] 0 'p' [ -3.0949380770116637 0.1732056148062267] 2 'd' [ 0.2900930732401870 0.2900930732401881] -2 'p' -3.4471695202783086 3 0.9249619350590361 1.0811255707902991 [] }; case 6 %-------------------- Num LS = 1 ----------------------% % Pow MAX = 1 - diff POW = 0 %---+----+----+----+----+---% LS = {... 'p' [ -2.6589963611977199 0.9971506910514433] 0 'd' [ 0.2735119746851613 0.2735119746851613] 0 'p' [ 3.8778221455598287 -3.2686866117960300] 2 'd' [ -0.2865032579680539 -0.2865032579680544] -2 'p' [ -0.5485941682554034 2.9417675368512870] 4 'd' [ 0.0998232169757517 -0.3438132627628235 -0.3438132627531770 0.0998232170102641] -2 0.8685786973079247 1.1513061546402219 [] }; %--------------------------------------- % LS = {... % 'd' [ -0.9971506910514433 2.6589963611977199] [1] % 'p' [ -0.2735119746851613 -0.2735119746851613] [1] % 'd' [ 3.2686866117960300 -3.8778221455598287] [-1] % 'p' [ 0.2865032579680544 0.2865032579680539] [3] % 'd' [ -2.9417675368512870 0.5485941682554034] [-3] % 'p' [ -0.0998232170102641 0.3438132627531770 0.3438132627628235 -0.0998232169757517] [5] % [ 1.1513061546402219] [ 0.8685786973079247] [] % }; %--------------------------------------- end LS = lsdual(LS);