Package ru.ifmo.diplom.kirilchuk.jawelet.dwt.transforms

Source Code of ru.ifmo.diplom.kirilchuk.jawelet.dwt.transforms.DiscreteWaveletTransformTest

package ru.ifmo.diplom.kirilchuk.jawelet.dwt.transforms;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

import java.util.Random;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import ru.ifmo.diplom.kirilchuk.jawelet.core.dwt.DecompositionResult;
import ru.ifmo.diplom.kirilchuk.jawelet.core.dwt.transforms.DWTransform1D;
import ru.ifmo.diplom.kirilchuk.jawelet.core.dwt.transforms.haar.impl.HaarWaveletTransform;
import ru.ifmo.diplom.kirilchuk.jawelet.core.dwt.transforms.legall.impl.LeGallWaveletTransform;
import ru.ifmo.diplom.kirilchuk.jawelet.util.MathUtils;

/**
*
* @author Kirilchuk V.E.
*/
public class DiscreteWaveletTransformTest {

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    private static double DOBLE_COMPARISON_DELTA = 1.0e-12;

    @Test
    public void testDecomposeTo1Level() {
        double[] data = {0, 1, 2, 3, 4, 5, 6, 7};

        DWTransform1D instance = new HaarWaveletTransform();
        double[] approximationExpect = {2.121320343559, 4.949747468305, 7.778174593052, 4.949747468305};
        double[] detailExpect = {-0.707106781186, -0.707106781186, -0.707106781186, 4.949747468306};

        DecompositionResult result = instance.decompose(data, 1);
        assertArrayEquals(approximationExpect, result.getApproximation(), DOBLE_COMPARISON_DELTA);
        assertArrayEquals(detailExpect, result.getDetailsList().get(0), DOBLE_COMPARISON_DELTA);
    }

    @Test
    public void testReconstructionFrom1LevelDecomposition() {
        double[] data = {0, 1, 2, 3, 4, 5, 6, 7};

        DWTransform1D instance = new HaarWaveletTransform();
        double[] approximationExpect = {2.121320343559, 4.949747468305, 7.778174593052, 4.949747468305};
        double[] detailExpect = {-0.707106781186, -0.707106781186, -0.707106781186, 4.949747468306};

        DecompositionResult result = instance.decompose(data, 1);
        assertArrayEquals(approximationExpect, result.getApproximation(), DOBLE_COMPARISON_DELTA);
        assertArrayEquals(detailExpect, result.getDetailsList().get(0), DOBLE_COMPARISON_DELTA);

        double[] reconstructed = instance.reconstruct(result);
        assertArrayEquals(data, reconstructed, DOBLE_COMPARISON_DELTA);
    }

    @Test
    public void testReconstructionFrom2LevelDecomposition() {
        double[] data = {0, 1, 2, 3, 4, 5, 6, 7};

        DWTransform1D instance = new HaarWaveletTransform();

        DecompositionResult result = instance.decompose(data, 2);

        double[] reconstructed = instance.reconstruct(result);
        assertArrayEquals(data, reconstructed, DOBLE_COMPARISON_DELTA);
    }

   
    @Test
    public void testReconstructionFrom3LevelDecomposition() {
        double[] data = {0, 1, 2, 3, 4, 5, 6, 7};

        DWTransform1D instance = new HaarWaveletTransform();

        DecompositionResult result = instance.decompose(data, 3);

        double[] reconstructed = instance.reconstruct(result);
        assertArrayEquals(data, reconstructed, DOBLE_COMPARISON_DELTA);
    }

    @Test
    public void testRandomFullDecomposeReconstructionWithHaar() {
        Random rnd = new Random();
        int length = rnd.nextInt(1000) + 1000; //data with 1000..1999 elements
        int extendedLength = MathUtils.getClosest2PowerValue(length);
        int power = MathUtils.getExact2Power(extendedLength);
       
        double[] data = new double[extendedLength];
        for (int i = 0; i < data.length; i++) {
            data[i] = rnd.nextInt(Integer.MAX_VALUE);
        }

        DWTransform1D instance = new HaarWaveletTransform();

        DecompositionResult result = instance.decompose(data);
        assertEquals(power, result.getLevel());
        assertEquals(1, result.getApproximation().length);

        double[] reconstructed = instance.reconstruct(result);

        assertArrayEquals(data, reconstructed, 1);
    }

    @Ignore //need to be rewrited to inplace decomposition
    @Test
    public void testReconstructionFrom1LevelWithLeGall() {
        double[] data = {1,2,3,4};

        DWTransform1D instance = new LeGallWaveletTransform();
        DecompositionResult result = instance.decompose(data, 1);

        double[] reconstructed = instance.reconstruct(result);
        assertArrayEquals(data, reconstructed, DOBLE_COMPARISON_DELTA);
    }

    @Ignore //need to be rewrited to inplace decomposition
    @Test
    public void testRandomFullDecomposeReconstructionWithLeGall() {
        Random rnd = new Random();
        int length = rnd.nextInt(1000) + 1000; //data with 1000..1999 elements
        int extendedLength = MathUtils.getClosest2PowerValue(length);
        int power = MathUtils.getExact2Power(extendedLength);

        double[] data = new double[extendedLength];
        for (int i = 0; i < data.length; i++) {
            data[i] = rnd.nextInt(Integer.MAX_VALUE);
        }

        DWTransform1D instance = new LeGallWaveletTransform();

        DecompositionResult result = instance.decompose(data, power - 1);
        assertEquals(power - 1, result.getLevel());
        assertEquals(2, result.getApproximation().length);

        double[] reconstructed = instance.reconstruct(result);

        assertArrayEquals(data, reconstructed, 1);
    }
}
TOP

Related Classes of ru.ifmo.diplom.kirilchuk.jawelet.dwt.transforms.DiscreteWaveletTransformTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.