AvBasis.wst(wst, Ccode=TRUE)
2^nlev
where nlev
is the number of levels in the input wst
object.
2^J = n
where n
is the number of
data points of the input vector. As such the packet-ordered
non-decimated wavelet transform contains a library of all possible shifted
wavelet bases.
Basis selection It is possible to select a particular basis and invert that particular representation. In WaveThresh a basis is selected by creating a nv (node.vector) class object which identifies the basis. Then the function InvBasis takes the wavelet representation and the node.vector and inverts the representation with respect to the selected basis. The two functions MaNoVe and numtonv create a node.vector: the first by using a Coifman-Wickerhauser minimum entropy best-basis algorithm and the second by basis index.
Basis averaging. Rather than select a basis it is often useful to preserve information from all of the bases. For example, in curve estimation, after thresholding a wavelet representation the coefficients are coefficients of an estimate of the truth with respect to all of the shifted basis functions. Rather than select one of them we can average over all estimates. This sometimes gives a better curve estimate and can, for example, get rid of Gibbs effects. See Coifman and Donoho (1995) for more information on how to do curve estimation using the packet ordered non-decimated wavelet transform, thresholding and basis averaging.
Further it might seem that inverting each wavelet transform and averaging might be a computationally expensive operation: since each wavelet inversion costs order n operations and there are n different bases and so you might think that the overall order is n^2. It turns out that since many of the coarser scale basis functions are duplicated between bases there is redundancy in the non-decimated transform. Coifman and Donoho's TI-denoising algorithm makes use of this redundancy which results in an algorithm which only takes order nlogn operations.
For an example of denoising using the packet-ordered non-decimated wavelet transform and basis averaging see Johnstone and Silverman, 1997. The WaveThresh implementation of the basis averaging algorithm is to be found in Nason and Silverman, 1995
# # Generate some test data # test.data <- example.1()$y # # Now take the packet-ordered non-decimated wavelet transform # tdwst <- wst(test.data) # # Now "invert" it using basis averaging # tdwstAB <- AvBasis(tdwst) # # Let's compare it to the original # sum( (tdwstAB - test.data)^2) # # [1] 9.819351e-17 # # Very small. They're essentially same. # # See the MaNoVe.wst help page for an # an example of using basis averaging in curve estimation and comparing it # to a basis selection reconstruction using a Coifman-Wickerhauser like # basis selection algorithm.