1

The question is why can data be recovered perfectly from a discrete wavelet transform with a Haar wavelet but not with some Battle-Lemarie wavelets?

A simple example with the HaarWavelet[]:

data3 = Table[Random[Real, 10], {k, 30}]

{0.702135, 4.9963, 4.89421, 9.69088, 0.396075, 0.781406, 
6.41113, 6.82329, 6.51081, 7.93571, 9.42005, 9.27458, 4.27116, 
2.14756, 6.01304, 7.76658, 7.86689, 9.94061, 7.02273, 6.3883, 
7.34664, 4.71568, 4.7454, 5.27213, 6.64451, 9.71938, 9.85119, 
5.58125, 6.24843, 8.93798}

re2 = DiscreteWaveletTransform[data3, HaarWavelet[], WorkingPrecision -> MachinePrecision]

InverseWaveletTransform[re2]
{0.702135, 4.9963, 4.89421, 9.69088, 0.396075, 0.781406, 6.41113, 
6.82329, 6.51081, 7.93571, 9.42005, 9.27458, 4.27116, 2.14756, 
6.01304, 7.76658, 7.86689, 9.94061, 7.02273, 6.3883, 7.34664, 
4.71568, 4.7454, 5.27213, 6.64451, 9.71938, 9.85119, 5.58125, 
6.24843, 8.93798}

And now the same with a Battle-Lemarie wavelet:

data3 = Table[Random[Real, 10], {k, 30}]

{4.57767, 9.00061, 4.69697, 2.98705, 0.880157, 9.86854, 
4.00198, 4.89448, 3.5703, 5.21159, 0.666989, 2.34296, 9.20806, 
6.2718, 4.95437, 4.33022, 3.7734, 3.56578, 1.39766, 2.00157, 9.25936, 
5.37673, 2.39729, 6.44292, 4.68169, 6.37612, 7.70032, 3.45587, 
3.80153, 6.50759}

re2 = 
 DiscreteWaveletTransform[data3, BattleLemarieWavelet[1, 10], 
  WorkingPrecision -> MachinePrecision]

InverseWaveletTransform[re2]

{4.22627, 11.0403, 4.47468, 1.00538, 2.57364, 12.6589, 
2.97526, 2.00396, 0.903247, 4.00951, 1.49102, 0.706097, 7.48314, 
8.84186, 6.57139, 2.88699, 1.16318, 2.09853, 2.98261, 1.89232, 
7.64724, 7.39258, 5.25025, 6.75834, 5.33315, 8.11338, 7.85654, 
3.73812, 5.31351, 6.48029}

I know I can increase the precision by taking a higher value then 10 within the calculation of the Battle-Lemarie wavelet, but since I'm limited in this case by 30 data points, I can't get a perfect reconstruction?

Thanks for some help :).

J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
Dan
  • 233
  • 1
  • 8

1 Answers1

2

When taking transforms and their inverses, it is necessary to use the same options in both operations. In your case, you need to tell the InverseWaveletTransform to use the BattleLemarieWavelet option since you gave this option to the DiscreteWaveletTransform, that is:

InverseWaveletTransform[re2, BattleLemarieWavelet[1, 10]]

will recover the input data.

bill s
  • 68,936
  • 4
  • 101
  • 191
  • I tried that before and this will not recover the data. You tried that with your mathematica? I'm using mathematica 8 what's your version you tested it with? – Dan May 11 '16 at 09:18
  • 1
    It works fine. It does give back the same data you start with. I'm using ver. 10. – bill s May 11 '16 at 13:23
  • So than it seems so be a bug in Mathematica 8. It's possible since the wavelet analysis was added first time in version 8. Thank you :). – Dan May 11 '16 at 13:54