wd(data, filter.number=2, family="DaubExPhase", bc="periodic",
verbose=FALSE)
bc=="periodic"
the default, then the
function you decompose is assumed to be periodic on its interval of
definition,
if bc == "symmetric"
, the function beyond its boundawd
, see wd.object
for details.
Basically, this object is a list with the following componentsaccessC
should be used to extract these.accessD
should be used to extract the
coefficients for a particular resolution level.length(data) = 2^m
, then there will be m
resolution levels.wd.object
and
first.last
for details.Then from this you obtain two vectors of length 2^(m-1). One of these is a set of smoothed data, c(m-1), say. This looks like a smoothed version of cm. The other is a vector, d(m-1), say. This corresponds to the detail removed in smoothing cm to c(m-1). More precisely, they are the coefficients of the wavelet expansion corresponding to the highest resolution wavelets in the expansion. Similarly, c(m-2) and d(m-2) are obtained from c(m-1), etc. until you reach c0 and d0.
All levels of smoothed data are stacked into a single vector for memory efficiency and ease of transport across the SPlus-C interface.
The smoothing is performed directly by convolution with the wavelet filter (filter.select(n)$H, essentially low-pass filtering), and then dyadic decimation (selecting every other datum, see Vaidyanathan (1990)). The detail extraction is performed by the mirror filter of H, which we call G and is a bandpass filter. G and H are also known quadrature mirror filters.
There are now two methods of handling "boundary problems". If you know that your function is periodic (on it's interval) then use the bc="periodic" option, if you think that the function is symmetric reflection about each boundary then use bc="symmetric". If you don't know then it is wise to experiment with both methods, in any case, if you don't have very much data don't infer too much about your decomposition! If you have loads of data then don't infer too much about the boundaries. It can be easier to interpret the wavelet coefficients from a bc="periodic" decomposition, so that is now the default. Numerical Recipes implements some of the wavelets code, in particular we have compared our code to "wt1" and "daub4" on page 595. We are pleased to announce that our code gives the same answers! The only difference that you might notice is that one of the coefficients, at the beginning or end of the decomposition, always appears in the "wrong" place. This is not so, when you assume periodic boundaries you can imagine the function defined on a circle and you can basically place the coefficient at the beginning or the end (because there is no beginning or end, as it were).
Chui, C. K. (1992). An Introduction to Wavelets; Academic Press, London.
Daubechies, I. (1988). Orthonormal bases of compactly supported wavelets; Communications on Pure and Applied Mathematics, 41, 909-996.
Daubechies, I. (1992). Ten Lectures on Wavelets; CBMS-NSF Regional Conference Series in Applied Mathematics.
Donoho, D and Johnstone, I. (1994). Ideal Spatial Adaptation by Wavelet Shrinkage; Biometrika; 81, 425-455.
Mallat, S. G. (1989). A theory for multiresolution signal decomposition: the wavelet representation; IEEE Transactions on Pattern Analysis and Machine Intelligence, 11, No. 7, 674-693.
Vaidyanathan, P. P. (1990). Multirate digital filters, filter banks, polyphase networks and applications: A tutorial; Proceedings of the IEEE, 78, No.~1, 56-93
wr
, threshold
, plot.wd
,
accessC
, accessD
,
filter.select
.## Example from Nason's 1993 report
f.ssl <- function(x) sin(x) + sin(2*x) + log(1+x)
m <- 10 ; n <- 2^m
x <- seq(0, 10*pi, length = n)
fx <- f.ssl(x)
y <- fx + rnorm(n, s= .3)
## Decompose the test data
summary(wds <- wd(y))
Run the code above in your browser using DataLab