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

波变换

开发平台:

Matlab

  1. function [wpws,x] = wpfun(wname,num,prec)
  2. %WPFUN Wavelet packet functions.
  3. %   [WPWS,X] = WPFUN('wname',NUM,PREC) computes the
  4. %   wavelets packets for a wavelet 'wname' (see WFILTERS),
  5. %   on dyadic intervals of length 1/2^PREC. PREC must be
  6. %   a positive integer.
  7. %   Output matrix WPWS contains the W functions of index
  8. %   from 0 to NUM, stored rowwise as [W0; W1;...; Wnum].
  9. %   Output vector X is the corresponding common X-grid 
  10. %   vector.
  11. %
  12. %   [WPWS,X] = WPFUN('wname',NUM) is equivalent to
  13. %   [WPWS,X] = WPFUN('wname',NUM,7).
  14. %
  15. %   See also WAVEFUN, WAVEINFO.
  16. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  17. %   Last Revision: 14-May-2003.
  18. %   Copyright 1995-2004 The MathWorks, Inc.
  19. % $Revision: 1.11.4.2 $
  20. if nargin<3 , prec = 7; end
  21. [hr,gr] = wfilters(wname,'r');
  22. NBP = 2^prec;
  23. N   = fix(length(hr)/2);
  24. NBVal = (2*N-1)*NBP;
  25. phi = wavefun(wname,prec);
  26. dd  = NBVal-length(phi);
  27. if dd<0
  28.     phi = wkeep1(phi,NBVal);
  29. elseif dd>0
  30.     phi = [zeros(1,floor(dd/2)) phi zeros(1,ceil(dd/2))];
  31. end
  32. wpws      = zeros(num+1,NBVal);
  33. wpws(1,:) = phi;
  34. lg = 2*NBP*N;
  35. F  = zeros(2,lg);
  36. F(1,1:NBP:lg) = hr;
  37. F(2,1:NBP:lg) = gr;
  38. for k=1:num
  39.     m = fix(k/2);
  40.     Wm   = wpws(m+1,:);
  41.     indF = rem(k,2)+1;
  42.     tmp  = wconv1(Wm,F(indF,:));
  43.     tmp  = tmp(2:2:end);
  44.     wpws(k+1,:) = sqrt(2)*tmp(1:NBVal);
  45. end
  46. %---------------------- Another Algorithm ------------------%
  47. % ip  = NBP*[0:2*N-1];
  48. % for k=1:num
  49. %     m  = fix(k/2);
  50. %     Wm = wpws(m+1,:);
  51. %     W  = zeros(1,NBVal);
  52. %     if rem(k,2)==0 , fr = hr; else fr = gr; end
  53. %     ind = -ip;
  54. %     for j = 1:NBVal
  55. %     ind  = ind+2;
  56. %     i_p  = find(ind>0 & ind<=NBVal);
  57. %     W(j) = sum(fr(i_p).*Wm(ind(i_p)));
  58. %     end
  59. %     wpws(k+1,:)  = sqrt(2)*W;
  60. % end
  61. %-----------------------------------------------------------%
  62. wpws = [zeros(num+1,1) wpws zeros(num+1,1)];
  63. x    = linspace(0,2*N-1,NBVal+2);