www.pudn.com > whmt1.rar > Iidwt.m


function y = Iidwt(w,h,L);
% y = Iidwt(w,h,L);
%
% Discrete Orthogonal Wavelet Transform Inverse
%
% Input
%   w : dwt coefficients
%   h : lowpass filter
%   L : number of levels (2^L must divide length(w))
%
% Example
%   h = daubcqf(6);
%   x = makesig('Doppler',64);
%   w = Idwt(x,h,4);
%   y = Iidwt(w,h,4);
%   x - y

% recursive program

h0 = h;
h1 = makeh1(h0);
n = length(h0);
wlen = length(w);

if L > 1
   w = [Iidwt(w(1:wlen/2),h,L-1) w(wlen/2+1:wlen)];
end

   % get lowpass part and highpass part
   lo = w(1:wlen/2);
   hi = w(wlen/2+1:wlen);

   % upsample
   lo = up(lo,2);
   hi = up(hi,2);

   % create cyclic extensions
   lo = [zeros(1,n-1), lo];
   hi = [zeros(1,n-1), hi];
   for k = n-1:-1:1
      lo(k) = lo(k+wlen);
      hi(k) = hi(k+wlen);
   end

   % linear convolution
   lo = conv(lo,h0);
   hi = conv(hi,h1);

   % extract periodic part
   lo = lo(n:n+wlen-1);
   hi = hi(n:n+wlen-1);

   y = lo + hi;