www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wpfun.m

    function [wpws,x] = wpfun(wname,num,prec)
%WPFUN Wavelet packet functions.
%   [WPWS,X] = WPFUN('wname',NUM,PREC) computes the
%   wavelets packets for a wavelet 'wname' (see WFILTERS),
%   on dyadic intervals of length 1/2^PREC. PREC must be
%   a positive integer.
%   Output matrix WPWS contains the W functions of index
%   from 0 to NUM, stored rowwise as [W0; W1;...; Wnum].
%   Output vector X is the corresponding common X-grid 
%   vector.
%
%   [WPWS,X] = WPFUN('wname',NUM) is equivalent to
%   [WPWS,X] = WPFUN('wname',NUM,7).
%
%   See also WAVEFUN, WAVEINFO.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 14-May-2003.
%   Copyright 1995-2004 The MathWorks, Inc.

if nargin<3 , prec = 7; end
[hr,gr] = wfilters(wname,'r');
NBP = 2^prec;
N   = fix(length(hr)/2);
NBVal = (2*N-1)*NBP;
phi = wavefun(wname,prec);

dd  = NBVal-length(phi);
if dd<0
    phi = wkeep1(phi,NBVal);
elseif dd>0
    phi = [zeros(1,floor(dd/2)) phi zeros(1,ceil(dd/2))];
end
wpws      = zeros(num+1,NBVal);
wpws(1,:) = phi;
lg = 2*NBP*N;
F  = zeros(2,lg);
F(1,1:NBP:lg) = hr;
F(2,1:NBP:lg) = gr;
for k=1:num
    m = fix(k/2);
    Wm   = wpws(m+1,:);
    indF = rem(k,2)+1;
    tmp  = wconv1(Wm,F(indF,:));
    tmp  = tmp(2:2:end);
    wpws(k+1,:) = sqrt(2)*tmp(1:NBVal);
end

%---------------------- Another Algorithm ------------------%
% ip  = NBP*[0:2*N-1];
% for k=1:num
%     m  = fix(k/2);
%     Wm = wpws(m+1,:);
%     W  = zeros(1,NBVal);
%     if rem(k,2)==0 , fr = hr; else fr = gr; end
%     ind = -ip;
%     for j = 1:NBVal
%     ind  = ind+2;
%     i_p  = find(ind>0 & ind<=NBVal);
%     W(j) = sum(fr(i_p).*Wm(ind(i_p)));
%     end
%     wpws(k+1,:)  = sqrt(2)*W;
% end
%-----------------------------------------------------------%

wpws = [zeros(num+1,1) wpws zeros(num+1,1)];
x    = linspace(0,2*N-1,NBVal+2);