BeginPackage["Waves`"]
(* Author: Brani Vidakovic, ISDS, Duke University ;
Functions Dec and Comp are based on M. V. Wickerhauser's
mathematica program*)
Mirror::usage = "Mirror[_filter_] gives the mirror \
filter for the input _filter_. This is an adjoint \
operator H* of the operator H corresponding to _filter_."
WT::usage = "WT[_vector_, _filter_] performs the direct \
wavelet transformation of the data vector _vector_. \
The wavelet base is chosen by _filter_. The length \
of the vector _vector_ has to be a degree of 2."
WR::usage = "WR[_vector_, _filter_] gives the wavelet \
reconstruction algorithm. From the set of wavelet \
coefficients _vector_ the data set is reconstructed. \
The wavelet base is chosen by _filter_."
Dec::usage = "An auxiliary function needed for the \
direct wavelet transformation. See WT."
Comp::usage = "An auxiliary function needed for the \
inverse wavelet transformation (wavelet reconstruction \
algorithm). See WR."
Begin["`Private`"]
Mirror[ filter_List]:= Module[{fl=Length[filter]},
Table[ -(-1)^i filter[[fl+1-i]], {i, 1, fl}]];
Dec[ vector_List, filter_List]:= Module[
{vl= Length[vector], fl=Length[filter]},
Table[
Sum[ filter[[m]] vector[[Mod[2 k+m - 3, vl]+1 ]],
{m,1,fl}],
{k,1,vl/2}]
];
Comp[ vector_List, filter_List]:= Module[
{ temp=Table[0,{i,1,2 Length[vector]}],
vl=Length[vector], fl=Length[filter]},
Do[ temp[[ Mod[2 j + i -3, 2 vl]+1]] +=
vector[[j]] filter[[i]],
{j, 1, vl}, {i, 1, fl}];
temp];
WT[ vector_List, filter_List]:=
Module[ { wav={}, c,d, ve=vector, H=filter,
G=Mirror[filter]},
While[ Length[ve] > 1,
lev=Log[2,Length[ve]]-1;
c = Dec[ve, H];
d = Dec[ve, G];
wav= Join[ wav, d ];
ve = c]; Join[wav, c] ];
WR[ vector_List, filter_List]:=
Module[ {i=1, vl=Length[vector], c=Take[vector,-1],
d=Take[RotateRight[vector,1],-1],
mirrorf=Mirror[filter], cn, dn, k=1},
While[ i <= vl/2 ,
k += i;
i= 2 i;
cn=Comp[c, filter]+Comp[d, mirrorf];
dn=Take[RotateRight[vector, k], -i ];
c=cn;
d=dn;
];
c ];
End[ ]
EndPackage[ ]