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

波变换

开发平台:

Matlab

  1. function [Rf,Df] = biorwavf(wname)
  2. %BIORWAVF Biorthogonal spline wavelet filters.
  3. %   [RF,DF] = BIORWAVF(W) returns two scaling filters
  4. %   associated with the biorthogonal wavelet specified
  5. %   by the string W.
  6. %   W = 'biorNr.Nd' where possible values for Nr and Nd are:
  7. %       Nr = 1  Nd = 1 , 3 or 5
  8. %       Nr = 2  Nd = 2 , 4 , 6 or 8
  9. %       Nr = 3  Nd = 1 , 3 , 5 , 7 or 9
  10. %       Nr = 4  Nd = 4
  11. %       Nr = 5  Nd = 5
  12. %       Nr = 6  Nd = 8
  13. %   The output arguments are filters:
  14. %   RF is the reconstruction filter
  15. %   DF is the decomposition filter
  16. %
  17. %   See also BIORFILT, WAVEINFO.
  18. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  19. %   Last Revision: 12-Nov-2003.
  20. %   Copyright 1995-2004 The MathWorks, Inc.
  21. % $Revision: 1.11.4.2 $
  22. % Check arguments.
  23. %-----------------
  24. kdot = find(wname=='.');
  25. if length(kdot)~=1 , error('*'); end
  26. lw = length(wname);
  27. Nd = wstr2num(wname(kdot+1:lw));
  28. wname = wname(1:kdot-1);
  29. lw = length(wname);
  30. ab = abs(wname);
  31. ii = lw+1;
  32. while (ii>1) && (47<ab(ii-1)) && (ab(ii-1)<58), ii = ii-1; end
  33. Nr = wstr2num(wname(ii:lw));
  34. if isempty(find(Nr == [1:5 6])) , error('*'), end
  35. switch Nr
  36.   case 1 , if isempty(find(Nd == [1:2:5])) , error('*'), end
  37.   case 2 , if isempty(find(Nd == [2:2:8])) , error('*'), end
  38.   case 3 , if isempty(find(Nd == [1:2:9])) , error('*'), end
  39.   case 4 , if Nd ~= 4 , error('*'), end
  40.   case 5 , if Nd ~= 5 , error('*'), end
  41.   case 6 , if Nd ~= 8 , error('*'), end
  42. end
  43. switch Nr
  44.   case 1
  45.     Rf = [1/2];
  46.     if Nd == 1
  47.        Df = [1/2];
  48.     elseif Nd == 3
  49.        Df = [-1/16 1/16 1/2];
  50.     elseif Nd == 5
  51.        Df = [3/256 -3/256 -11/128 11/128 1/2];
  52.     end
  53.     Rf = [Rf fliplr(Rf)];
  54.     Df = [Df fliplr(Df)];
  55.   case 2
  56.     Rf = [1/4 1/2 1/4];
  57.     if Nd == 2
  58.        Df = [-1/8 1/4];
  59.        Df = [Df 3/4 fliplr(Df)];
  60.     elseif Nd == 4
  61.        Df = [3/128 -3/64 -1/8 19/64];
  62.        Df = [Df 45/64 fliplr(Df)];
  63.     elseif Nd == 6
  64.        Df = [-5/1024 5/512 17/512 -39/512 -123/1024 81/256];
  65.        Df = [Df 175/256 fliplr(Df)];
  66.     elseif Nd == 8
  67.        Df = [35 -70 -300 670 1228 -3126 -3796 10718];
  68.        Df = [Df 22050 fliplr(Df)]/(2^15);
  69.     end
  70.   case 3
  71.     Rf = [1 3]/8;
  72.     if Nd == 1
  73.        Df = [-1 3]/4;
  74.     elseif Nd == 3
  75.        Df = [3 -9 -7 45]/64;
  76.     elseif Nd == 5
  77.        Df = [-5 15 19 -97 -26 350]/512;
  78.     elseif Nd == 7
  79.        Df = [35 -105 -195 865 363 -3489 -307 11025]/(2^14);
  80.     elseif Nd == 9
  81.        Df = [-63 189 469 -1911 -1308 9188 1140 -29676 190 87318]/(2^17);
  82.     end
  83.     Rf = [Rf fliplr(Rf)];
  84.     Df = [Df fliplr(Df)];
  85.   case 4
  86.     if Nd == 4
  87.        Rf = [-.045635881557,-.028771763114,.295635881557];
  88.        Rf = [Rf .557543526229 fliplr(Rf)];
  89.        Df = [.026748757411,-.016864118443,-.078223266529,.266864118443];
  90.        Df = [Df .602949018236 fliplr(Df)];
  91.     end
  92.   case 5
  93.     if Nd == 5
  94.        Rf = [.009515330511,-.001905629356,-.096666153049,...
  95.                                  -.066117805605,.337150822538];
  96.        Rf = [Rf .636046869922 fliplr(Rf)];
  97.        Df = [.028063009296,.005620161515,-.038511714155,.244379838485];
  98.        Df = [Df .520897409718 fliplr(Df)];
  99.     end
  100.   case 6
  101.     if Nd == 8
  102.        Rf = [...
  103.            -0.01020092218704  ...
  104.            -0.01023007081937  0.05566486077996  0.02854447171515  -0.29546393859292 ...
  105.                  ];
  106.        Rf = [Rf -0.53662880179157 fliplr(Rf)];
  107.        Df = [...
  108.             0.00134974786501 -0.00135360470301 -0.01201419666708   0.00843901203981 ...
  109.             0.03516647330654 -0.05463331368252 -0.06650990062484   0.29754790634571 ...
  110.                  ];
  111.        Df = [Df 0.58401575224075 fliplr(Df)];
  112.        % Df = -Df; % === Modification (July 2003) see WAVE2LP ===
  113.     end
  114. end