BeginPackage["Waves`"] (* Author: Brani Vidakovic, ISDS, Duke University ; Functions Dec and Comp are based on M. V. Wickerhauser's mathematica program; December 1994*) 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[ ]