# Multiresolution discrete wavelet transforms: First steps

I have been looking at trying to use wavelets for multichannel audio dynamic range processor. I am in the very early stages of trying to get decomposition and reconstruction working. In this thesis, it is suggested that a multiresolution dwt can be calculated using a tree of complementary filters. Being a hands-on person, I decided to jump straight in with the following Matlab code . . .

n = 31;
flipVec = [repmat([1 -1],1,floor(n/2)) 1];

% Get analysis and reconstruction filter weights using order and sign flips
bH0 = fir1(n-1,0.5);
bH1 = fliplr(bH0).*flipVec;
bF0 = fliplr(bH0);
bF1 = fliplr(bH1);

x = [1; zeros(1023,1)];

y0 = fftfilt(bH0, x);
y1 = fftfilt(bH1, x);

%skip stright to adding zeros every other sample
y0(1:2:end) = 0;
y1(1:2:end) = 0;

y2 = fftfilt(bH0, y0);
y3 = fftfilt(bH1, y0);

%skip stright to adding zeros every other sample
y2(1:2:end) = 0;
y3(1:2:end) = 0;

% =============
% RECONSTRUCT
% y0 = 2*fftfilt(bF0, y2) + 2*fftfilt(bF1, y3);
z = 2*fftfilt(bF0, y0) + 2*fftfilt(bF1, y1);

figure; freqz(z,1)
figure; plot(z)


If I try to go deeper than the first level of the tree (by uncommenting the line towards the end of the snippet), I no longer get perfect reconstruction. This makes sense to me as the signal down the left-side of the tree has gone through more processing stages, so it has greater delay relative to the signals processed by the right-side of the tree. I'm obviously not using the correct type of filter, or am fundamentally misunderstanding the examples available online. A nudge in the right direction, or basic code example would be great help.