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

波变换

开发平台:

Matlab

  1. function LS = cdflift(wname)
  2. %CDFLIFT Cohen-Daubechies-Feauveau lifting schemes.
  3. %   LS = CDFLIFT(WNAME) returns the lifting scheme specified
  4. %   by WNAME. The valid values for WNAME are:
  5. %    'cdf1.1', 'cdf1.3', 'cdf1.5' - 'cdf2.2', 'cdf2.4', 'cdf2.6'
  6. %    'cdf3.1', 'cdf3.3', 'cdf3.5' - 'cdf4.2', 'cdf4.4', 'cdf4.6'
  7. %    'cdf5.1', 'cdf5.3', 'cdf5.5' - 'cdf6.2', 'cdf6.4', 'cdf6.6'
  8. %
  9. %   A lifting scheme LS is a N x 3 cell array such that:
  10. %     for k = 1:N-1
  11. %       | LS{k,1} is the lifting "type" 'p' (primal) or 'd' (dual).
  12. %       | LS{k,2} is the corresponding lifting filter.
  13. %       | LS{k,3} is the higher degree of the Laurent polynomial
  14. %       |         corresponding to the previous filter LS{k,2}.
  15. %     LS{N,1} is the primal normalization.
  16. %     LS{N,2} is the dual normalization.
  17. %     LS{N,3} is not used.
  18. %
  19. %   For more information about lifting schemes type: lsinfo.
  20. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 05-Feb-2000.
  21. %   Last Revision: 30-Jun-2003.
  22. %   Copyright 1995-2004 The MathWorks, Inc.
  23. %   $Revision: 1.1.6.2 $ $Date: 2004/03/15 22:39:47 $ 
  24. wname = wname(4:end);
  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:5 6])) , error('*'), end
  36. switch Nr
  37.   case 1
  38.     if isempty(find(Nd == [1:2:5]))
  39.         error('Invalid wavelet number.')
  40.     end
  41.     LS = {'d',[-1],0};
  42.     switch Nd
  43.       case 1 , LS(2,:) = {'p',[1/2],0};
  44.       case 3 , LS(2,:) = {'p',[-1 8 1]/16,1};
  45.       case 5 , LS(2,:) = {'p',[3 -22 128 22 -3]/256,2};
  46.     end
  47.     LS(3,:) = {sqrt(2),sqrt(2)/2,[]};   
  48.   case 2
  49.     if isempty(find(Nd == [2:2:6]))
  50.         error('Invalid wavelet number.')
  51.     end
  52.     LS = {'d',[-1 -1]/2,1};
  53.     switch Nd
  54.       case 2 , LS(2,:) = {'p',[1 1]/4,0};
  55.       case 4 , LS(2,:) = {'p',[-3 19 19 -3]/64,1};
  56.       case 6 , LS(2,:) = {'p',[5 -39 162 162 -39 5]/512,2};
  57.     end
  58.     LS(3,:) = {sqrt(2),sqrt(2)/2,[]};
  59.   case 3
  60.     if isempty(find(Nd == [1:2:5]))
  61.         error('Invalid wavelet number.')
  62.     end
  63.     LS = {'p',[-1/3],-1;'d',[-3 -9]/8,1};
  64.     switch Nd
  65.       case 1 , LS(end+1,:) = {'p',[4/9],0};
  66.       case 3 , LS(end+1,:) = {'p',[-3 16 3]/36,1};
  67.       case 5 , LS(end+1,:) = {'p',[5 -34 128 34 -5]/288,2};
  68.     end
  69.     LS(end+1,:) = {3*sqrt(2)/2,sqrt(2)/3,[]};
  70.   case 4
  71.     if isempty(find(Nd == [2:2:6])) , error('*'), end
  72.     LS = {'p',[-1 -1]/4,0;'d',[-1 -1],1};
  73.     switch Nd
  74.       case 2 , LS(end+1,:) = {'p',[3 3]/16,0};
  75.       case 4 , LS(end+1,:) = {'p',[-5 29 29 -5]/128,1};
  76.       case 6 , LS(end+1,:) = {'p',[35 -265 998 998 -265 35]/4096,2};
  77.     end
  78.     LS(end+1,:) = {2*sqrt(2),sqrt(2)/4,[]};
  79.   case 5
  80.     if isempty(find(Nd == [1:2:5])) , error('*'), end
  81.     LS = {'d',[-1/5],0;'p',[-5 -15]/24,0;'d',[-9 -15]/10,1};
  82.     switch Nd
  83.       case 1 , LS(end+1,:) = {'p',[1/3],0};
  84.       case 3 , LS(end+1,:) = {'p',[-5 24 -5]/72,1};
  85.       case 5 , LS(end+1,:) = {'p',[35 -230 768 230 -35]/2304,2};
  86.     end
  87.     LS(end+1,:) = {3*sqrt(2),sqrt(2)/6,[]};
  88.   case 6
  89.     if isempty(find(Nd == [2:2:6])) , error('*'), end
  90.     LS = {'d',[-1 -1]/6,1;'p',[-9 -9]/16,0;'d',[-4 -4]/3,1};
  91.     switch Nd
  92.       case 2 , LS(end+1,:) = {'p',[5 5]/32,0};
  93.       case 4 , LS(end+1,:) = {'p',[-35 195 195 -35]/1024,1} ;
  94.       case 6 , LS(end+1,:) = {'p',[63 -469 1686 1686 -469 63]/8192,2};
  95.     end
  96.     LS(end+1,:) = {4*sqrt(2),sqrt(2)/8,[]};
  97. end