Main Content

Scaling Function and Wavelet

This example uses wavefun to demonstrate how the number of vanishing moments in a biorthogonal filter pair affects the smoothness of the corresponding dual scaling function and wavelet. While this example uses wavefun for a biorthogonal wavelet, 'bior3.7', you can also use wavefun to obtain orthogonal scaling and wavelet functions.

First, obtain the scaling and wavelet filters and look at the number of vanishing moments in the wavelets. This is equivalent to looking at the number of zeros at -1+i0 in the dual filter.

[LoD,HiD,LoR,HiR] = wfilters('bior3.7');

If you have the Signal Processing Toolbox™, you can use zplane to look at the number of zeros at -1+i0 for both the decomposition and reconstruction filters.

zplane(LoD); title('Decomposition Filter');

Figure contains an axes object. The axes object with title Decomposition Filter contains 4 objects of type line, text.

figure;
zplane(LoR); title('Reconstruction Filter');

Figure contains an axes object. The axes object with title Reconstruction Filter contains 5 objects of type line, text.

If you zoom in on the region around -1+i0, you find there are 7 zeros in the decomposition filter and 3 zeros in the reconstruction filter. This has important consequences for the smoothness of the corresponding scaling functions and wavelets. For biorthogonal wavelets, the more zeros at -1+i0 in the lowpass filter, the smoother the opposite scaling function and wavelet is. In other words, more zeros in the decomposition filter implies a smoother reconstruction scaling function and wavelet. Conversely, more zeros in the reconstruction filter implies a smoother decomposition scaling function and wavelet.

Use wavefun to confirm this. For orthogonal and biorthogonal wavelets, wavefun works by reversing the Mallat algorithm. Specifically, the algorithm starts with a single wavelet or scaling coefficient at the coarsest resolution level and reconstructs the wavelet or scaling function to the specified finest resolution level. Generally, 8 to 10 levels is sufficient to get an accurate representation of the scaling function and wavelet.

[phiD,psiD,phiR,psiR] = wavefun('bior3.7',10);
subplot(2,1,1)
plot([phiD' phiR']); grid on;
title('Bior3.7 Scaling Functions');
legend('Decomposition','Reconstruction');
subplot(2,1,2)
plot([psiD' psiR']); grid on;
title('Bior3.7 Wavelets');
legend('Decomposition','Reconstruction');

Figure contains 2 axes objects. Axes object 1 with title Bior3.7 Scaling Functions contains 2 objects of type line. These objects represent Decomposition, Reconstruction. Axes object 2 with title Bior3.7 Wavelets contains 2 objects of type line. These objects represent Decomposition, Reconstruction.

Because there are more than twice the number of zeros at -1+i0 for the lowpass decomposition filter, the dual (reconstruction) scaling function and wavelet are much smoother than the analysis (decomposition) scaling function and wavelet.