Hello everyone, I have a question related to the DWT. I'm trying to understand how it works using the well-known 5/3 wavelet. I found some code examples online implementing it but the most of them utilize the so-called lifting algorithm. But the main point of my interest is to understand the generalized decomposition/recomposition scheme. I succeded on performing the analysis comparing both the lifting and convolution approaches on the following input signal: z[8] = {130, 29, 96, 3, -15, 12, -25, 9}; I perform the decomposition using the following filter set: H0(z) = {-1, 2, 6, 2, -1} / 8; H1(z) = {-1, 2, -1} / 2; Here an example of the filtering process: y0[1] = (-z[-2] + z[-1]*2 + z[0]*6 + z[1]*2 - z[2]) / 8; y1[1] = (-z[0] + z[1]*2 - z[2]) / 2; where "y0" is the output of the low-pass filter and "y1" is the output of the high-pass one. The low-pass filtering is performed on even coeffs and the high-pass - on odd ones. The resulting arrays "y0" and "y1" are only the half of the input size (downsampled). Here the resulting wavelet coefficients: y0[4] = { 88, 65, -16, -15}; y1[4] = {-84, -37, 32, 4}; Now I want to do the inverse DWT. If I understand right I need to upsample both y0 and y1 by inserting zeroes before filtering. That leads to the following arrays: y0[8] = { 88, 0, 65, 0, -16, 0, -15, 0}; y1[8] = {-84, 0, -37, 0, 32, 0, 4, 0}; When I try to apply the synthesis filters to the coeffs above I get an output that doesn't even closely match my input signal! I must doing something really wrong! Here's how I'm doing it: tmp = (84 + 0*2 - 37*6 + 0*2 - 32) / 8; tmp += (65 + 0*2 - 16) / 2; I know it looks definitely wrong... Could anyone help me to understand this by showing how to perform the inverse filtering properly? What looks really strange to me is the fact that some filter coeffs should be multiplied by zeroes from the upsampled signal! This looks redundand to me... Any help would be appreciated! Regards Maxim
Help with 5/3 IDWT needed
Started by ●June 8, 2009