idwtlevel1

PURPOSE ^

idwtlevel1.m

SYNOPSIS ^

function x = idwtlevel1(w, g0, g1, sym)

DESCRIPTION ^

 idwtlevel1.m

 Inverse of one level of the discrete wavelet transform (dwtlevel1).

 Written by : Justin Romberg
 Created : 5/1/2001

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % idwtlevel1.m
0002 %
0003 % Inverse of one level of the discrete wavelet transform (dwtlevel1).
0004 %
0005 % Written by : Justin Romberg
0006 % Created : 5/1/2001
0007 
0008 function x = idwtlevel1(w, g0, g1, sym)
0009 
0010 if (nargin == 3), sym = 0; end
0011 
0012 N = length(w);
0013 m0 = length(g0);
0014 m1 = length(g1);
0015 
0016 if (m0 ~= m1)
0017   error('Use biorfilt to create filters');
0018 end
0019 
0020 
0021 % NEED TO FIX THIS SO IT WORKS LIKE BIORFILT()
0022 % if the filters are uneven lengths, zero pad them
0023 %if (m0 > m1)
0024 %  g1 = [zeros(1,(m0-m1)/2) g1 zeros(1,(m0-m1)/2)];
0025 %  m1 = length(g1);
0026 %elseif (m1 > m0)
0027 %  g0 = [zeros(1,(m1-m0)/2) g0 zeros(1,(m1-m0)/2)];
0028 %  m0 = length(g0);
0029 %end
0030 
0031 % center on the middle of the wavelet filter
0032 % odd length - hole at (m1-1)/2
0033 % even length - hole at m1/2
0034 k = floor(m1/2)-1;
0035 if (sym == 0)
0036   % upsample
0037   c0 = reshape([w(1:N/2); zeros(1,N/2)], [1 N]);
0038   c1 = reshape([w(N/2+1:N); zeros(1,N/2)], [1 N]);
0039   x = cconv(c0, g0, k) + cconv(c1, g1, k);
0040 elseif (sym == 1)
0041   k = floor(m1/2);
0042   % symmetrically extend
0043   c0e = symext(w(1:N/2), k, m1-1-k, 'oe', 's');
0044   c1e = symext(w(N/2+1:N), k, m1-1-k, 'eo', 's');
0045   % upsample
0046   c0 = reshape([c0e; zeros(1,N/2+m1-1)], [1 N+2*(m1-1)]);
0047   c1 = reshape([c1e; zeros(1,N/2+m1-1)], [1 N+2*(m1-1)]);
0048   % filter
0049   x = conv2(c0(k+1:N+k+m0-1), g0, 'valid') + ...
0050       conv2(c1(k+1:N+k+m0-1), g1, 'valid');
0051 elseif (sym == 2) 
0052   % symmetrically extend
0053   c0e = symext(w(1:N/2), m1-1-k, k, 'e', 's');
0054   c1e = symext(w(N/2+1:N), m1-1-k, k, 'e', 'a');
0055   % upsample
0056   c0 = reshape([c0e; zeros(1,N/2+m1-1)], [1 N+2*(m1-1)]);
0057   c1 = reshape([c1e; zeros(1,N/2+m1-1)], [1 N+2*(m1-1)]);
0058   % filter
0059   x = conv2(c0(m0-k:2*(m1-1)-k+N), g0, 'valid') + ...
0060       conv2(c1(m0-k:2*(m1-1)-k+N), g1, 'valid');
0061 elseif (sym == 3)
0062   % linear filtering (no extension)
0063   c0 = reshape([w(1:length(w)/2); zeros(1,length(w)/2)], [1 length(w)]);
0064   c1 = reshape([w(length(w)/2+1:end); zeros(1,length(w)/2)], [1 length(w)]);
0065   x = conv(c0, g0) + conv(c1, g1);
0066 end
0067

Generated on Mon 10-Jun-2013 23:03:23 by m2html © 2005