Package org.vocvark.AudioFeatures

Source Code of org.vocvark.AudioFeatures.Compactness

/*
* @(#)Compactness.java  1.0  April 7, 2005.
*
* McGill Univarsity
*/

package org.vocvark.AudioFeatures;

import org.vocvark.DataTypes.FeatureDefinition;

/**
* A feature extractor that extracts the Compactness. This is a measure of the
* noisiness of a signal.
* <p/>
* This is calculated by comparing the value of a magnitude spectrum bin with
* its surrounding values.
* <p/>
* No extracted feature values are stored in objects of this class.
* <p/>
* Daniel McEnnis 05-07-05 added check for degenerate case of 0 in magnitude
* spectrum and added clone
*
* @author Cory McKay
*/
public class Compactness extends FeatureExtractorBaseImpl {
    /* CONSTRUCTOR ************************************************************* */

    /**
     * Basic constructor that sets the definition and dependencies (and their
     * offsets) of this feature.
     */
    public Compactness() {
        String name = "Compactness";
        String description = "A measure of the noisiness of a signal. "
                + "Found by comparing the components of a window's "
                + "magnitude spectrum with the magnitude spectrum "
                + "of its neighbouring windows.";
        boolean is_sequential = true;
        int dimensions = 1;
        definition = new FeatureDefinition(name, description, is_sequential,
                dimensions);

        dependencies = new String[1];
        dependencies[0] = "Magnitude Spectrum";

        offsets = new int[1];
        offsets[0] = 0;
    }

    /* PUBLIC METHODS ********************************************************* */

    /**
     * Extracts this feature from the given samples at the given sampling rate
     * and given the other feature values.
     * <p/>
     * In the case of this feature, the sampling_rate parameter is ignored.
     * <p/>
     * Daniel McEnnis 05-07-05 checks for degenerate case where magnitude
     * spectrum entry is exactly zero - skips these values
     *
     * @param samples              The samples to extract the feature from.
     * @param sampling_rate        The sampling rate that the samples are encoded with.
     * @param other_feature_values The values of other features that are needed to calculate this
     *                             value. The order and offsets of these features must be the
     *                             same as those returned by this class's getDependencies and
     *                             getDependencyOffsets methods respectively. The first indice
     *                             indicates the feature/window and the second indicates the
     *                             value.
     * @return The extracted feature value(s).
     * @throws Exception Throws an informative exception if the feature cannot be
     *                   calculated.
     */
    public double[] extractFeature(double[] samples, double sampling_rate,
                                   double[][] other_feature_values) throws Exception {
        double[] mag_spec = other_feature_values[0];
        double compactness = 0.0;
        for (int i = 1; i < mag_spec.length - 1; i++) {
            if ((mag_spec[i - 1] > 0.0) && (mag_spec[i] > 0.0)
                    && (mag_spec[i + 1] > 0.0)) {
                compactness += Math
                        .abs(20.0
                                * Math.log(mag_spec[i])
                                - 20.0
                                * (Math.log(mag_spec[i - 1])
                                + Math.log(mag_spec[i]) + Math
                                .log(mag_spec[i + 1])) / 3.0);
            }
        }

        double[] result = new double[1];
        result[0] = compactness;
        return result;
    }

    /**
     * Create an identical copy of this feature. This permits FeatureExtractor
     * to use the prototype pattern to create new composite features using
     * metafeatures.
     */
    public Object clone() {
        return new Compactness();
    }
}
TOP

Related Classes of org.vocvark.AudioFeatures.Compactness

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.