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

波变换

开发平台:

Matlab

  1. function F = lemwavf(wname)
  2. %LEMWAVF Lemarie wavelet filters.
  3. %   F = LEMWAVF(W) returns the scaling filter
  4. %   associated with Lemarie wavelet specified
  5. %   by the string W, where W = 'lemN'.
  6. %   Possible values for N are:
  7. %          N = 1, 2, 3, 4 or 5.
  8. %   N.B:
  9. %      Using the MATLAB Extended Symbolic Toolbox
  10. %      possible values of N are positive integers.
  11. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  12. %   Last Revision: 22-May-2003.
  13. %   Copyright 1995-2004 The MathWorks, Inc.
  14. %   $Revision: 1.14.4.2 $ $Date: 2004/03/15 22:37:24 $
  15. if ischar(wname) && ~isempty(wname)
  16.         lw = length(wname); ab = abs(wname);
  17.         ii = lw+1; 
  18.         while (47<ab(ii-1)) && (ab(ii-1)<58) , ii = ii-1; end
  19.         num = wstr2num(wname(ii:lw));
  20. else
  21.         num = wname;
  22. end
  23. if isempty(num) || any(num < 1) || any(num ~= fix(num))
  24.         error('*** Invalid wavelet number ! ***');
  25. end
  26. switch num
  27.     case 1
  28. F = [...
  29.    0.46069299844871   0.53391629051346   0.03930700681965  -0.03391629578182 ...
  30. ];
  31.     case 2
  32. F = [...
  33.    0.31555164655258   0.59149765057882   0.20045477817080  -0.10034811856888 ...
  34.   -0.01528128420694   0.00846362066021  -0.00072514051618   0.00038684732960 ...
  35.         ];
  36.     case 3
  37. F = [...
  38.    0.23108942231941   0.56838231367966   0.33173980738190  -0.09447000132310 ...
  39.   -0.06203683305244   0.02661631105889  -0.00209952890579   0.00001769381066 ...
  40.    0.00128429679795  -0.00053703458679   0.00002283826072  -0.00000928544107 ...
  41.         ];
  42.     case 4
  43. F = [...
  44.    0.17565337503255   0.52257484913870   0.42429244721660  -0.04601056550580 ...
  45.   -0.11292720306517   0.03198741803409   0.00813124691980  -0.00743764392677 ...
  46.    0.00548090619143  -0.00140066128481  -0.00054200083128   0.00025607264164 ...
  47.   -0.00008795126642   0.00003025515674  -0.00000082014466   0.00000027569334 ...
  48.         ];
  49.     case 5
  50. F = [...
  51.    0.13807658847623   0.47310642622099   0.48217097800239   0.02112933622031 ...
  52.   -0.15081998732499   0.01935767268926   0.02716532750995  -0.01588522540421 ...
  53.    0.00671209165995   0.00120022744496  -0.00321203819186   0.00115266788547 ...
  54.   -0.00018266213413  -0.00002953360842   0.00008433396295  -0.00002997969339 ...
  55.    0.00000534552866  -0.00000159098026   0.00000003069431  -0.00000000895816 ...
  56.         ];
  57.     otherwise
  58.         % compute bernstein polynomial of order 4*num-1.
  59.         % requires the Extended Symbolic Toolbox.
  60.         if ~exist('maple')
  61.                 msg = '*** The Extended Symbolic Toolbox is required ***';
  62.                 error(msg);
  63.         end
  64.         order = 4*num-1;
  65.         mpa('ord',order);
  66.         maple('readlib(bernstein):');
  67.         maple('f:=proc(t) if t<1/4 then 0 else if t >3/4 then 1 else 2*t-1/2 fi fi end:');
  68.         cfs = maple('bernstein(ord,f,(1+x)/2);');
  69.         ber = sym2poly(cfs);
  70.         r = roots(ber);
  71.         v = r-sqrt(r.^2-1);
  72.         ind = find(abs(v)>1);
  73.         if ~isempty(ind)
  74.             v(ind)=ones(size(ind))./v(ind);
  75.         end
  76.         F = real(poly(v));
  77.         F = F/sum(F);
  78. end