Functions¶
The functions provide by GeneralizedSampling are divided into three categories: High level functions related to change of basis types, functions for computing Fourier transforms used in construction change of basis objects and miscellaneous.
Furthermore, the type hierarchy of change of basis objects is introduced.
Wavelets¶
Currently GeneralizedSampling supports reconstruction in Daubechies wavelets/scaling functions. As the reconstruction happens on \([-1/2,1/2]\) the functions near the boundaries needs to be modified – which can happen in multiple ways. We have chosen the boundary wavelets from [CDV93], which has the same number of vanishing moments as the internal/non-boundary wavelets.
The allowed wavelets are named “haar”, “db1”, “db2”, ..., “db8”.
Change of basis¶
-
freq2wave(samples, wavename, J, B, ...)¶ Compute a frequency-to-wavelet change of basis object.
samplesare the sampling locations. For 1D samples it a vector and for 2D samples it is matrix with 2 columns.wavenameis a string as described in in the Wavelets section.Jis the scale of the reconstruction wavelets (the \(V_J\) space in multiresolution terminology). Note that \(2^J\) has to be larger than the length of the wavelet’s support.- If
samplesare not a uniform grid, a bandwidthBhas to be supplied that is larger thanmaxabs(samples). Note that ifBis too large the density of the samples may also be too large, which degenerates the condition number ofT - The optional arguments are passed to the functions computing Fourier transforms of the wavelet (if needed).
As mentioned in Getting Started, the benefit of generalized sampling is that the computations are numerically stable. However, some assumptions must be fulfilled:
- There should be more samples than reconstruction coefficients. The ratio between samples and the number of reconstruction coefficients that ensures a numerically stable matrix is called the stable sampling rate. For uniform samples the stable sampling rate is well described – see References. For non-uniform samples the stable sampling rate also depends on the density of the samples, which is defined as the minimum radius that gives a covering of the bandwidth area with equal sized circles centered at the sampling points.
- The samples should be distributed around the origin, i.e., only positive samples does not work.
Example:
samples = grid(2^7, 0.5) T = freq2wave(samples, "db2", 6)
-
collect(T)¶ Compute the explicit change of basis matrix from
T. Note that this is time consuming and possible impossible to hold in memory for large sampling/reconstrution sets.
-
\ Overload of the usual backslash operator:
x = T \ bcomputes the least squares solution of \(Tx \approx b\).
-
*, '* Overload of multiplication with
TandT', the adjoint ofT.
-
size(T)¶ Get the size of
Tas a tuple \((M,N)\).
-
size(T, d) Get the size along dimension
dofT.
-
wsize(T)¶ Get the size of the reconstructed wavelets as a tuple. In 1D the result is \((N,)\) and in 2D the result is \((N,N)\).
-
isuniform(T)¶ Returns
trueif the samples used forTare uniform andfalseotherwise.
-
hasboundary(T)¶ Returns
trueif the wavelet used for reconstruction inThas special functions near boundaries andfalseotherwise.
-
van_moment(T)¶ Get the number of vanishing moments of the wavelet used for reconstruction in
T.
Types¶
The abstract change of basis supertype is denoted CoB.
The specific change of basis types implemented are from Fourier to wavelet bases.
They are collectively denoted Freq2Wave and are a subtype of CoB:
Freq2Wave <: CoB
The computations for wavelets with boundary correction are more involved than for those without and therefore two subtypes of Freq2Wave are introduced for both 1D and 2D:
Freq2NoBoundaryWave1D <: Freq2Wave
Freq2BoundaryWave2D <: Freq2Wave
Freq2NoBoundaryWave1D <: Freq2Wave
Freq2BoundaryWave2D <: Freq2Wave
Fourier transforms¶
Fourier transforms of the scaling functions are available. The high level interface is
-
FourScalingFunc(xi, wavename, J, k; ...)¶ Evaluate the Fourier transform of
wavenameatxi.xiis either a real number of an array of real numbers.wavenameis a string as described in in the Wavelets section.- Optional
Jis the scale of the scaling function, which by default is 0. - Optional
kis the translation of the scaling function, which by default is 0.
The remaining arguments relate to the iterative computations of the Fourier transforms and are usually not needed. Check the inside documentation for more info.
As an example, the following command computes the Fourier transform of the Daubechies 2 scaling function and plots the real and imaginary part using Winston:
x = linspace(-5, 5, 1000) y = FourDaubScaling(x, "db2") using Winston plot(x, real(y), x, imag(y))
-
FourScalingFunc(xi, wavename, side, J, k; ...) As above, but for the boundary scaling functions.
sideis either'L'or'R'.Note that these Fourier transforms are for the scaling functions that in the time domain are translated to fir the reconstruction interval \([-1/2,1/2]\), i.e., their Fourier transforms are phase shifted.
The lower level functions are available for each type of scaling function, but not documented here.
Check the documentation in Julia with the usual ?function where function is FourHaarScaling or FourDaubScaling.
Miscellaneous¶
Functions that are used for internal documentation are not documented here; they all have documentation available from within Julia.
To generate sampling locations from a uniformly spaced grid there are functions in 1D and 2D.
-
grid(M, D)¶ Return a vector of
Mlocations evenly distributed around the origin with distance D. By default,D = 1.
-
grid((M, N), D) Return a matrix with 2 columns containing the
x- andy-values of a uniformly distributed grid of locations around the origin with distanceD. There areMdifferent locations in the 1st dimension andNdifferent locations in the 2nd dimension.
-
isuniform(points) Returns
trueifpointsare located on a uniform grid such as the output fromgridandfalseotherwise.
For a configuration of sampling locations xi the density correcting weights and its density are available as
-
weights(xi, K)¶
-
density(xi, K)¶
The bandwidth K is explained in Change of basis and must be at least maxabs(xi).
When dealing with wavelets with boundary corrections, computations differs for the internal and boundary parts.
To this end, the split function is available to help divide a vector or matrix of coefficients into the parts related to internal/boundary functions.
-
split(x, B)¶ Returns three vector slices of the
Bleftmost, the internal and theBrightmost entries ofx, respectively.
-
split(A, B) Returns slices of the outer parts of
Aand its internal parts. The outer parts are each of the four \(B\times B\) corners and each of the four non-corner sides (with one dimension equal toB).