The goal is to vary the order parameters in wavelet transforms in the Manipulate
environment. The various transformations have arguments of different rank. For example,
HaarWavelet[]
has no order argument.
DaubechiesWavelet[m]
has a single order argument $m$ and the desire is to present choices for $m$.
BiorthogonalSplineWavelet[m,n]
has an order parameter $m$ and a dual order parameter $n$ and the desire is to let the user control $m$ and $n$.
The current state of my effort is this:
data = DiskMatrix[10]; Manipulate[ dwt = DiscreteWaveletTransform[dat32, wavelet]; gdwd = WaveletMatrixPlot[dwt] , {wavelet, {HaarWavelet[], DaubechiesWavelet[], MeyerWavelet[]}}]
The different transforms can be selected, but there is no capability to change the order parameters. How can order parameters be introduced?
Answer
I'm pretty sure there ought to be something cleaner. While we wait for a better answer, you may use this to return the minimum and maximum number of arguments allowed for each wavelet:
nArgs[fun_] :=
StringCases[ToString@DownValues@fun,
Shortest["ArgumentCountQ"~~__~~(n1:NumberString)~~__~~ (n2:NumberString)] :>
ToExpression[{n1, n2}]]
{#, nArgs@#} & /@ ToExpression /@ Names["*Wavelet"]
(*
{{BattleLemarieWavelet, {{2, 2}}},
{BiorthogonalSplineWavelet, {{2, 2}}},
{CDFWavelet, {{1, 1}}},
{CoifletWavelet, {{1, 1}}},
{DaubechiesWavelet, {{1, 1}}},
{DGaussianWavelet, {{1, 1}}},
{GaborWavelet, {{1, 1}}},
{HaarWavelet, {{0, 0}}},
{MexicanHatWavelet, {{1, 1}}},
{MeyerWavelet, {{2, 2}}},
{MorletWavelet, {{0, 0}}},
{PaulWavelet, {{1, 1}}},
{ReverseBiorthogonalSplineWavelet, {{2, 2}}},
{ShannonWavelet, {{1, 1}}},
{SymletWavelet, {{1, 1}}}}
*)
So:
m[fun_] := nArgs[fun][[1, 2]]
d = DiskMatrix[10];
Manipulate[
WaveletMatrixPlot@DiscreteWaveletTransform[d, wv[Sequence @@ x[[;; m@wv]]]],
{{x, {1, 1}}, ControlType -> None},
{wv, {HaarWavelet, DaubechiesWavelet, MeyerWavelet}},
Dynamic@Panel@Grid[{Slider[Dynamic@x[[#]], {0, 10, 1}], x[[#]]} & /@ Range@m@wv]]
Comments
Post a Comment