CALL WAVFT (decomp, data, opt <, levels> );
The fast wavelet transform (WAVFT) subroutine computes a specified discrete wavelet transform of the input data by using the algorithm of Mallat (1989). This transform decomposes the input data into sets of detail and scaling coefficients defined at a number of scales or "levels."
The input data are used as scaling coefficients at the top level in the decomposition. The fast wavelet transform then recursively computes a set of detail and a set of scaling coefficients at the next lower level by respectively applying "low pass" and "high pass" conjugate mirror filters to the scaling coefficients at the current level. The number of coefficients in each of these new sets is approximately half the number of scaling coefficients at the level above them. Depending on the filters being used, a number of additional scaling coefficients, known as boundary coefficients, can be involved. These boundary coefficients are obtained by using a specified method to extend the sequence of interior scaling coefficients
Details of the discrete wavelet transform and the fast wavelet transformation algorithm are available in many references, including Mallat (1989), Daubechies (1992), and Ogden (1997).
The input arguments to the WAVFT subroutine are as follows:
specifies the data to transform. These data must be in either a row or column vector.
refers to an options vector with the following components:
specifies the boundary handling used in computing the wavelet transform. At each level of the wavelet decomposition, necessary boundary scaling coefficients are obtained by extending the interior scaling coefficients at that level as follows:
specifies extension by zero.
specifies periodic extension.
specifies polynomial extension.
specifies extension by reflection.
specifies extension by anti-symmetric reflection.
specifies the polynomial degree that is used for polynomial extension. (The value of opt[2] is ignored if opt[1].)
specifies constant extension.
specifies linear extension.
specifies quadratic extension.
specifies the wavelet family.
specifies the wavelet family member. Valid values are
if opt[3]=1
if opt[3]=2
Some examples of wavelet specifications are
specifies the first member (more commonly known as the Haar system) of the Daubechies extremal phase family with periodic boundary handling.
specifies the fifth member of the Symmlet family with linear extension boundary handling.
is an optional scalar argument that specifies the number of levels from the top level to be computed in the decomposition. If you do not specify this argument, then the decomposition terminates at level 0. Usually, you do not need to specify this optional argument. You use this option to avoid unneeded computations in situations where you are interested in only the higher level detail and scaling coefficients.
The WAVFT subroutine returns
a row vector that encapsulates the specified wavelet transform. The information that is encoded in this vector includes:
the options specified for computing the transform
the number of detail coefficients at each level of the decomposition
all detail coefficients
the scaling coefficients at the bottom level of the decomposition
boundary scaling coefficients at all levels of the decomposition
Note: decomp is a private representation of the specified wavelet transform and is not intended to be interpreted in its raw form. Rather, you should use this vector as an input argument to the WAVIFT , WAVPRINT , WAVGET , and WAVTHRSH subroutines
The following program shows an example that uses wavelet calls to estimate and reconstruct a piecewise constant function:
/* define a piecewise constant step function */ start blocky(t); /* positions (p) and magnitudes (h) of jumps */ p = {0.1 0.13 0.15 0.23 0.25 0.4 0.44 0.65 0.76 0.78 0.81}; h = {4 -5 3 -4 5 -4.2 2.1 4.3 -3.1 2.1 -4.2}; y=j(1, ncol(t), 0); do i=1 to ncol(p); diff = ( (t-p[i])>=0 ); y = y + h[i]*diff; end; return (y); finish blocky; n = 2##8; x = 1:n; x = (x-1)/n; y = blocky(x); opt = { 2, /* polynomial extension at boundary */ 1, /* using linear polynominal */ 1, /* Daubechies Extremal phase */ 3 /* family member 3 */ }; call wavft(decomp, y, opt); call wavprint(decomp,1); /* print summary information */ /* perform permanent thresholding */ threshOpt = { 2, /* soft thresholding */ 2, /* global threshold */ ., /* ignored */ -1 /* apply to all levels */ }; call wavthrsh(decomp, threshOpt); /* request detail coefficients at level 4 */ call wavget(detail4,decomp,2,4); /* reconstruct function by using wavelets */ call wavift(estimate,decomp); errorSS=ssq(y-estimate); print errorSS;