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

    function x = recons(t,node,x,sizes,edges)
%RECONS Reconstruct wavelet coefficients.
%   Y = RECONS(T,N,X,S,E) reconstructs the 
%   wavelet packet coefficients X associated with the node N
%   of the wavelet tree T, using sizes S and the edges values E.
%   S contains the size of data associated with
%   each ascendant of N.
%   The children of a node F are numbered from left 
%   to right: [0, ... , ORDER-1].
%   The edge value between F and a child C is the child number.
%
%   This method overloads the DTREE method.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi  12-Feb-2003.
%   Last Revision: 21-Dec-2006.
%   Copyright 1995-2004 The MathWorks, Inc.

[order,typeWT] = get(t,'order','typeWT');
nb_up = length(edges);
switch typeWT
    case {'dwt','wpt'}
        [shift,extMode,Lo_R,Hi_R] = get(t,'shift','extMode','Lo_R','Hi_R');
        f = zeros(nb_up,length(Lo_R));
        switch order
            case 2
                K = find(edges==0);
                if ~isempty(K) , f(K,:) = Lo_R(ones(size(K)),:); end
                K = find(edges==1);
                if ~isempty(K) , f(K,:) = Hi_R(ones(size(K)),:); end
                for k=1:nb_up
                    s = max(sizes(k,:));
                    x = upsconv1(x,f(k,:),s,extMode,shift);
                end
                
            case 4
                dwtATTR = struct('extMode',extMode,...
                    'shift1D',shift,'shift2D',shift);
                g = f;
                K = find(edges==0);
                if ~isempty(K)
                    f(K,:) = Lo_R(ones(size(K)),:);
                    g(K,:) = Lo_R(ones(size(K)),:);
                end
                K = find(edges==1);
                if ~isempty(K)
                    f(K,:) = Hi_R(ones(size(K)),:);
                    g(K,:) = Lo_R(ones(size(K)),:);
                end
                K = find(edges==2);
                if ~isempty(K)
                    f(K,:) = Lo_R(ones(size(K)),:);
                    g(K,:) = Hi_R(ones(size(K)),:);
                end
                K = find(edges==3);
                if ~isempty(K)
                    f(K,:) = Hi_R(ones(size(K)),:);
                    g(K,:) = Hi_R(ones(size(K)),:);
                end
                for k=1:nb_up
                    x = upsconv2(x,{f(k,:),g(k,:)},sizes(k,:),dwtATTR);                    
                end
        end
            
    case {'lwt','lwpt'} %%%   #### Under Development ####
        switch order
            case 2 ,
            case 4 ,
        end        
end