Package edu.cmu.sphinx.frontend

Source Code of edu.cmu.sphinx.frontend.RandomDataProcessor

package edu.cmu.sphinx.frontend;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.testng.annotations.BeforeMethod;

import edu.cmu.sphinx.frontend.BaseDataProcessor;
import edu.cmu.sphinx.frontend.Data;
import edu.cmu.sphinx.frontend.DataProcessingException;
import edu.cmu.sphinx.frontend.DoubleData;

/**
* A DataProcessor implemenation which can be used to setup simple unit-tests for other DataProcessors. Addtionally some
* static utility methods which should ease unit-testing of DataProcessors are provided by this class.
*
* @author Holger Brandl
*/
public abstract class RandomDataProcessor extends BaseDataProcessor {

    public static Random r = new Random(123);

    protected List<Data> input;


    @BeforeMethod
    public void setUp() {
        input = new ArrayList<Data>();
    }


    @Override
    public Data getData() throws DataProcessingException {
        return input.isEmpty() ? null : input.remove(0);
    }


    public List<Data> collectOutput(BaseDataProcessor dataProc) throws DataProcessingException {
        dataProc.setPredecessor(this);

        List<Data> output = new ArrayList<Data>();

        Data d;
        while ((d = dataProc.getData()) != null) {
            output.add(d);
        }

        return output;
    }


    public static List<DoubleData> createFeatVectors(double lengthSec, int sampleRate, long startSample, int featDim, double shiftMs) {
        int numFrames = (int) Math.ceil((lengthSec * 1000) / shiftMs);
        List<DoubleData> datas = new ArrayList<DoubleData>(numFrames);

        long curStartSample = startSample;
        long shiftSamples = ms2samples((int) shiftMs, sampleRate);
        for (int i = 0; i < numFrames; i++) {
            double[] values = createRandFeatureVector(featDim, null, null);
            datas.add(new DoubleData(values, sampleRate, curStartSample));

            curStartSample += shiftSamples;
        }

        return datas;
    }


    public static double[] createRandFeatureVector(int featDim, double[] mean, double[] variance) {
        if (mean == null) {
            mean = new double[featDim];
        }

        if (variance == null) {
            variance = new double[featDim];
            for (int i = 0; i < variance.length; i++) {
                variance[i] = 1;
            }
        }

        assert featDim == mean.length && featDim == variance.length;

        double[] updBlock = new double[featDim];

        for (int i = 0; i < updBlock.length; i++) {
            updBlock[i] = mean[i] + variance[i] * r.nextDouble(); // *10 to get better debuggable (sprich: merkbarer) values
        }

        return updBlock;
    }


    public static long ms2samples(double ms, int sampleRate) {
        return Math.round(sampleRate * ms / 1000);
    }
}
TOP

Related Classes of edu.cmu.sphinx.frontend.RandomDataProcessor

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.