There are actually four filters involved:
- 2 for the decomposition of signals [the h[n] and g[n] in the diagram above]
- 2 for the reconstruction of signals
The diagram you are showing is only for signal decomposition. There is a corresponding diagram for signal reconstruction which involves upsampling the coefficients by inserting zeros, then passing them through reconstruction low pass and high pass filters, and then summing the approximation and detail components.
The four filters together form a perfect reconstruction filter bank.
- dec_lo (decompostion low pass filter), dec_hi (decomposition high pass filter)
- rec_lo (reconstruction low pass filter), rec_hi (reconstruction high pass filter)
For orthogonal wavelets, these filters have a specific relationship:
- dec_lo = rec_lo[::-1]
- rec_hi = qmf(rec_lo)
- dec_hi = rec_hi[::-1]
where qmf
stands for quadrature mirror filter:
def qmf(h):
g = h[::-1]
g[1::2] = -g[1::2]
return g
Thus, if you have chosen a rec_lo
filter properly, all other filters are automatically derived from it. This discussion is limited to orthogonal wavelets.
A wavelet family essentially describes such filter banks. Each member of a wavelet family corresponds to a unique filter bank. Every family of wavelets has some unique features [like the number of vanishing moments of the scaling and wavelet functions, symmetry in the wavelet, etc.].
The wavelet or scaling functions are not directly used in the DWT or IDWT. They characterize the filter banks. However, if you pass a specific impulse function as input to the DWT, you will get the scaling or wavelet function at the appropriate scale and location as output.