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

波变换

开发平台:

Matlab

  1. function varargout = wfilters(wname,o)
  2. %WFILTERS Wavelet filters.
  3. %   [LO_D,HI_D,LO_R,HI_R] = WFILTERS('wname') computes four
  4. %   filters associated with the orthogonal or biorthogonal
  5. %   wavelet named in the string 'wname'. 
  6. %   The four output filters are:
  7. %       LO_D, the decomposition low-pass filter
  8. %       HI_D, the decomposition high-pass filter
  9. %       LO_R, the reconstruction low-pass filter
  10. %       HI_R, the reconstruction high-pass filter
  11. %   Available wavelet names 'wname' are:
  12. %   Daubechies: 'db1' or 'haar', 'db2', ... ,'db45'
  13. %   Coiflets  : 'coif1', ... ,  'coif5'
  14. %   Symlets   : 'sym2' , ... ,  'sym8', ... ,'sym45'
  15. %   Discrete Meyer wavelet: 'dmey'
  16. %   Biorthogonal:
  17. %       'bior1.1', 'bior1.3' , 'bior1.5'
  18. %       'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8'
  19. %       'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7'
  20. %       'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8'.
  21. %   Reverse Biorthogonal: 
  22. %       'rbio1.1', 'rbio1.3' , 'rbio1.5'
  23. %       'rbio2.2', 'rbio2.4' , 'rbio2.6', 'rbio2.8'
  24. %       'rbio3.1', 'rbio3.3' , 'rbio3.5', 'rbio3.7'
  25. %       'rbio3.9', 'rbio4.4' , 'rbio5.5', 'rbio6.8'.
  26. %
  27. %   [F1,F2] = WFILTERS('wname','type') returns the following
  28. %   filters: 
  29. %   LO_D and HI_D if 'type' = 'd' (Decomposition filters)
  30. %   LO_R and HI_R if 'type' = 'r' (Reconstruction filters)
  31. %   LO_D and LO_R if 'type' = 'l' (Low-pass filters)
  32. %   HI_D and HI_R if 'type' = 'h' (High-pass filters)
  33. %
  34. %   See also BIORFILT, ORTHFILT, WAVEINFO.
  35. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  36. %   Last Revision: 22-May-2003.
  37. %   Copyright 1995-2004 The MathWorks, Inc.
  38. % $Revision: 1.12.4.2 $
  39. % Check arguments.
  40. nbIn = nargin;
  41. if nbIn < 1
  42.   error('Not enough input arguments.');
  43. end
  44. nbOut = nargout;
  45. if ~any([0 1 2 4 8]==nbOut)
  46.     error('Invalid number of output arguments.');
  47. end
  48. if errargt(mfilename,wname,'str') , error('*'), end
  49. wname         = deblankl(wname);
  50. [wtype,fname] = wavemngr('fields',wname,'type','file');
  51. mat_f         = findstr('.mat',fname);
  52. if mat_f
  53.    try
  54.      load(fname,'-mat');
  55.    catch
  56.      msg = sprintf('Invalid wavelet file : %s', fname);
  57.      errargt(mfilename,msg,'msg');
  58.      error(msg);
  59.    end
  60. end
  61. if wtype==1                % orth. wavelet
  62.     if ~isempty(mat_f)
  63.         F = eval(wname);
  64.     else
  65.         F = feval(fname,wname);
  66.     end
  67.     [Lo_D,Hi_D,Lo_R,Hi_R] = orthfilt(F);
  68. elseif wtype==2            % biorth. wavelet
  69.     if isempty(mat_f)
  70.         [Rf,Df] = feval(fname,wname);
  71.     else
  72.         if exist('Rf')~=1 | exist('Df')~=1
  73.             msg = sprintf('invalid biorthogonal wavelet file : %s', fname);
  74.             errargt(mfilename,msg,'msg');
  75.             error('*');
  76.         end
  77.     end
  78.     [Lo_D,Hi_D1,Lo_R1,Hi_R,Lo_D2,Hi_D,Lo_R,Hi_R2] = biorfilt(Df,Rf,1);
  79.     if (nbOut>4) && (nbIn<2)
  80.         varargout(5:8) = {Lo_D2,Hi_D1,Lo_R1,Hi_R2};
  81.     end
  82. else
  83.     msg = sprintf('The wavelet %s is not valid!',wname);
  84.     errargt(mfilename,msg,'msg');
  85.     error('*');
  86.     return;
  87. end
  88. if nbIn==1
  89.     varargout(1:4) = {Lo_D,Hi_D,Lo_R,Hi_R};
  90. else
  91.     o = lower(o(1));
  92.     switch o
  93.         case 'd' , varargout = {Lo_D,Hi_D};
  94.         case 'r' , varargout = {Lo_R,Hi_R};
  95.         case 'l' , varargout = {Lo_D,Lo_R};
  96.         case 'h' , varargout = {Hi_D,Hi_R};
  97.         otherwise  
  98.             errargt(mfilename,'invalid argument value','msg');
  99.             error('*');
  100.     end
  101. end